]> git.lizzy.rs Git - bspwm.git/blob - types.h
199ef727267fca90b135e67330a03072c99db887
[bspwm.git] / types.h
1 #ifndef _TYPES_H
2 #define _TYPES_H
3
4 #include <stdbool.h>
5 #include <xcb/xcb.h>
6 #include <xcb/xcb_event.h>
7 #include "helpers.h"
8
9 #define SPLIT_RATIO  0.5
10 #define DEFAULT_DESK_NAME    "Desktop"
11 #define DEFAULT_MON_NAME     "Monitor"
12 #define MISSING_VALUE        "N/A"
13
14 typedef enum {
15     TYPE_HORIZONTAL,
16     TYPE_VERTICAL
17 } split_type_t;
18
19 typedef enum {
20     MODE_AUTOMATIC,
21     MODE_MANUAL
22 } split_mode_t;
23
24 typedef enum {
25     LAYOUT_TILED,
26     LAYOUT_MONOCLE
27 } layout_t;
28
29 typedef enum {
30     MOVE_PULL,
31     MOVE_PUSH
32 } fence_move_t;
33
34 typedef enum {
35     CHANGE_INCREASE,
36     CHANGE_DECREASE
37 } value_change_t;
38
39 typedef enum {
40     LIST_OPTION_VERBOSE,
41     LIST_OPTION_QUIET
42 } list_option_t;
43
44 typedef enum {
45     SEND_OPTION_FOLLOW,
46     SEND_OPTION_DONT_FOLLOW
47 } send_option_t;
48
49 typedef enum {
50     CLIENT_SKIP_NONE,
51     CLIENT_SKIP_FLOATING,
52     CLIENT_SKIP_TILED,
53     CLIENT_SKIP_CLASS_EQUAL,
54     CLIENT_SKIP_CLASS_DIFFER
55 } skip_client_t;
56
57 typedef enum {
58     DESKTOP_SKIP_NONE,
59     DESKTOP_SKIP_FREE,
60     DESKTOP_SKIP_OCCUPIED
61 } skip_desktop_t;
62
63 typedef enum {
64     CYCLE_NEXT,
65     CYCLE_PREV
66 } cycle_dir_t;
67
68 typedef enum {
69     NEAREST_OLDER,
70     NEAREST_NEWER
71 } nearest_arg_t;
72
73 typedef enum {
74     CIRCULATE_FORWARD,
75     CIRCULATE_BACKWARD
76 } circulate_dir_t;
77
78 typedef enum {
79     ROTATE_CLOCKWISE,
80     ROTATE_COUNTER_CLOCKWISE,
81     ROTATE_FULL_CYCLE
82 } rotate_t;
83
84 typedef enum {
85     DIR_LEFT,
86     DIR_RIGHT,
87     DIR_UP,
88     DIR_DOWN
89 } direction_t;
90
91 typedef enum {
92     TOP_LEFT,
93     TOP_RIGHT,
94     BOTTOM_LEFT,
95     BOTTOM_RIGHT
96 } corner_t;
97
98 typedef enum {
99     ACTION_MOVE,
100     ACTION_RESIZE,
101     ACTION_FOCUS,
102     ACTION_NONE
103 } pointer_action_t;
104
105 typedef struct {
106     xcb_window_t window;
107     unsigned int uid;
108     char class_name[MAXLEN];
109     split_mode_t born_as;
110     unsigned int border_width;
111     bool floating;
112     bool transient;  /* transient window are always floating */
113     bool fullscreen;
114     bool locked;     /* protects window from being closed */
115     bool urgent;
116     xcb_rectangle_t floating_rectangle;
117     xcb_rectangle_t tiled_rectangle;
118 } client_t;
119
120 typedef struct node_t node_t;
121 struct node_t {
122     split_type_t split_type;
123     double split_ratio;
124     xcb_rectangle_t rectangle;
125     bool vacant;          /* vacant nodes only hold floating clients */
126     node_t *first_child;
127     node_t *second_child;
128     node_t *parent;
129     client_t *client;     /* NULL except for leaves */
130 };
131
132 typedef struct desktop_t desktop_t;
133 struct desktop_t {
134     char name[MAXLEN];
135     layout_t layout;
136     node_t *root;
137     node_t *focus;
138     node_t *last_focus;
139     desktop_t *prev;
140     desktop_t *next;
141 };
142
143 typedef struct monitor_t monitor_t;
144 struct monitor_t {
145     char name[MAXLEN];
146     xcb_rectangle_t rectangle;
147     int top_padding;
148     int right_padding;
149     int bottom_padding;
150     int left_padding;
151     desktop_t *desk;
152     desktop_t *last_desk;
153     desktop_t *desk_head;
154     desktop_t *desk_tail;
155     monitor_t *prev;
156     monitor_t *next;
157 };
158
159 typedef struct {
160     char name[MAXLEN];
161 } rule_cause_t;
162
163 typedef struct {
164     bool floating;
165     monitor_t *monitor;
166     desktop_t *desktop;
167 } rule_effect_t;
168
169 typedef struct rule_t rule_t;
170 struct rule_t {
171     unsigned int uid;
172     rule_cause_t cause;
173     rule_effect_t effect;
174     rule_t *prev;
175     rule_t *next;
176 };
177
178 typedef struct {
179     node_t *node;
180     desktop_t *desktop;
181     monitor_t *monitor;
182 } window_location_t;
183
184 typedef struct {
185     desktop_t *desktop;
186     monitor_t *monitor;
187 } desktop_location_t;
188
189 typedef struct {
190     xcb_point_t position;
191     pointer_action_t action;
192     xcb_rectangle_t rectangle;
193     monitor_t *monitor;
194     desktop_t *desktop;
195     node_t *node;
196     corner_t corner;
197 } pointer_state_t;
198
199 node_t *make_node(void);
200 monitor_t *make_monitor(xcb_rectangle_t *);
201 monitor_t *find_monitor(char *);
202 void add_monitor(xcb_rectangle_t *);
203 void remove_monitor(monitor_t *);
204 desktop_t *make_desktop(const char *);
205 void add_desktop(monitor_t *, char *);
206 void empty_desktop(desktop_t *);
207 void remove_desktop(monitor_t *, desktop_t *);
208 client_t *make_client(xcb_window_t);
209 rule_t *make_rule(void);
210 pointer_state_t *make_pointer_state(void);
211
212 #endif