]> git.sur5r.net Git - i3/i3/blob - include/layout.h
19a40c5d157de4af771a23959b5647cb2f391b87
[i3/i3] / include / layout.h
1 /*
2  * vim:ts=8:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  *
6  * (c) 2009 Michael Stapelberg and contributors
7  *
8  * See file LICENSE for license information.
9  *
10  */
11 #include <xcb/xcb.h>
12
13 #ifndef _LAYOUT_H
14 #define _LAYOUT_H
15
16 /**
17  * Gets the unoccupied space (= space which is available for windows which were resized by the user)
18  * This is necessary to render both, customly resized windows and never touched
19  * windows correctly, meaning that the aspect ratio will be maintained when opening new windows.
20  *
21  */
22 int get_unoccupied_x(Workspace *workspace);
23
24 /**
25  * (Re-)draws window decorations for a given Client onto the given drawable/graphic context.
26  * When in stacking mode, the window decorations are drawn onto an own window.
27  *
28  */
29 void decorate_window(xcb_connection_t *conn, Client *client, xcb_drawable_t drawable, xcb_gcontext_t gc, int offset);
30
31 /**
32  * Redecorates the given client correctly by checking if it’s in a stacking container and
33  * re-rendering the stack window or just calling decorate_window if it’s not in a stacking
34  * container.
35  *
36  */
37 void redecorate_window(xcb_connection_t *conn, Client *client);
38
39 /**
40  * Renders the given container. Is called by render_layout() or individually (for example
41  * when focus changes in a stacking container)
42  *
43  */
44 void render_container(xcb_connection_t *conn, Container *container);
45
46 /**
47  * Modifies the event mask of all clients on the given workspace to either ignore or to handle
48  * enter notifies. It is handy to ignore notifies because they will be sent when a window is mapped
49  * under the cursor, thus when the user didn’t enter the window actively at all.
50  *
51  */
52 void ignore_enter_notify_forall(xcb_connection_t *conn, Workspace *workspace, bool ignore_enter_notify);
53
54 /**
55  * Renders the given workspace on the given screen
56  *
57  */
58 void render_workspace(xcb_connection_t *conn, i3Screen *screen, Workspace *r_ws);
59
60 /**
61  * Renders the whole layout, that is: Go through each screen, each workspace, each container
62  * and render each client. This also renders the bars.
63  *
64  * If you don’t need to render *everything*, you should call render_container on the container
65  * you want to refresh.
66  *
67  */
68 void render_layout(xcb_connection_t *conn);
69
70 #endif