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