00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <xcb/randr.h>
00011 #include <xcb/xcb_atom.h>
00012 #include <stdbool.h>
00013
00014 #ifndef _DATA_H
00015 #define _DATA_H
00016 #include "queue.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 typedef struct Font i3Font;
00031 typedef struct Binding Binding;
00032 typedef struct Rect Rect;
00033 typedef struct xoutput Output;
00034 typedef struct Con Con;
00035 typedef struct Match Match;
00036 typedef struct Assignment Assignment;
00037 typedef struct Window i3Window;
00038
00039
00040
00041
00042
00043 typedef enum { D_LEFT, D_RIGHT, D_UP, D_DOWN } direction_t;
00044 typedef enum { NO_ORIENTATION = 0, HORIZ, VERT } orientation_t;
00045 typedef enum { BS_NORMAL = 0, BS_NONE = 1, BS_1PIXEL = 2 } border_style_t;
00046
00049 typedef enum { DONT_KILL_WINDOW = 0, KILL_WINDOW = 1, KILL_CLIENT = 2 } kill_window_t;
00050
00051 enum {
00052 BIND_NONE = 0,
00053 BIND_SHIFT = XCB_MOD_MASK_SHIFT,
00054 BIND_CONTROL = XCB_MOD_MASK_CONTROL,
00055 BIND_MOD1 = XCB_MOD_MASK_1,
00056 BIND_MOD2 = XCB_MOD_MASK_2,
00057 BIND_MOD3 = XCB_MOD_MASK_3,
00058 BIND_MOD4 = XCB_MOD_MASK_4,
00059 BIND_MOD5 = XCB_MOD_MASK_5,
00060 BIND_MODE_SWITCH = (1 << 8)
00061 };
00062
00075 struct Rect {
00076 uint32_t x;
00077 uint32_t y;
00078 uint32_t width;
00079 uint32_t height;
00080 } __attribute__((packed));
00081
00087 struct reservedpx {
00088 uint32_t left;
00089 uint32_t right;
00090 uint32_t top;
00091 uint32_t bottom;
00092 };
00093
00099 struct width_height {
00100 uint32_t w;
00101 uint32_t h;
00102 };
00103
00110 struct deco_render_params {
00111 struct Colortriple *color;
00112 int border_style;
00113 struct width_height con_rect;
00114 struct width_height con_window_rect;
00115 Rect con_deco_rect;
00116 uint32_t background;
00117 bool con_is_leaf;
00118 xcb_font_t font;
00119 };
00120
00125 struct Workspace_Assignment {
00126 char *name;
00127 char *output;
00128
00129 TAILQ_ENTRY(Workspace_Assignment) ws_assignments;
00130 };
00131
00132 struct Ignore_Event {
00133 int sequence;
00134 int response_type;
00135 time_t added;
00136
00137 SLIST_ENTRY(Ignore_Event) ignore_events;
00138 };
00139
00140
00141
00142
00143
00149 struct Binding {
00153 char *symbol;
00154
00160 xcb_keycode_t *translated_to;
00161
00162 uint32_t number_keycodes;
00163
00165 uint32_t keycode;
00166
00168 uint32_t mods;
00169
00171 char *command;
00172
00173 TAILQ_ENTRY(Binding) bindings;
00174 };
00175
00183 struct Autostart {
00185 char *command;
00186 TAILQ_ENTRY(Autostart) autostarts;
00187 TAILQ_ENTRY(Autostart) autostarts_always;
00188 };
00189
00196 struct Font {
00198 int height;
00200 xcb_font_t id;
00201 };
00202
00203
00211 struct xoutput {
00213 xcb_randr_output_t id;
00215 char *name;
00216
00218 Con *con;
00219
00222 bool active;
00223
00226 bool changed;
00227 bool to_be_disabled;
00228 bool primary;
00229
00231 Rect rect;
00232
00233 #if 0
00234
00235 xcb_window_t bar;
00236 xcb_gcontext_t bargc;
00237
00240 SLIST_HEAD(dock_clients_head, Client) dock_clients;
00241 #endif
00242
00243 TAILQ_ENTRY(xoutput) outputs;
00244 };
00245
00246 struct Window {
00247 xcb_window_t id;
00248
00251 xcb_window_t leader;
00252 xcb_window_t transient_for;
00253
00254 char *class_class;
00255 char *class_instance;
00256
00259 char *name_x;
00260
00262 bool name_x_changed;
00263
00266 char *name_json;
00267
00269 int name_len;
00270
00272 bool uses_net_wm_name;
00273
00275 bool needs_take_focus;
00276
00278 enum { W_NODOCK = 0, W_DOCK_TOP = 1, W_DOCK_BOTTOM = 2 } dock;
00279
00281 struct reservedpx reserved;
00282
00285 uint32_t nr_assignments;
00286 Assignment **ran_assignments;
00287 };
00288
00289 struct Match {
00290 char *title;
00291 int title_len;
00292 char *application;
00293 char *class;
00294 char *instance;
00295 char *mark;
00296 enum {
00297 M_DONTCHECK = -1,
00298 M_NODOCK = 0,
00299 M_DOCK_ANY = 1,
00300 M_DOCK_TOP = 2,
00301 M_DOCK_BOTTOM = 3
00302 } dock;
00303 xcb_window_t id;
00304 Con *con_id;
00305 enum { M_ANY = 0, M_TILING, M_FLOATING } floating;
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316 enum { M_HERE = 0, M_ASSIGN_WS, M_BELOW } insert_where;
00317
00318 TAILQ_ENTRY(Match) matches;
00319 };
00320
00329 struct Assignment {
00341 enum {
00342 A_ANY = 0,
00343 A_COMMAND = (1 << 0),
00344 A_TO_WORKSPACE = (1 << 1),
00345 A_TO_OUTPUT = (1 << 2)
00346 } type;
00347
00349 Match match;
00350
00352 union {
00353 char *command;
00354 char *workspace;
00355 char *output;
00356 } dest;
00357
00358 TAILQ_ENTRY(Assignment) assignments;
00359 };
00360
00361 struct Con {
00362 bool mapped;
00363 enum {
00364 CT_ROOT = 0,
00365 CT_OUTPUT = 1,
00366 CT_CON = 2,
00367 CT_FLOATING_CON = 3,
00368 CT_WORKSPACE = 4,
00369 CT_DOCKAREA = 5
00370 } type;
00371 orientation_t orientation;
00372 struct Con *parent;
00373
00374 struct Rect rect;
00375 struct Rect window_rect;
00376 struct Rect deco_rect;
00378 struct Rect geometry;
00379
00380 char *name;
00381
00384 int num;
00385
00386
00387
00388
00389 char *sticky_group;
00390
00391
00392 char *mark;
00393
00394 double percent;
00395
00396
00397
00398 int proportional_width;
00399 int proportional_height;
00400
00401
00402 int base_width;
00403 int base_height;
00404
00405
00406 int border_width;
00407
00408
00409 int width_increment;
00410 int height_increment;
00411
00412 struct Window *window;
00413
00414
00415
00416 bool urgent;
00417
00418
00419 xcb_window_t frame;
00420 xcb_pixmap_t pixmap;
00421 xcb_gcontext_t pm_gc;
00422 bool pixmap_recreated;
00423
00425 struct deco_render_params *deco_render_params;
00426
00427
00428 TAILQ_HEAD(floating_head, Con) floating_head;
00429
00430 TAILQ_HEAD(nodes_head, Con) nodes_head;
00431 TAILQ_HEAD(focus_head, Con) focus_head;
00432
00433 TAILQ_HEAD(swallow_head, Match) swallow_head;
00434
00435 enum { CF_NONE = 0, CF_OUTPUT = 1, CF_GLOBAL = 2 } fullscreen_mode;
00436 enum { L_DEFAULT = 0, L_STACKED = 1, L_TABBED = 2, L_DOCKAREA = 3, L_OUTPUT = 4 } layout;
00437 border_style_t border_style;
00444 enum {
00445 FLOATING_AUTO_OFF = 0,
00446 FLOATING_USER_OFF = 1,
00447 FLOATING_AUTO_ON = 2,
00448 FLOATING_USER_ON = 3
00449 } floating;
00450
00456 uint8_t ignore_unmap;
00457
00458 TAILQ_ENTRY(Con) nodes;
00459 TAILQ_ENTRY(Con) focused;
00460 TAILQ_ENTRY(Con) all_cons;
00461 TAILQ_ENTRY(Con) floating_windows;
00462
00464 void(*on_remove_child)(Con *);
00465 };
00466
00467 #endif