6 * This file defines all data structures used by i3
11 /* Forward definitions */
12 typedef struct Cell Cell;
13 typedef struct Font i3Font;
14 typedef struct Container Container;
15 typedef struct Client Client;
16 typedef struct Binding Binding;
19 typedef enum { D_LEFT, D_RIGHT, D_UP, D_DOWN } direction_t;
23 BIND_MOD_1 = XCB_MOD_MASK_1,
24 BIND_MOD_2 = XCB_MOD_MASK_2,
25 BIND_MOD_3 = XCB_MOD_MASK_3,
26 BIND_MOD_4 = XCB_MOD_MASK_4,
27 BIND_MOD_5 = XCB_MOD_MASK_5,
28 BIND_SHIFT = XCB_MOD_MASK_SHIFT,
29 BIND_CONTROL = XCB_MOD_MASK_CONTROL,
30 BIND_MODE_SWITCH = (1 << 8)
33 struct table_dimensions_t {
39 * Defines a position in the table
50 /* Bitmask consisting of BIND_MOD_1, BIND_MODE_SWITCH, … */
52 /* Command, like in command mode */
55 TAILQ_ENTRY(Binding) bindings;
59 * We need to save the height of a font because it is required for each drawing of
60 * text but relatively hard to get. As soon as a new font needs to be loaded, a
61 * Font-entry will be filled for later use.
65 /* The name of the font, that is what the pattern resolves to */
67 /* A copy of the pattern to build a cache */
69 /* The height of the font, built from font_ascent + font_descent */
71 /* The xcb-id for the font */
76 * A client is X11-speak for a window.
80 /* TODO: this is NOT final */
81 Cell old_position; /* if you set a client to floating and set it back to managed,
82 it does remember its old position and *tries* to get back there */
84 /* Backpointer. A client is inside a container */
91 xcb_window_t frame; /* Our window: The frame around the client */
92 xcb_gcontext_t titlegc; /* The titlebar’s graphic context inside the frame */
93 xcb_window_t child; /* The client’s window */
95 /* The following entry provides the necessary list pointers to use Client with LIST_* macros */
96 CIRCLEQ_ENTRY(Client) clients;
100 * A container is either in default or stacking mode. It sits inside the table.
104 /* Those are speaking for themselves: */
105 Client *currently_focused;
109 /* Position of the container inside our table */
112 /* Width/Height of the container. Changeable by the user */
116 /* Ensure MODE_DEFAULT maps to 0 because we use calloc for initialization later */
117 enum { MODE_DEFAULT = 0, MODE_STACK = 1 } mode;
118 CIRCLEQ_HEAD(client_head, Client) clients;