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