X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=types.h;h=199ef727267fca90b135e67330a03072c99db887;hb=914f204c8c3d88cb9bb67be89e93bbc9e1e255eb;hp=99ea69d71c571266173ffcb2d6cd03e168259a08;hpb=fa73a124c96cd0acbca16430a8ad662bb010a6dd;p=bspwm.git diff --git a/types.h b/types.h index 99ea69d..199ef72 100644 --- a/types.h +++ b/types.h @@ -1,12 +1,15 @@ #ifndef _TYPES_H #define _TYPES_H +#include #include #include #include "helpers.h" #define SPLIT_RATIO 0.5 -#define DESK_NAME "One" +#define DEFAULT_DESK_NAME "Desktop" +#define DEFAULT_MON_NAME "Monitor" +#define MISSING_VALUE "N/A" typedef enum { TYPE_HORIZONTAL, @@ -34,35 +37,84 @@ typedef enum { } value_change_t; typedef enum { - SKIP_NONE, - SKIP_FLOATING, - SKIP_TILED + LIST_OPTION_VERBOSE, + LIST_OPTION_QUIET +} list_option_t; + +typedef enum { + SEND_OPTION_FOLLOW, + SEND_OPTION_DONT_FOLLOW +} send_option_t; + +typedef enum { + CLIENT_SKIP_NONE, + CLIENT_SKIP_FLOATING, + CLIENT_SKIP_TILED, + CLIENT_SKIP_CLASS_EQUAL, + CLIENT_SKIP_CLASS_DIFFER } skip_client_t; typedef enum { - DIR_NEXT, - DIR_PREV + DESKTOP_SKIP_NONE, + DESKTOP_SKIP_FREE, + DESKTOP_SKIP_OCCUPIED +} skip_desktop_t; + +typedef enum { + CYCLE_NEXT, + CYCLE_PREV } cycle_dir_t; typedef enum { - ROTATE_CLOCK_WISE, - ROTATE_COUNTER_CW, + NEAREST_OLDER, + NEAREST_NEWER +} nearest_arg_t; + +typedef enum { + CIRCULATE_FORWARD, + CIRCULATE_BACKWARD +} circulate_dir_t; + +typedef enum { + ROTATE_CLOCKWISE, + ROTATE_COUNTER_CLOCKWISE, ROTATE_FULL_CYCLE } rotate_t; typedef enum { DIR_LEFT, - DIR_UP, DIR_RIGHT, + DIR_UP, DIR_DOWN } direction_t; +typedef enum { + TOP_LEFT, + TOP_RIGHT, + BOTTOM_LEFT, + BOTTOM_RIGHT +} corner_t; + +typedef enum { + ACTION_MOVE, + ACTION_RESIZE, + ACTION_FOCUS, + ACTION_NONE +} pointer_action_t; + typedef struct { xcb_window_t window; + unsigned int uid; + char class_name[MAXLEN]; + split_mode_t born_as; + unsigned int border_width; bool floating; - bool transient; + bool transient; /* transient window are always floating */ bool fullscreen; - bool locked; + bool locked; /* protects window from being closed */ + bool urgent; + xcb_rectangle_t floating_rectangle; + xcb_rectangle_t tiled_rectangle; } client_t; typedef struct node_t node_t; @@ -70,11 +122,11 @@ struct node_t { split_type_t split_type; double split_ratio; xcb_rectangle_t rectangle; - bool vacant; /* vacant nodes only hold floating clients */ + bool vacant; /* vacant nodes only hold floating clients */ node_t *first_child; node_t *second_child; node_t *parent; - client_t *client; /* NULL except for leaves */ + client_t *client; /* NULL except for leaves */ }; typedef struct desktop_t desktop_t; @@ -88,33 +140,73 @@ struct desktop_t { desktop_t *next; }; +typedef struct monitor_t monitor_t; +struct monitor_t { + char name[MAXLEN]; + xcb_rectangle_t rectangle; + int top_padding; + int right_padding; + int bottom_padding; + int left_padding; + desktop_t *desk; + desktop_t *last_desk; + desktop_t *desk_head; + desktop_t *desk_tail; + monitor_t *prev; + monitor_t *next; +}; + typedef struct { - char *class_name; - char *instance_name; + char name[MAXLEN]; } rule_cause_t; typedef struct { bool floating; - bool fullscreen; - bool locked; - bool centered; + monitor_t *monitor; + desktop_t *desktop; } rule_effect_t; typedef struct rule_t rule_t; struct rule_t { + unsigned int uid; rule_cause_t cause; rule_effect_t effect; + rule_t *prev; rule_t *next; }; typedef struct { node_t *node; desktop_t *desktop; + monitor_t *monitor; } window_location_t; +typedef struct { + desktop_t *desktop; + monitor_t *monitor; +} desktop_location_t; + +typedef struct { + xcb_point_t position; + pointer_action_t action; + xcb_rectangle_t rectangle; + monitor_t *monitor; + desktop_t *desktop; + node_t *node; + corner_t corner; +} pointer_state_t; + node_t *make_node(void); -desktop_t *make_desktop(void); +monitor_t *make_monitor(xcb_rectangle_t *); +monitor_t *find_monitor(char *); +void add_monitor(xcb_rectangle_t *); +void remove_monitor(monitor_t *); +desktop_t *make_desktop(const char *); +void add_desktop(monitor_t *, char *); +void empty_desktop(desktop_t *); +void remove_desktop(monitor_t *, desktop_t *); client_t *make_client(xcb_window_t); rule_t *make_rule(void); +pointer_state_t *make_pointer_state(void); #endif