X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=types.h;h=2f8a568802533199648a9aacd0b8fdca55d70a24;hb=a7821774c50aefa8c758b964814818b4634b77ce;hp=8ef36a13216bc3e323a20da5ff92ce558e77873d;hpb=6f32affb5df1e36aa46dc528397cb70affdb4125;p=bspwm.git diff --git a/types.h b/types.h index 8ef36a1..2f8a568 100644 --- a/types.h +++ b/types.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2014, Bastien Dejean +/* Copyright (c) 2012, Bastien Dejean * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -20,23 +20,19 @@ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those - * of the authors and should not be interpreted as representing official policies, - * either expressed or implied, of the FreeBSD Project. */ #ifndef BSPWM_TYPES_H #define BSPWM_TYPES_H - #include #include +#include #include #include #include "helpers.h" #define MISSING_VALUE "N/A" -#define MAX_STATE 4 +#define MAX_WM_STATES 4 typedef enum { TYPE_HORIZONTAL, @@ -49,30 +45,38 @@ typedef enum { } split_mode_t; typedef enum { - CLIENT_TYPE_ALL, - CLIENT_TYPE_FLOATING, - CLIENT_TYPE_TILED -} client_type_t; + STATE_TILED, + STATE_PSEUDO_TILED, + STATE_FLOATING, + STATE_FULLSCREEN +} client_state_t; typedef enum { - CLIENT_CLASS_ALL, - CLIENT_CLASS_EQUAL, - CLIENT_CLASS_DIFFER -} client_class_t; + WM_FLAG_MODAL = 1 << 0, + WM_FLAG_STICKY = 1 << 1, + WM_FLAG_MAXIMIZED_VERT = 1 << 2, + WM_FLAG_MAXIMIZED_HORZ = 1 << 3, + WM_FLAG_SHADED = 1 << 4, + WM_FLAG_SKIP_TASKBAR = 1 << 5, + WM_FLAG_SKIP_PAGER = 1 << 6, + WM_FLAG_HIDDEN = 1 << 7, + WM_FLAG_FULLSCREEN = 1 << 8, + WM_FLAG_ABOVE = 1 << 9, + WM_FLAG_BELOW = 1 << 10, + WM_FLAG_DEMANDS_ATTENTION = 1 << 11, +} wm_flags_t; typedef enum { - CLIENT_MODE_ALL, - CLIENT_MODE_AUTOMATIC, - CLIENT_MODE_MANUAL -} client_mode_t; + LAYER_BELOW, + LAYER_NORMAL, + LAYER_ABOVE +} stack_layer_t; -typedef struct { - client_type_t type; - client_class_t class; - client_mode_t mode; - bool urgent; - bool local; -} client_select_t; +typedef enum { + OPTION_NONE, + OPTION_TRUE, + OPTION_FALSE +} option_bool_t; typedef enum { ALTER_TOGGLE, @@ -95,28 +99,24 @@ typedef enum { } history_dir_t; typedef enum { - DIR_RIGHT, - DIR_DOWN, - DIR_LEFT, - DIR_UP + DIR_NORTH, + DIR_WEST, + DIR_SOUTH, + DIR_EAST } direction_t; typedef enum { - CORNER_TOP_LEFT, - CORNER_TOP_RIGHT, - CORNER_BOTTOM_RIGHT, - CORNER_BOTTOM_LEFT -} corner_t; + HANDLE_LEFT = 1 << 0, + HANDLE_TOP = 1 << 1, + HANDLE_RIGHT = 1 << 2, + HANDLE_BOTTOM = 1 << 3, + HANDLE_TOP_LEFT = HANDLE_TOP | HANDLE_LEFT, + HANDLE_TOP_RIGHT = HANDLE_TOP | HANDLE_RIGHT, + HANDLE_BOTTOM_RIGHT = HANDLE_BOTTOM | HANDLE_RIGHT, + HANDLE_BOTTOM_LEFT = HANDLE_BOTTOM | HANDLE_LEFT +} resize_handle_t; typedef enum { - SIDE_LEFT, - SIDE_TOP, - SIDE_RIGHT, - SIDE_BOTTOM -} side_t; - -typedef enum { - ACTION_NONE, ACTION_FOCUS, ACTION_MOVE, ACTION_RESIZE_SIDE, @@ -134,96 +134,131 @@ typedef enum { } flip_t; typedef enum { - DESKTOP_STATUS_ALL, - DESKTOP_STATUS_FREE, - DESKTOP_STATUS_OCCUPIED -} desktop_status_t; + FIRST_CHILD, + SECOND_CHILD +} child_polarity_t; -typedef enum { - DESKTOP_URGENCY_ALL, - DESKTOP_URGENCY_ON, - DESKTOP_URGENCY_OFF -} desktop_urgency_t; +typedef struct { + option_bool_t automatic; + option_bool_t focused; + option_bool_t local; + option_bool_t leaf; + option_bool_t window; + option_bool_t tiled; + option_bool_t pseudo_tiled; + option_bool_t floating; + option_bool_t fullscreen; + option_bool_t hidden; + option_bool_t sticky; + option_bool_t private; + option_bool_t locked; + option_bool_t urgent; + option_bool_t same_class; + option_bool_t below; + option_bool_t normal; + option_bool_t above; +} node_select_t; typedef struct { - desktop_status_t status; - bool urgent; - bool local; + option_bool_t occupied; + option_bool_t focused; + option_bool_t urgent; + option_bool_t local; } desktop_select_t; typedef struct { - xcb_window_t window; + option_bool_t occupied; + option_bool_t focused; +} monitor_select_t; + +typedef struct icccm_props_t icccm_props_t; +struct icccm_props_t { + bool take_focus; + bool input_hint; +}; + +typedef struct { char class_name[3 * SMALEN / 2]; char instance_name[3 * SMALEN / 2]; unsigned int border_width; - bool pseudo_tiled; - bool floating; - bool fullscreen; - bool locked; /* protects window from being closed */ - bool sticky; bool urgent; - bool private; - bool icccm_focus; + bool shown; + client_state_t state; + client_state_t last_state; + stack_layer_t layer; + stack_layer_t last_layer; xcb_rectangle_t floating_rectangle; xcb_rectangle_t tiled_rectangle; - uint16_t min_width; - uint16_t max_width; - uint16_t min_height; - uint16_t max_height; - xcb_atom_t wm_state[MAX_STATE]; - int num_states; + xcb_size_hints_t size_hints; + icccm_props_t icccm_props; + wm_flags_t wm_flags; } client_t; +typedef struct presel_t presel_t; +struct presel_t { + double split_ratio; + direction_t split_dir; + xcb_window_t feedback; +}; + typedef struct node_t node_t; struct node_t { + uint32_t id; split_type_t split_type; double split_ratio; - split_mode_t split_mode; - direction_t split_dir; int birth_rotation; + presel_t *presel; xcb_rectangle_t rectangle; - bool vacant; /* vacant nodes only hold floating clients */ - int privacy_level; + bool vacant; + bool hidden; + bool sticky; + bool private; + bool locked; node_t *first_child; node_t *second_child; node_t *parent; - client_t *client; /* NULL except for leaves */ + client_t *client; +}; + +typedef struct padding_t padding_t; +struct padding_t { + int top; + int right; + int bottom; + int left; }; typedef struct desktop_t desktop_t; struct desktop_t { char name[SMALEN]; + uint32_t id; layout_t layout; node_t *root; node_t *focus; desktop_t *prev; desktop_t *next; - int top_padding; - int right_padding; - int bottom_padding; - int left_padding; + padding_t padding; int window_gap; unsigned int border_width; - bool floating; }; typedef struct monitor_t monitor_t; struct monitor_t { char name[SMALEN]; - xcb_randr_output_t id; - xcb_rectangle_t rectangle; + uint32_t id; + xcb_randr_output_t randr_id; xcb_window_t root; bool wired; - int top_padding; - int right_padding; - int bottom_padding; - int left_padding; + padding_t padding; + unsigned int sticky_count; + int window_gap; + unsigned int border_width; + xcb_rectangle_t rectangle; desktop_t *desk; desktop_t *desk_head; desktop_t *desk_tail; monitor_t *prev; monitor_t *next; - int num_sticky; }; typedef struct { @@ -251,13 +286,15 @@ typedef struct subscriber_list_t subscriber_list_t; struct subscriber_list_t { int fd; FILE *stream; + int field; subscriber_list_t *prev; subscriber_list_t *next; }; typedef struct rule_t rule_t; struct rule_t { - char cause[MAXLEN]; + char class_name[MAXLEN]; + char instance_name[MAXLEN]; char effect[MAXLEN]; bool one_shot; rule_t *prev; @@ -271,16 +308,13 @@ typedef struct { char desktop_desc[MAXLEN]; char node_desc[MAXLEN]; char split_dir[SMALEN]; - uint16_t min_width; - uint16_t max_width; - uint16_t min_height; - uint16_t max_height; - bool pseudo_tiled; - bool floating; - bool fullscreen; - bool locked; + double split_ratio; + stack_layer_t *layer; + client_state_t *state; + bool hidden; bool sticky; bool private; + bool locked; bool center; bool follow; bool manage; @@ -297,27 +331,4 @@ struct pending_rule_t { pending_rule_t *next; }; -typedef struct { - xcb_point_t position; - pointer_action_t action; - xcb_rectangle_t rectangle; - node_t *vertical_fence; - node_t *horizontal_fence; - monitor_t *monitor; - desktop_t *desktop; - node_t *node; - client_t *client; - xcb_window_t window; - bool is_tiled; - double vertical_ratio; - double horizontal_ratio; - corner_t corner; - side_t side; -} pointer_state_t; - -typedef struct { - node_t *fence; - unsigned int distance; -} fence_distance_t; - #endif