1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2 // EWMH.hh for Blackbox - an X11 Window manager
3 // Copyright (c) 2001 - 2005 Sean 'Shaleh' Perry <shaleh@debian.org>
4 // Copyright (c) 1997 - 2000, 2002 - 2005
5 // Bradley T Hughes <bhughes at trolltech.com>
7 // Permission is hereby granted, free of charge, to any person obtaining a
8 // copy of this software and associated documentation files (the "Software"),
9 // to deal in the Software without restriction, including without limitation
10 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 // and/or sell copies of the Software, and to permit persons to whom the
12 // Software is furnished to do so, subject to the following conditions:
14 // The above copyright notice and this permission notice shall be included in
15 // all copies or substantial portions of the Software.
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 // DEALINGS IN THE SOFTWARE.
37 class EWMH
: public NoCopy
{
39 explicit EWMH(const Display
&_display
);
41 typedef std::vector
<Atom
> AtomList
;
42 typedef std::vector
<Window
> WindowList
;
45 unsigned int left
, right
, top
, bottom
;
47 : left(0), right(0), top(0), bottom(0)
52 unsigned int left
, right
, top
, bottom
;
53 unsigned int left_start
, left_end
;
54 unsigned int right_start
, right_end
;
55 unsigned int top_start
, top_end
;
56 unsigned int bottom_start
, bottom_end
;
57 inline StrutPartial(void)
58 : left(0u), right(0u), top(0u), bottom(0u),
59 left_start(0u), left_end(0u),
60 right_start(0u), right_end(0u),
61 top_start(0u), top_end(0u),
62 bottom_start(0u), bottom_end(0u)
66 inline Atom
utf8String(void) const
67 { return utf8_string
; }
69 // root window properties
70 inline Atom
supported(void) const
71 { return net_supported
; }
72 inline Atom
clientList(void) const
73 { return net_client_list
; }
74 inline Atom
clientListStacking(void) const
75 { return net_client_list_stacking
; }
76 inline Atom
numberOfDesktops(void) const
77 { return net_number_of_desktops
; }
78 inline Atom
desktopGeometry(void) const
79 { return net_desktop_geometry
; }
80 inline Atom
desktopViewport(void) const
81 { return net_desktop_viewport
; }
82 inline Atom
currentDesktop(void) const
83 { return net_current_desktop
; }
84 inline Atom
desktopNames(void) const
85 { return net_desktop_names
; }
86 inline Atom
activeWindow(void) const
87 { return net_active_window
; }
88 inline Atom
workarea(void) const
89 { return net_workarea
; }
90 inline Atom
supportingWMCheck(void) const
91 { return net_supporting_wm_check
; }
92 inline Atom
virtualRoots(void) const
93 { return net_virtual_roots
; }
94 inline Atom
desktopLayout(void) const
95 { return net_desktop_layout
; }
96 inline Atom
showingDesktop(void) const
97 { return net_showing_desktop
; }
99 void setSupported(Window target
, Atom atoms
[], unsigned int count
) const;
100 bool readSupported(Window target
, AtomList
& atoms
) const;
101 void setClientList(Window target
, WindowList
& windows
) const;
102 bool readClientList(Window target
, WindowList
& windows
) const;
103 void setClientListStacking(Window target
, WindowList
& windows
) const;
104 bool readClientListStacking(Window target
, WindowList
& windows
) const;
105 void setNumberOfDesktops(Window target
, unsigned int count
) const;
106 bool readNumberOfDesktops(Window target
, unsigned int* number
) const;
107 void setDesktopGeometry(Window target
,
108 unsigned int width
, unsigned int height
) const;
109 bool readDesktopGeometry(Window target
,
110 unsigned int* width
, unsigned int* height
) const;
111 void setDesktopViewport(Window target
, int x
, int y
) const;
112 bool readDesktopViewport(Window target
, int *x
, int *y
) const;
113 void setCurrentDesktop(Window target
, unsigned int number
) const;
114 bool readCurrentDesktop(Window target
, unsigned int* number
) const;
115 void setDesktopNames(Window target
,
116 const std::vector
<bt::ustring
> &names
) const;
117 bool readDesktopNames(Window target
,
118 std::vector
<bt::ustring
> &names
) const;
119 void setActiveWindow(Window target
, Window data
) const;
120 void setWorkarea(Window target
, unsigned long workareas
[],
121 unsigned int count
) const;
122 void setSupportingWMCheck(Window target
, Window data
) const;
123 bool readSupportingWMCheck(Window target
, Window
* window
) const;
124 void setVirtualRoots(Window target
, WindowList
&windows
) const;
125 bool readVirtualRoots(Window target
, WindowList
&windows
) const;
126 // void setDesktopLayout(Window target, ...) const;
127 // void readDesktopLayout(Window target, ...) const;
129 // other root messages
130 inline Atom
closeWindow(void) const
131 { return net_close_window
; }
132 inline Atom
moveresizeWindow(void) const
133 { return net_moveresize_window
; }
134 inline Atom
wmMoveResize(void) const
135 { return net_wm_moveresize
; }
136 inline Atom
restackWindow(void) const
137 { return net_restack_window
; }
138 inline Atom
requestFrameExtents(void) const
139 { return net_request_frame_extents
; }
141 // application properties
142 inline Atom
wmName(void) const
143 { return net_wm_name
; }
144 inline Atom
wmVisibleName(void) const
145 { return net_wm_visible_name
; }
146 inline Atom
wmIconName(void) const
147 { return net_wm_icon_name
; }
148 inline Atom
wmVisibleIconName(void) const
149 { return net_wm_visible_icon_name
; }
150 inline Atom
wmDesktop(void) const
151 { return net_wm_desktop
; }
152 inline Atom
wmWindowType(void) const
153 { return net_wm_window_type
; }
154 inline Atom
wmWindowTypeDesktop(void) const
155 { return net_wm_window_type_desktop
; }
156 inline Atom
wmWindowTypeDock(void) const
157 { return net_wm_window_type_dock
; }
158 inline Atom
wmWindowTypeToolbar(void) const
159 { return net_wm_window_type_toolbar
; }
160 inline Atom
wmWindowTypeMenu(void) const
161 { return net_wm_window_type_menu
; }
162 inline Atom
wmWindowTypeUtility(void) const
163 { return net_wm_window_type_utility
; }
164 inline Atom
wmWindowTypeSplash(void) const
165 { return net_wm_window_type_splash
; }
166 inline Atom
wmWindowTypeDialog(void) const
167 { return net_wm_window_type_dialog
; }
168 inline Atom
wmWindowTypeNormal(void) const
169 { return net_wm_window_type_normal
; }
170 inline Atom
wmState(void) const
171 { return net_wm_state
; }
172 inline Atom
wmStateModal(void) const
173 { return net_wm_state_modal
; }
174 inline Atom
wmStateSticky(void) const
175 { return net_wm_state_sticky
; }
176 inline Atom
wmStateMaximizedVert(void) const
177 { return net_wm_state_maximized_vert
; }
178 inline Atom
wmStateMaximizedHorz(void) const
179 { return net_wm_state_maximized_horz
; }
180 inline Atom
wmStateShaded(void) const
181 { return net_wm_state_shaded
; }
182 inline Atom
wmStateSkipTaskbar(void) const
183 { return net_wm_state_skip_taskbar
; }
184 inline Atom
wmStateSkipPager(void) const
185 { return net_wm_state_skip_pager
; }
186 inline Atom
wmStateHidden(void) const
187 { return net_wm_state_hidden
; }
188 inline Atom
wmStateFullscreen(void) const
189 { return net_wm_state_fullscreen
; }
190 inline Atom
wmStateAbove(void) const
191 { return net_wm_state_above
; }
192 inline Atom
wmStateBelow(void) const
193 { return net_wm_state_below
; }
194 inline Atom
wmStateDemandsAttention(void) const
195 { return net_wm_state_demands_attention
; }
196 inline Atom
wmStateRemove(void) const
198 inline Atom
wmStateAdd(void) const
200 inline Atom
wmStateToggle(void) const
202 inline Atom
wmAllowedActions(void) const
203 { return net_wm_allowed_actions
; }
204 inline Atom
wmActionMove(void) const
205 { return net_wm_action_move
; }
206 inline Atom
wmActionResize(void) const
207 { return net_wm_action_resize
; }
208 inline Atom
wmActionMinimize(void) const
209 { return net_wm_action_minimize
; }
210 inline Atom
wmActionShade(void) const
211 { return net_wm_action_shade
; }
212 inline Atom
wmActionStick(void) const
213 { return net_wm_action_stick
; }
214 inline Atom
wmActionMaximizeHorz(void) const
215 { return net_wm_action_maximize_horz
; }
216 inline Atom
wmActionMaximizeVert(void) const
217 { return net_wm_action_maximize_vert
; }
218 inline Atom
wmActionFullscreen(void) const
219 { return net_wm_action_fullscreen
; }
220 inline Atom
wmActionChangeDesktop(void) const
221 { return net_wm_action_change_desktop
; }
222 inline Atom
wmActionClose(void) const
223 { return net_wm_action_close
; }
224 inline Atom
wmStrut(void) const
225 { return net_wm_strut
; }
226 inline Atom
wmStrutPartial(void) const
227 { return net_wm_strut_partial
; }
228 inline Atom
wmIconGeometry(void) const
229 { return net_wm_icon_geometry
; }
230 inline Atom
wmIcon(void) const
231 { return net_wm_icon
; }
232 inline Atom
wmPid(void) const
233 { return net_wm_pid
; }
234 inline Atom
wmHandledIcons(void) const
235 { return net_wm_handled_icons
; }
236 inline Atom
wmUserTime(void) const
237 { return net_wm_user_time
; }
239 void setWMName(Window target
, const bt::ustring
&name
) const;
240 bool readWMName(Window target
, bt::ustring
&name
) const;
241 void setWMVisibleName(Window target
, const bt::ustring
&name
) const;
242 bool readWMIconName(Window target
, bt::ustring
&name
) const;
243 void setWMVisibleIconName(Window target
, const bt::ustring
&name
) const;
244 void setWMDesktop(Window target
, unsigned int desktop
) const;
245 bool readWMDesktop(Window target
, unsigned int& desktop
) const;
246 bool readWMWindowType(Window target
, AtomList
& types
) const;
247 void setWMState(Window target
, AtomList
& atoms
) const;
248 bool readWMState(Window target
, AtomList
& states
) const;
249 void setWMAllowedActions(Window target
, AtomList
& atoms
) const;
250 bool readWMStrut(Window target
, Strut
* strut
) const;
251 bool readWMStrutPartial(Window target
, StrutPartial
* strut
) const;
252 bool readWMIconGeometry(Window target
, int &x
, int &y
,
253 unsigned int &width
, unsigned int &height
) const;
254 // bool readWMIcon(Window target, ...) const;
255 bool readWMPid(Window target
, unsigned int &pid
) const;
256 // bool readWMHandledIcons(Window target, ...) const;
257 bool readWMUserTime(Window target
, Time
&user_time
) const;
258 // void readFrameExtents(Window target, ...) const;
260 // Window Manager Protocols
261 inline Atom
wmPing(void) const
262 { return net_wm_ping
; }
263 inline Atom
wmSyncRequest(void) const
264 { return net_wm_sync_request
; }
267 void removeProperty(Window target
, Atom atom
) const;
268 bool isSupportedWMWindowType(Atom atom
) const;
270 void setProperty(Window target
, Atom type
, Atom property
,
271 const unsigned char *data
, unsigned long count
) const;
273 bool getProperty(Window target
, Atom type
, Atom property
,
274 unsigned char** data
) const;
275 bool getListProperty(Window target
, Atom type
, Atom property
,
276 unsigned char** data
, unsigned long* count
) const;
279 const Display
&display
;
283 net_client_list_stacking
,
284 net_number_of_desktops
,
285 net_desktop_geometry
,
286 net_desktop_viewport
,
291 net_supporting_wm_check
,
296 net_moveresize_window
,
299 net_request_frame_extents
,
303 net_wm_visible_icon_name
,
306 net_wm_window_type_desktop
,
307 net_wm_window_type_dock
,
308 net_wm_window_type_toolbar
,
309 net_wm_window_type_menu
,
310 net_wm_window_type_utility
,
311 net_wm_window_type_splash
,
312 net_wm_window_type_dialog
,
313 net_wm_window_type_normal
,
317 net_wm_state_maximized_vert
,
318 net_wm_state_maximized_horz
,
320 net_wm_state_skip_taskbar
,
321 net_wm_state_skip_pager
,
323 net_wm_state_fullscreen
,
326 net_wm_state_demands_attention
,
330 net_wm_allowed_actions
,
332 net_wm_action_resize
,
333 net_wm_action_minimize
,
336 net_wm_action_maximize_horz
,
337 net_wm_action_maximize_vert
,
338 net_wm_action_fullscreen
,
339 net_wm_action_change_desktop
,
342 net_wm_strut_partial
,
343 net_wm_icon_geometry
,
346 net_wm_handled_icons
,