]> Dogcows Code - chaz/openbox/blob - src/XAtom.hh
caps
[chaz/openbox] / src / XAtom.hh
1 // XAtom.h for Openbox
2 // Copyright (c) 2002 - 2002 Ben Janens (ben at orodu.net)
3 //
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:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
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.
21
22 #ifndef __XAtom_h
23 #define __XAtom_h
24
25 #include <X11/Xlib.h>
26 #include <X11/Xatom.h>
27
28 #include <assert.h>
29
30 #include <vector>
31 #include <string>
32
33 class Blackbox;
34 class ScreenInfo;
35
36 class XAtom {
37 public:
38 enum Atoms {
39 // types
40 cardinal,
41 window,
42 pixmap,
43 atom,
44 string,
45 utf8_string,
46
47 #ifdef HAVE_GETPID
48 blackbox_pid,
49 #endif // HAVE_GETPID
50
51 // window hints
52 wm_colormap_windows,
53 wm_protocols,
54 wm_state,
55 wm_delete_window,
56 wm_take_focus,
57 wm_change_state,
58 wm_name,
59 wm_icon_name,
60 wm_class,
61 motif_wm_hints,
62 blackbox_attributes,
63 blackbox_change_attributes,
64 blackbox_hints,
65
66 // blackbox-protocol atoms (wm -> client)
67 blackbox_structure_messages,
68 blackbox_notify_startup,
69 blackbox_notify_window_add,
70 blackbox_notify_window_del,
71 blackbox_notify_window_focus,
72 blackbox_notify_current_workspace,
73 blackbox_notify_workspace_count,
74 blackbox_notify_window_raise,
75 blackbox_notify_window_lower,
76 // blackbox-protocol atoms (client -> wm)
77 blackbox_change_workspace,
78 blackbox_change_window_focus,
79 blackbox_cycle_window_focus,
80
81 // NETWM atoms
82 // root window properties
83 net_supported,
84 net_client_list,
85 net_client_list_stacking,
86 net_number_of_desktops,
87 net_desktop_geometry,
88 net_desktop_viewport,
89 net_current_desktop,
90 net_desktop_names,
91 net_active_window,
92 net_workarea,
93 net_supporting_wm_check,
94 // net_virtual_roots,
95 // root window messages
96 net_close_window,
97 net_wm_moveresize,
98 // application window properties
99 // net_properties,
100 net_wm_name,
101 net_wm_visible_name,
102 net_wm_icon_name,
103 net_wm_visible_icon_name,
104 net_wm_desktop,
105 net_wm_window_type,
106 net_wm_state,
107 net_wm_strut,
108 // net_wm_icon_geometry,
109 // net_wm_icon,
110 // net_wm_pid,
111 // net_wm_handled_icons,
112 net_wm_allowed_actions,
113 // application protocols
114 // net_wm_ping,
115
116 net_wm_window_type_desktop,
117 net_wm_window_type_dock,
118 net_wm_window_type_toolbar,
119 net_wm_window_type_menu,
120 net_wm_window_type_utility,
121 net_wm_window_type_splash,
122 net_wm_window_type_dialog,
123 net_wm_window_type_normal,
124
125 net_wm_moveresize_size_topleft,
126 net_wm_moveresize_size_topright,
127 net_wm_moveresize_size_bottomleft,
128 net_wm_moveresize_size_bottomright,
129 net_wm_moveresize_move,
130
131 net_wm_action_move,
132 net_wm_action_resize,
133 net_wm_action_shade,
134 net_wm_action_maximize_horz,
135 net_wm_action_maximize_vert,
136 net_wm_action_change_desktop,
137 net_wm_action_close,
138
139 net_wm_state_modal,
140 net_wm_state_maximized_vert,
141 net_wm_state_maximized_horz,
142 net_wm_state_shaded,
143 net_wm_state_skip_taskbar,
144 net_wm_state_skip_pager,
145 net_wm_state_hidden,
146 net_wm_state_fullscreen,
147
148 kde_net_system_tray_windows,
149 kde_net_wm_system_tray_window_for,
150
151 // constant for how many atoms exist in the enumerator
152 NUM_ATOMS
153 };
154
155 enum StringType {
156 ansi,
157 utf8,
158 NUM_STRING_TYPE
159 };
160
161 private:
162 typedef std::vector<Window> SupportWindows;
163
164 Display *_display;
165 // windows used to specify support for NETWM
166 SupportWindows _support_windows;
167 Atom _atoms[NUM_ATOMS];
168
169 Atom create(const char *name) const;
170
171 void setValue(Window win, Atom atom, Atom type, unsigned char *data,
172 int size, int nelements, bool append) const;
173 bool getValue(Window win, Atom atom, Atom type,
174 unsigned long &nelements, unsigned char **value,
175 int size) const;
176
177 // no copying!!
178 XAtom(const XAtom &);
179 XAtom& operator=(const XAtom&);
180
181 public:
182 typedef std::vector<std::string> StringVect;
183
184 XAtom(Display *d);
185 virtual ~XAtom();
186
187 // setup support on a screen, each screen should call this once in its
188 // constructor.
189 void setSupported(const ScreenInfo *screen);
190
191 void setValue(Window win, Atoms atom, Atoms type, unsigned long value) const;
192 void setValue(Window win, Atoms atom, Atoms type,
193 unsigned long value[], int elements) const;
194 void setValue(Window win, Atoms atom, StringType type,
195 const std::string &value) const;
196 void setValue(Window win, Atoms atom, StringType type,
197 const StringVect &strings) const;
198
199 // the 'value' is allocated inside the function and
200 // delete [] value needs to be called when you are done with it.
201 // the 'value' array returned is null terminated, and has 'nelements'
202 // elements in it plus the null.
203 // nelements must be set to the maximum number of elements to read from
204 // the property.
205 bool getValue(Window win, Atoms atom, Atoms type,
206 unsigned long &nelements, unsigned long **value) const;
207 bool getValue(Window win, Atoms atom, Atoms type, unsigned long &value) const;
208 bool getValue(Window win, Atoms atom, StringType type,
209 std::string &value) const;
210 bool getValue(Window win, Atoms atom, StringType type,
211 unsigned long &nelements, StringVect &strings) const;
212
213 void eraseValue(Window win, Atoms atom) const;
214
215 // sends a client message a window
216 void sendClientMessage(Window target, Atoms type, Window about,
217 long data = 0, long data1 = 0, long data2 = 0,
218 long data3 = 0) const;
219
220 // temporary function!! remove when not used in blackbox.hh anymore!!
221 inline Atom getAtom(Atoms a)
222 { assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a];
223 assert(ret != 0); return ret; }
224 };
225
226 #endif // __XAtom_h
This page took 0.046455 seconds and 4 git commands to generate.