twm.h - libwm - X windows manipulation library
(HTM) git clone git://z3bra.org/libwm
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
twm.h (6795B)
---
1 #ifndef __LIBWM_H__
2 #define __LIBWM_H__
3
4 /*
5 * Variables used to hold the connection to the X server, and the first screen
6 * of this connection. Both have to be defined as `extern`.
7 */
8 extern xcb_connection_t *conn;
9 extern xcb_screen_t *scrn;
10
11 /*
12 * Mask attributes used to select which windows have to be listed by the
13 * function `wm_is_listable(wid, mask)`.
14 */
15 enum {
16 LIST_HIDDEN = 1 << 0, /* windows that are not on-screen */
17 LIST_IGNORE = 1 << 1, /* windows with override_redirect set to 1 */
18 LIST_ALL = 1 << 2 /* All existing windows */
19 };
20
21 /*
22 * Actions used by the `wm_remap(wid, mode)` function to select what needs to be
23 * done.
24 */
25 enum {
26 MAP = 1 << 0,
27 UNMAP = 1 << 1,
28 TOGGLE = 1 << 2
29 };
30
31 /*
32 * Attributes used internally by different functions to refer to windows
33 * attributes, and select them.
34 */
35 enum {
36 ATTR_W = 1 << 0,
37 ATTR_H = 1 << 1,
38 ATTR_X = 1 << 2,
39 ATTR_Y = 1 << 3,
40 ATTR_B = 1 << 4,
41 ATTR_M = 1 << 5,
42 ATTR_I = 1 << 6,
43 ATTR_D = 1 << 7,
44 ATTR_MAX
45 };
46
47 /*
48 * Selector used by both `wm_move(wid, mode, x, y)` and `wm_resize(wid, mode, w, h)`
49 * to choose between relative or absolute coordinates
50 */
51 enum {
52 ABSOLUTE = 0,
53 RELATIVE = 1
54 };
55
56 /*
57 * Initialize the connection to the X server. The connection could then be
58 * accessed by other functions through the "conn" variable.
59 */
60 int wm_init_xcb();
61
62 /*
63 * Close connection to the X server.
64 */
65 int wm_kill_xcb();
66
67 /*
68 * Check existence of a window.
69 * + 1 - window exists
70 * + 0 - window doesn't exist
71 */
72 int wm_is_alive(xcb_window_t wid);
73
74 /*
75 * Returns the value of the "override_redirect" attribute of a window.
76 * When this attribute is set to 1, it means the window manager should NOT
77 * handle this window.
78 */
79 int wm_is_ignored(xcb_window_t wid);
80
81 /*
82 * Returns 1 if a window match the mask, 0 otherwise.
83 * Possible value for the masks are:
84 * LIST_HIDDEN
85 * LIST_IGNORE
86 * LIST_ALL
87 */
88 int wm_is_listable(xcb_window_t wid, int mask);
89
90 /*
91 * Returns 1 if the window is mapped on screen, 0 otherwise
92 */
93 int wm_is_mapped(xcb_window_t wid);
94
95 /*
96 * Request the X server to add a new atom, and return this new atom ID
97 */
98 xcb_atom_t wm_add_atom(char *name, size_t len);
99
100 /*
101 * Change the value of the specified atom
102 */
103 int wm_set_atom(xcb_window_t wid, xcb_atom_t atom, xcb_atom_t type, size_t len, void *data);
104
105 /*
106 * Retrieve the value of the given atom. The value length is set in the
107 * `len` pointer if specified
108 */
109 void *wm_get_atom(xcb_window_t wid, xcb_atom_t atom, xcb_atom_t type, size_t *len);
110
111 /*
112 * Retrieve the name of the given atom. The name length is set in the
113 * `len` pointer if specified
114 */
115 char *wm_get_atom_name(xcb_atom_t atom, size_t *len);
116
117 /*
118 * Get the first screen, and set the `scrn` global variable accordingly.
119 */
120 int wm_get_screen();
121
122 /*
123 * Ask the list of all existing windows to the X server, and fills the `*list`
124 * argument with them.
125 * The windows are listed in stacking order, from lower to upper window.
126 * Returns the number of windows in the *list array
127 */
128 int wm_get_windows(xcb_window_t wid, xcb_window_t **list);
129
130 /*
131 * Returns the window that has keyboard focus
132 * Will return the root window ID if no window has focus
133 */
134 xcb_window_t wm_get_focus(void);
135
136 /*
137 * Retrieve the value of an attribute for a specific windows.
138 * The possible values for the attributes are:
139 * ATTR_W - width
140 * ATTR_H - height
141 * ATTR_X - X offset
142 * ATTR_Y - Y offset
143 * ATTR_B - border width
144 * ATTR_M - map state
145 * ATTR_I - ignore state (override_redirect)
146 */
147 int wm_get_attribute(xcb_window_t wid, int attr);
148
149 /*
150 * Get the cursor position, and store its coordinates in the `x` and `y`
151 * pointers.
152 * The `mode` attribute isn't used yet, but is reserved to ask for either
153 * absolute or relative coordinates
154 */
155 int wm_get_cursor(int mode, uint32_t wid, int *x, int *y);
156
157 /*
158 * Set a window's border.
159 * The color should be an hexadecimal number, eg: 0xdeadca7
160 */
161 int wm_set_border(int width, int color, xcb_window_t wid);
162
163 /*
164 * Give the input focus to the specified window
165 */
166 int wm_set_focus(xcb_window_t wid);
167
168 /*
169 * Change the cursor position, either relatively or absolutely, eg:
170 * wm_set_cursor(10, 10, ABSOLUTE);
171 * wm_set_cursor(-10, 20, RELATIVE);
172 */
173 int wm_set_cursor(int x, int y, int mode);
174
175 /*
176 * Set override_redirect value for given window
177 */
178 int wm_set_override(xcb_window_t wid, int override);
179
180 /*
181 * Teleport a window to the given position.
182 */
183 int wm_teleport(xcb_window_t wid, int w, int h, int x, int y);
184
185 /*
186 * Move a window to the given position, either relatively or absolutely.
187 * If the wm_move is supposed to wm_move the window outside the screen, then the
188 * windows will only be wm_moved to the edge of the screen.
189 *
190 * You cannot wm_move windows outside the screen with this method. Use
191 * `wm_teleport()` instead.
192 */
193 int wm_move(xcb_window_t wid, int mode, int x, int y);
194
195 /*
196 * Resize a window to the given size, either relatively or absolutely.
197 * If the wm_resize is supposed to put an area of the window outside the screen,
198 * then the windows will only be wm_resized to the edge of the screen.
199 *
200 * You cannot wm_resize windows farther than the screen edge with this method. Use
201 * `wm_teleport()` instead.
202 */
203 int wm_resize(xcb_window_t wid, int mode, int w, int h);
204
205 /*
206 * Change the mapping state of a window. The `mode` attribute can be as follow:
207 * MAP
208 * UNMAP
209 * TOGGLE
210 */
211 int wm_remap(xcb_window_t wid, int mode);
212
213 /*
214 * Change the position of the given window in the stack order.
215 * You can either put it at the top, or at the bottom.
216 * The possible values for the mode are:
217 * XCB_STACK_MODE_ABOVE
218 * XCB_STACK_MODE_BELOW
219 * XCB_STACK_MODE_OPPOSITE
220 */
221 int wm_restack(xcb_window_t wid, uint32_t mode);
222
223 /*
224 * Register the given event(s) on the window.
225 * Multiple events can be registered by ORing them together
226 */
227 int wm_reg_window_event(xcb_window_t wid, uint32_t mask);
228
229 /*
230 * Register the given cursor event(s) on the window.
231 * Multiple events can be registered by ORing them together.
232 * The cursor will be changed to the `cursor` while the pointer is
233 * grabbed, if not NULL.
234 */
235 int wm_reg_cursor_event(xcb_window_t wid, uint32_t mask, char *cursor);
236
237 /*
238 * Return the number of active monitors connected to the display where
239 * window `wid` is sitting.
240 * The `list` argument, if not NULL, will be filled with the monitor's
241 * index numbers. Note that `list` must be big enough to hold all indexes,
242 * as it is not reallocated.
243 */
244 int wm_get_monitors(xcb_window_t wid, int *list);
245
246 /*
247 * Return the info scructure defining monitor with index number `index`.
248 */
249 xcb_randr_monitor_info_t *wm_get_monitor(int index);
250
251 /*
252 * Return the index of the (first) monitor associated with the
253 * coordinates.
254 */
255 int wm_find_monitor(int x, int y);
256
257 #endif /* __LIBWM_H__ */