]> git.sur5r.net Git - i3/i3/blob - include/layout.h
a96aabc38432a8ff9f8d9daf46c84541d3ce7d99
[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
18  * were resized by the user) This is necessary to render both, customly
19  * resized windows and never touched windows correctly, meaning that the
20  * aspect ratio will be maintained when opening new windows.
21  *
22  */
23 int get_unoccupied_x(Workspace *workspace);
24
25 /** See get_unoccupied_x */
26 int get_unoccupied_y(Workspace *workspace);
27
28 /**
29  * (Re-)draws window decorations for a given Client onto the given
30  * drawable/graphic context.  When in stacking mode, the window decorations
31  * are drawn onto an own window.
32  *
33  */
34 void decorate_window(xcb_connection_t *conn, Client *client,
35                      xcb_drawable_t drawable, xcb_gcontext_t gc,
36                      int offset_x, int offset_y);
37
38 /**
39  * Redecorates the given client correctly by checking if it’s in a stacking
40  * container and re-rendering the stack window or just calling decorate_window
41  * if it’s not in a stacking container.
42  *
43  */
44 void redecorate_window(xcb_connection_t *conn, Client *client);
45
46 /**
47  * Pushes the client’s x and y coordinates to X11
48  *
49  */
50 void reposition_client(xcb_connection_t *conn, Client *client);
51
52 /**
53  * Pushes the client’s width/height to X11 and resizes the child window. This
54  * function also updates the client’s position, so if you work on tiling clients
55  * only, you can use this function instead of separate calls to reposition_client
56  * and resize_client to reduce flickering.
57  *
58  */
59 void resize_client(xcb_connection_t *conn, Client *client);
60
61 /**
62  * Renders the given container. Is called by render_layout() or individually
63  * (for example when focus changes in a stacking container)
64  *
65  */
66 void render_container(xcb_connection_t *conn, Container *container);
67
68 /**
69  * Modifies the event mask of all clients on the given workspace to either
70  * ignore or to handle enter notifies. It is handy to ignore notifies because
71  * they will be sent when a window is mapped under the cursor, thus when the
72  * user didn’t enter the window actively at all.
73  *
74  */
75 void ignore_enter_notify_forall(xcb_connection_t *conn, Workspace *workspace,
76                                 bool ignore_enter_notify);
77
78 /**
79  * Renders the given workspace on the given screen
80  *
81  */
82 void render_workspace(xcb_connection_t *conn, i3Screen *screen, Workspace *r_ws);
83
84 /**
85  * Renders the whole layout, that is: Go through each screen, each workspace,
86  * each container and render each client. This also renders the bars.
87  *
88  * If you don’t need to render *everything*, you should call render_container
89  * on the container you want to refresh.
90  *
91  */
92 void render_layout(xcb_connection_t *conn);
93
94 #endif