4 * i3 - an improved dynamic tiling window manager
6 * (c) 2009 Michael Stapelberg and contributors
8 * See file LICENSE for license information.
17 * This file defines all data structures used by i3
22 /* Forward definitions */
23 typedef struct Cell Cell;
24 typedef struct Font i3Font;
25 typedef struct Container Container;
26 typedef struct Client Client;
27 typedef struct Binding Binding;
28 typedef struct Workspace Workspace;
31 typedef enum { D_LEFT, D_RIGHT, D_UP, D_DOWN } direction_t;
35 BIND_MOD_1 = XCB_MOD_MASK_1,
36 BIND_MOD_2 = XCB_MOD_MASK_2,
37 BIND_MOD_3 = XCB_MOD_MASK_3,
38 BIND_MOD_4 = XCB_MOD_MASK_4,
39 BIND_MOD_5 = XCB_MOD_MASK_5,
40 BIND_SHIFT = XCB_MOD_MASK_SHIFT,
41 BIND_CONTROL = XCB_MOD_MASK_CONTROL,
42 BIND_MODE_SWITCH = (1 << 8)
53 /* table dimensions */
57 /* These are stored here just while this workspace is _not_ shown (see show_workspace()) */
61 Client *fullscreen_client;
63 /* This is a two-dimensional dynamic array of Container-pointers. I’ve always wanted
64 * to be a three-star programmer :) */
69 * Defines a position in the table
80 /* Bitmask consisting of BIND_MOD_1, BIND_MODE_SWITCH, … */
82 /* Command, like in command mode */
85 TAILQ_ENTRY(Binding) bindings;
89 * We need to save the height of a font because it is required for each drawing of
90 * text but relatively hard to get. As soon as a new font needs to be loaded, a
91 * Font-entry will be filled for later use.
95 /* The name of the font, that is what the pattern resolves to */
97 /* A copy of the pattern to build a cache */
99 /* The height of the font, built from font_ascent + font_descent */
101 /* The xcb-id for the font */
106 * A client is X11-speak for a window.
110 /* TODO: this is NOT final */
111 Cell old_position; /* if you set a client to floating and set it back to managed,
112 it does remember its old position and *tries* to get back there */
114 /* Backpointer. A client is inside a container */
115 Container *container;
118 uint32_t width, height;
124 /* fullscreen is pretty obvious */
127 /* After leaving fullscreen mode, a client needs to be reconfigured (configuration =
128 setting X, Y, width and height). By setting the force_reconfigure flag, render_layout()
129 will reconfigure the client. */
130 bool force_reconfigure;
133 xcb_window_t frame; /* Our window: The frame around the client */
134 xcb_gcontext_t titlegc; /* The titlebar’s graphic context inside the frame */
135 xcb_window_t child; /* The client’s window */
137 /* The following entry provides the necessary list pointers to use Client with LIST_* macros */
138 CIRCLEQ_ENTRY(Client) clients;
142 * A container is either in default or stacking mode. It sits inside the table.
146 /* Those are speaking for themselves: */
147 Client *currently_focused;
151 /* Position of the container inside our table */
154 /* Xinerama: X/Y of the container */
157 /* Width/Height of the container. Changeable by the user */
161 /* Backpointer to the workspace this container is in */
162 Workspace *workspace;
164 /* Ensure MODE_DEFAULT maps to 0 because we use calloc for initialization later */
165 enum { MODE_DEFAULT = 0, MODE_STACK = 1 } mode;
166 CIRCLEQ_HEAD(client_head, Client) clients;