]> git.sur5r.net Git - i3/i3/blob - include/x.h
Merge branch 'master' into next
[i3/i3] / include / x.h
1 /*
2  * vim:ts=4:sw=4:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
6  *
7  * x.c: Interface to X11, transfers our in-memory state to X11 (see also
8  *      render.c). Basically a big state machine.
9  *
10  */
11 #ifndef I3_X_H
12 #define I3_X_H
13
14 /** Stores the X11 window ID of the currently focused window */
15 extern xcb_window_t focused_id;
16
17 /**
18  * Initializes the X11 part for the given container. Called exactly once for
19  * every container from con_new().
20  *
21  */
22 void x_con_init(Con *con, uint16_t depth);
23
24 /**
25  * Moves a child window from Container src to Container dest.
26  *
27  */
28 void x_move_win(Con *src, Con *dest);
29
30 /**
31  * Reparents the child window of the given container (necessary for sticky
32  * containers). The reparenting happens in the next call of x_push_changes().
33  *
34  */
35 void x_reparent_child(Con *con, Con *old);
36
37 /**
38  * Re-initializes the associated X window state for this container. You have
39  * to call this when you assign a client to an empty container to ensure that
40  * its state gets updated correctly.
41  *
42  */
43 void x_reinit(Con *con);
44
45 /**
46  * Kills the window decoration associated with the given container.
47  *
48  */
49 void x_con_kill(Con *con);
50
51 /**
52  * Returns true if the client supports the given protocol atom (like WM_DELETE_WINDOW)
53  *
54  */
55 bool window_supports_protocol(xcb_window_t window, xcb_atom_t atom);
56
57 /**
58  * Kills the given X11 window using WM_DELETE_WINDOW (if supported).
59  *
60  */
61 void x_window_kill(xcb_window_t window, kill_window_t kill_window);
62
63 /**
64  * Draws the decoration of the given container onto its parent.
65  *
66  */
67 void x_draw_decoration(Con *con);
68
69 /**
70  * Recursively calls x_draw_decoration. This cannot be done in x_push_node
71  * because x_push_node uses focus order to recurse (see the comment above)
72  * while drawing the decoration needs to happen in the actual order.
73  *
74  */
75 void x_deco_recurse(Con *con);
76
77 /**
78  * This function pushes the properties of each node of the layout tree to
79  * X11 if they have changed (like the map state, position of the window, …).
80  * It recursively traverses all children of the given node.
81  *
82  */
83 void x_push_node(Con *con);
84
85 /**
86  * Pushes all changes (state of each node, see x_push_node() and the window
87  * stack) to X11.
88  *
89  */
90 void x_push_changes(Con *con);
91
92 /**
93  * Raises the specified container in the internal stack of X windows. The
94  * next call to x_push_changes() will make the change visible in X11.
95  *
96  * If above_all is true, the X11 window will be raised to the top
97  * of the stack. This should only be used for precisely one fullscreen
98  * window per output.
99  *
100  */
101 void x_raise_con(Con *con, bool above_all);
102
103 /**
104  * Sets the WM_NAME property (so, no UTF8, but used only for debugging anyways)
105  * of the given name. Used for properly tagging the windows for easily spotting
106  * i3 windows in xwininfo -root -all.
107  *
108  */
109 void x_set_name(Con *con, const char *name);
110
111 /**
112  * Set up the SHMLOG_PATH atom.
113  *
114  */
115 void update_shmlog_atom(void);
116
117 /**
118  * Sets up i3 specific atoms (I3_SOCKET_PATH and I3_CONFIG_PATH)
119  *
120  */
121 void x_set_i3_atoms(void);
122
123 /**
124  * Set warp_to coordinates.  This will trigger on the next call to
125  * x_push_changes().
126  *
127  */
128 void x_set_warp_to(Rect *rect);
129
130 /**
131  * Applies the given mask to the event mask of every i3 window decoration X11
132  * window. This is useful to disable EnterNotify while resizing so that focus
133  * is untouched.
134  *
135  */
136 void x_mask_event_mask(uint32_t mask);
137
138 #endif