]> git.sur5r.net Git - i3/i3/blob - include/ewmh.h
Merge branch 'release-4.16.1'
[i3/i3] / include / ewmh.h
1 /*
2  * vim:ts=4:sw=4:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
6  *
7  * ewmh.c: Get/set certain EWMH properties easily.
8  *
9  */
10 #pragma once
11
12 #include <config.h>
13
14 /**
15  * Updates _NET_CURRENT_DESKTOP with the current desktop number.
16  *
17  * EWMH: The index of the current desktop. This is always an integer between 0
18  * and _NET_NUMBER_OF_DESKTOPS - 1.
19  *
20  */
21 void ewmh_update_current_desktop(void);
22
23 /**
24  * Updates _NET_NUMBER_OF_DESKTOPS which we interpret as the number of
25  * noninternal workspaces.
26  */
27 void ewmh_update_number_of_desktops(void);
28
29 /**
30  * Updates _NET_DESKTOP_NAMES: "The names of all virtual desktops. This is a
31  * list of NULL-terminated strings in UTF-8 encoding"
32  */
33 void ewmh_update_desktop_names(void);
34
35 /**
36  * Updates _NET_DESKTOP_VIEWPORT, which is an array of pairs of cardinals that
37  * define the top left corner of each desktop's viewport.
38  */
39 void ewmh_update_desktop_viewport(void);
40
41 /**
42  * Updates _NET_WM_DESKTOP for all windows.
43  * A request will only be made if the cached value differs from the calculated value.
44  *
45  */
46 void ewmh_update_wm_desktop(void);
47
48 /**
49  * Updates _NET_ACTIVE_WINDOW with the currently focused window.
50  *
51  * EWMH: The window ID of the currently active window or None if no window has
52  * the focus.
53  *
54  */
55 void ewmh_update_active_window(xcb_window_t window);
56
57 /**
58  * Updates _NET_WM_VISIBLE_NAME.
59  *
60  */
61 void ewmh_update_visible_name(xcb_window_t window, const char *name);
62
63 /**
64  * Updates the _NET_CLIENT_LIST hint. Used for window listers.
65  */
66 void ewmh_update_client_list(xcb_window_t *list, int num_windows);
67
68 /**
69  * Updates the _NET_CLIENT_LIST_STACKING hint. Necessary to move tabs in
70  * Chromium correctly.
71  *
72  * EWMH: These arrays contain all X Windows managed by the Window Manager.
73  * _NET_CLIENT_LIST has initial mapping order, starting with the oldest window.
74  * _NET_CLIENT_LIST_STACKING has bottom-to-top stacking order. These properties
75  * SHOULD be set and updated by the Window Manager.
76  *
77  */
78 void ewmh_update_client_list_stacking(xcb_window_t *stack, int num_windows);
79
80 /**
81  * Set or remove _NET_WM_STATE_STICKY on the window.
82  *
83  */
84 void ewmh_update_sticky(xcb_window_t window, bool sticky);
85
86 /**
87  * Set or remove _NEW_WM_STATE_FOCUSED on the window.
88  *
89  */
90 void ewmh_update_focused(xcb_window_t window, bool is_focused);
91
92 /**
93  * Set up the EWMH hints on the root window.
94  *
95  */
96 void ewmh_setup_hints(void);
97
98 /**
99  * i3 currently does not support _NET_WORKAREA, because it does not correspond
100  * to i3’s concept of workspaces. See also:
101  * https://bugs.i3wm.org/539
102  * https://bugs.i3wm.org/301
103  * https://bugs.i3wm.org/1038
104  *
105  * We need to actively delete this property because some display managers (e.g.
106  * LightDM) set it.
107  *
108  * EWMH: Contains a geometry for each desktop. These geometries specify an area
109  * that is completely contained within the viewport. Work area SHOULD be used by
110  * desktop applications to place desktop icons appropriately.
111  *
112  */
113 void ewmh_update_workarea(void);
114
115 /**
116  * Returns the workspace container as enumerated by the EWMH desktop model.
117  * Returns NULL if no workspace could be found for the index.
118  *
119  * This is the reverse of ewmh_get_workspace_index.
120  *
121  */
122 Con *ewmh_get_workspace_by_index(uint32_t idx);
123
124 /**
125  * Returns the EWMH desktop index for the workspace the given container is on.
126  * Returns NET_WM_DESKTOP_NONE if the desktop index cannot be determined.
127  *
128  * This is the reverse of ewmh_get_workspace_by_index.
129  *
130  */
131 uint32_t ewmh_get_workspace_index(Con *con);