2 // Copyright (c) 2002 - 2002 Ben Janens (ben at orodu.net)
4 // Permission is hereby granted, free of charge, to any person obtaining a
5 // copy of this software and associated documentation files (the "Software"),
6 // to deal in the Software without restriction, including without limitation
7 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 // and/or sell copies of the Software, and to permit persons to whom the
9 // Software is furnished to do so, subject to the following conditions:
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 // DEALINGS IN THE SOFTWARE.
26 #include <X11/Xatom.h>
62 blackbox_change_attributes,
65 // blackbox-protocol atoms (wm -> client)
66 blackbox_structure_messages,
67 blackbox_notify_startup,
68 blackbox_notify_window_add,
69 blackbox_notify_window_del,
70 blackbox_notify_window_focus,
71 blackbox_notify_current_workspace,
72 blackbox_notify_workspace_count,
73 blackbox_notify_window_raise,
74 blackbox_notify_window_lower,
75 // blackbox-protocol atoms (client -> wm)
76 blackbox_change_workspace,
77 blackbox_change_window_focus,
78 blackbox_cycle_window_focus,
81 // root window properties
84 net_client_list_stacking,
85 net_number_of_desktops,
92 net_supporting_wm_check,
94 // root window messages
97 // application window properties
102 net_wm_visible_icon_name,
107 // net_wm_icon_geometry,
110 // net_wm_handled_icons,
111 net_wm_allowed_actions,
112 // application protocols
115 net_wm_window_type_desktop,
116 net_wm_window_type_dock,
117 net_wm_window_type_toolbar,
118 net_wm_window_type_menu,
119 net_wm_window_type_utility,
120 net_wm_window_type_splash,
121 net_wm_window_type_dialog,
122 net_wm_window_type_normal,
124 net_wm_moveresize_size_topleft,
125 net_wm_moveresize_size_topright,
126 net_wm_moveresize_size_bottomleft,
127 net_wm_moveresize_size_bottomright,
128 net_wm_moveresize_move,
131 net_wm_action_resize,
133 net_wm_action_maximize_horz,
134 net_wm_action_maximize_vert,
135 net_wm_action_change_desktop,
139 net_wm_state_maximized_vert,
140 net_wm_state_maximized_horz,
142 net_wm_state_skip_taskbar,
143 net_wm_state_skip_pager,
145 net_wm_state_fullscreen,
147 kde_net_system_tray_windows,
148 kde_net_wm_system_tray_window_for,
150 // constant for how many atoms exist in the enumerator
161 typedef std::vector<Window> SupportWindows;
164 // windows used to specify support for NETWM
165 SupportWindows _support_windows;
166 Atom _atoms[NUM_ATOMS];
168 Atom create(const char *name) const;
170 void setValue(Window win, Atom atom, Atom type, unsigned char *data,
171 int size, int nelements, bool append) const;
172 bool getValue(Window win, Atom atom, Atom type,
173 unsigned long &nelements, unsigned char **value,
177 XAtom(const XAtom &);
178 XAtom& operator=(const XAtom&);
181 typedef std::vector<std::string> StringVect;
186 // setup support on a screen, each screen should call this once in its
188 void setSupported(const ScreenInfo *screen);
190 void setValue(Window win, Atoms atom, Atoms type, unsigned long value) const;
191 void setValue(Window win, Atoms atom, Atoms type,
192 unsigned long value[], int elements) const;
193 void setValue(Window win, Atoms atom, StringType type,
194 const std::string &value) const;
195 void setValue(Window win, Atoms atom, StringType type,
196 const StringVect &strings) const;
198 // the 'value' is allocated inside the function and
199 // delete [] value needs to be called when you are done with it.
200 // the 'value' array returned is null terminated, and has 'nelements'
201 // elements in it plus the null.
202 // nelements must be set to the maximum number of elements to read from
204 bool getValue(Window win, Atoms atom, Atoms type,
205 unsigned long &nelements, unsigned long **value) const;
206 bool getValue(Window win, Atoms atom, Atoms type, unsigned long &value) const;
207 bool getValue(Window win, Atoms atom, StringType type,
208 std::string &value) const;
209 bool getValue(Window win, Atoms atom, StringType type,
210 int &nelements, StringVect &strings) const;
212 void eraseValue(Window win, Atoms atom) const;
214 // temporary function!! remove when not used in blackbox.hh anymore!!
215 inline Atom getAtom(Atoms a)
216 { assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a];
217 assert(ret != 0); return ret; }