]> Dogcows Code - chaz/openbox/blob - obt/prop.h
Allow client destroy notify functions to be removed based on the data associated...
[chaz/openbox] / obt / prop.h
1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
2
3 obt/prop.h for the Openbox window manager
4 Copyright (c) 2006 Mikael Magnusson
5 Copyright (c) 2003-2007 Dana Jansens
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 See the COPYING file for a copy of the GNU General Public License.
18 */
19
20 #ifndef __obt_prop_h
21 #define __obt_prop_h
22
23 #include <X11/Xlib.h>
24 #include <glib.h>
25
26 G_BEGIN_DECLS
27
28 typedef enum {
29 /* types */
30 OBT_PROP_CARDINAL, /*!< The atom which represents the Cardinal data type */
31 OBT_PROP_WINDOW, /*!< The atom which represents window ids */
32 OBT_PROP_PIXMAP, /*!< The atom which represents pixmap ids */
33 OBT_PROP_ATOM, /*!< The atom which represents atom values */
34 OBT_PROP_STRING, /*!< The atom which represents latin1 strings */
35 OBT_PROP_COMPOUND_TEXT, /*!< The atom which represents locale-encoded
36 strings */
37 OBT_PROP_UTF8_STRING, /*!< The atom which represents utf8-encoded strings*/
38
39 /* selection stuff */
40 OBT_PROP_MANAGER,
41
42 /* window hints */
43 OBT_PROP_WM_COLORMAP_WINDOWS,
44 OBT_PROP_WM_PROTOCOLS,
45 OBT_PROP_WM_STATE,
46 OBT_PROP_WM_DELETE_WINDOW,
47 OBT_PROP_WM_TAKE_FOCUS,
48 OBT_PROP_WM_CHANGE_STATE,
49 OBT_PROP_WM_NAME,
50 OBT_PROP_WM_ICON_NAME,
51 OBT_PROP_WM_CLASS,
52 OBT_PROP_WM_WINDOW_ROLE,
53 OBT_PROP_WM_CLIENT_MACHINE,
54 OBT_PROP_WM_COMMAND,
55 OBT_PROP_WM_CLIENT_LEADER,
56 OBT_PROP_WM_TRANSIENT_FOR,
57 OBT_PROP_MOTIF_WM_HINTS,
58 OBT_PROP_MOTIF_WM_INFO,
59
60 /* SM atoms */
61 OBT_PROP_SM_CLIENT_ID,
62
63 /* NETWM atoms */
64
65 /* Atoms that are used inside messages - these don't go in net_supported */
66
67 OBT_PROP_NET_WM_MOVERESIZE_SIZE_TOPLEFT,
68 OBT_PROP_NET_WM_MOVERESIZE_SIZE_TOP,
69 OBT_PROP_NET_WM_MOVERESIZE_SIZE_TOPRIGHT,
70 OBT_PROP_NET_WM_MOVERESIZE_SIZE_RIGHT,
71 OBT_PROP_NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT,
72 OBT_PROP_NET_WM_MOVERESIZE_SIZE_BOTTOM,
73 OBT_PROP_NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT,
74 OBT_PROP_NET_WM_MOVERESIZE_SIZE_LEFT,
75 OBT_PROP_NET_WM_MOVERESIZE_MOVE,
76 OBT_PROP_NET_WM_MOVERESIZE_SIZE_KEYBOARD,
77 OBT_PROP_NET_WM_MOVERESIZE_MOVE_KEYBOARD,
78 OBT_PROP_NET_WM_MOVERESIZE_CANCEL,
79
80 OBT_PROP_NET_WM_STATE_ADD,
81 OBT_PROP_NET_WM_STATE_REMOVE,
82 OBT_PROP_NET_WM_STATE_TOGGLE,
83
84 OBT_PROP_NET_WM_ORIENTATION_HORZ,
85 OBT_PROP_NET_WM_ORIENTATION_VERT,
86 OBT_PROP_NET_WM_TOPLEFT,
87 OBT_PROP_NET_WM_TOPRIGHT,
88 OBT_PROP_NET_WM_BOTTOMRIGHT,
89 OBT_PROP_NET_WM_BOTTOMLEFT,
90
91 OBT_PROP_NET_WM_WINDOW_TYPE_POPUP_MENU,
92
93 OBT_PROP_PRIVATE_PADDING1,
94 OBT_PROP_PRIVATE_PADDING2,
95 OBT_PROP_PRIVATE_PADDING3,
96 OBT_PROP_PRIVATE_PADDING4,
97 OBT_PROP_PRIVATE_PADDING5,
98 OBT_PROP_PRIVATE_PADDING6,
99 OBT_PROP_PRIVATE_PADDING7,
100 OBT_PROP_PRIVATE_PADDING8,
101 OBT_PROP_PRIVATE_PADDING9,
102 OBT_PROP_PRIVATE_PADDING10,
103 OBT_PROP_PRIVATE_PADDING11,
104 OBT_PROP_PRIVATE_PADDING12,
105
106 /* Everything below here must go in net_supported on the root window */
107
108 /* root window properties */
109 OBT_PROP_NET_SUPPORTED,
110 OBT_PROP_NET_CLIENT_LIST,
111 OBT_PROP_NET_CLIENT_LIST_STACKING,
112 OBT_PROP_NET_NUMBER_OF_DESKTOPS,
113 OBT_PROP_NET_DESKTOP_GEOMETRY,
114 OBT_PROP_NET_DESKTOP_VIEWPORT,
115 OBT_PROP_NET_CURRENT_DESKTOP,
116 OBT_PROP_NET_DESKTOP_NAMES,
117 OBT_PROP_NET_ACTIVE_WINDOW,
118 /* Atom net_restack_window;*/
119 OBT_PROP_NET_WORKAREA,
120 OBT_PROP_NET_SUPPORTING_WM_CHECK,
121 OBT_PROP_NET_DESKTOP_LAYOUT,
122 OBT_PROP_NET_SHOWING_DESKTOP,
123
124 /* root window messages */
125 OBT_PROP_NET_CLOSE_WINDOW,
126 OBT_PROP_NET_WM_MOVERESIZE,
127 OBT_PROP_NET_MOVERESIZE_WINDOW,
128 OBT_PROP_NET_REQUEST_FRAME_EXTENTS,
129 OBT_PROP_NET_RESTACK_WINDOW,
130
131 /* helpful hints to apps that aren't used for anything */
132 OBT_PROP_NET_WM_FULL_PLACEMENT,
133
134 /* startup-notification extension */
135 OBT_PROP_NET_STARTUP_ID,
136
137 /* application window properties */
138 OBT_PROP_NET_WM_NAME,
139 OBT_PROP_NET_WM_VISIBLE_NAME,
140 OBT_PROP_NET_WM_ICON_NAME,
141 OBT_PROP_NET_WM_VISIBLE_ICON_NAME,
142 OBT_PROP_NET_WM_DESKTOP,
143 OBT_PROP_NET_WM_WINDOW_TYPE,
144 OBT_PROP_NET_WM_STATE,
145 OBT_PROP_NET_WM_STRUT,
146 OBT_PROP_NET_WM_STRUT_PARTIAL,
147 OBT_PROP_NET_WM_ICON,
148 OBT_PROP_NET_WM_ICON_GEOMETRY,
149 OBT_PROP_NET_WM_PID,
150 OBT_PROP_NET_WM_ALLOWED_ACTIONS,
151 OBT_PROP_NET_WM_WINDOW_OPACITY,
152 OBT_PROP_NET_WM_USER_TIME,
153 /* OBT_PROP_NET_WM_USER_TIME_WINDOW, */
154 OBT_PROP_NET_FRAME_EXTENTS,
155
156 /* application protocols */
157 OBT_PROP_NET_WM_PING,
158 #ifdef SYNC
159 OBT_PROP_NET_WM_SYNC_REQUEST,
160 OBT_PROP_NET_WM_SYNC_REQUEST_COUNTER,
161 #endif
162
163 OBT_PROP_NET_WM_WINDOW_TYPE_DESKTOP,
164 OBT_PROP_NET_WM_WINDOW_TYPE_DOCK,
165 OBT_PROP_NET_WM_WINDOW_TYPE_TOOLBAR,
166 OBT_PROP_NET_WM_WINDOW_TYPE_MENU,
167 OBT_PROP_NET_WM_WINDOW_TYPE_UTILITY,
168 OBT_PROP_NET_WM_WINDOW_TYPE_SPLASH,
169 OBT_PROP_NET_WM_WINDOW_TYPE_DIALOG,
170 OBT_PROP_NET_WM_WINDOW_TYPE_NORMAL,
171
172 OBT_PROP_NET_WM_ACTION_MOVE,
173 OBT_PROP_NET_WM_ACTION_RESIZE,
174 OBT_PROP_NET_WM_ACTION_MINIMIZE,
175 OBT_PROP_NET_WM_ACTION_SHADE,
176 /* OBT_PROP_NET_WM_ACTION_STICK,*/
177 OBT_PROP_NET_WM_ACTION_MAXIMIZE_HORZ,
178 OBT_PROP_NET_WM_ACTION_MAXIMIZE_VERT,
179 OBT_PROP_NET_WM_ACTION_FULLSCREEN,
180 OBT_PROP_NET_WM_ACTION_CHANGE_DESKTOP,
181 OBT_PROP_NET_WM_ACTION_CLOSE,
182 OBT_PROP_NET_WM_ACTION_ABOVE,
183 OBT_PROP_NET_WM_ACTION_BELOW,
184
185 OBT_PROP_NET_WM_STATE_MODAL,
186 /* OBT_PROP_NET_WM_STATE_STICKY,*/
187 OBT_PROP_NET_WM_STATE_MAXIMIZED_VERT,
188 OBT_PROP_NET_WM_STATE_MAXIMIZED_HORZ,
189 OBT_PROP_NET_WM_STATE_SHADED,
190 OBT_PROP_NET_WM_STATE_SKIP_TASKBAR,
191 OBT_PROP_NET_WM_STATE_SKIP_PAGER,
192 OBT_PROP_NET_WM_STATE_HIDDEN,
193 OBT_PROP_NET_WM_STATE_FULLSCREEN,
194 OBT_PROP_NET_WM_STATE_ABOVE,
195 OBT_PROP_NET_WM_STATE_BELOW,
196 OBT_PROP_NET_WM_STATE_DEMANDS_ATTENTION,
197
198 /* KDE atoms */
199
200 OBT_PROP_KDE_WM_CHANGE_STATE,
201 OBT_PROP_KDE_NET_WM_FRAME_STRUT,
202 OBT_PROP_KDE_NET_WM_WINDOW_TYPE_OVERRIDE,
203
204 /*
205 OBT_PROP_ROOTPMAPID,
206 OBT_PROP_ESETROOTID,
207 */
208
209 /* Openbox specific atoms */
210
211 OBT_PROP_OB_WM_ACTION_UNDECORATE,
212 OBT_PROP_OB_WM_STATE_UNDECORATED,
213 OBT_PROP_OPENBOX_PID, /* this is depreecated in favour of ob_control */
214 OBT_PROP_OB_THEME,
215 OBT_PROP_OB_CONFIG_FILE,
216 OBT_PROP_OB_CONTROL,
217 OBT_PROP_OB_VERSION,
218 OBT_PROP_OB_APP_ROLE,
219 OBT_PROP_OB_APP_TITLE,
220 OBT_PROP_OB_APP_NAME,
221 OBT_PROP_OB_APP_CLASS,
222 OBT_PROP_OB_APP_TYPE,
223
224 OBT_PROP_NUM_ATOMS
225 } ObtPropAtom;
226
227 Atom obt_prop_atom(ObtPropAtom a);
228
229 typedef enum {
230 /*! STRING is latin1 encoded. It cannot contain control characters except
231 for tab and line-feed. */
232 OBT_PROP_TEXT_STRING = 1,
233 /*! STRING text restricted to characters in the X Portable Character
234 Set, which is a subset of latin1.
235 http://static.cray-cyber.org/Documentation/NEC_SX_R10_1/G1AE02E/CHAP1.HTML
236 */
237 OBT_PROP_TEXT_STRING_XPCS = 2,
238 /*! STRING text restricted to not allow any control characters to be
239 present. */
240 OBT_PROP_TEXT_STRING_NO_CC = 3,
241 /* COMPOUND_TEXT is encoded in the current locale setting. */
242 OBT_PROP_TEXT_COMPOUND_TEXT = 4,
243 /* UTF8_STRING is encoded as utf-8. */
244 OBT_PROP_TEXT_UTF8_STRING = 5,
245 } ObtPropTextType;
246
247 gboolean obt_prop_get32(Window win, Atom prop, Atom type, guint32 *ret);
248 gboolean obt_prop_get_array32(Window win, Atom prop, Atom type, guint32 **ret,
249 guint *nret);
250
251 gboolean obt_prop_get_text(Window win, Atom prop, ObtPropTextType type,
252 gchar **ret);
253 gboolean obt_prop_get_array_text(Window win, Atom prop,
254 ObtPropTextType type,
255 gchar ***ret);
256
257 void obt_prop_set32(Window win, Atom prop, Atom type, gulong val);
258 void obt_prop_set_array32(Window win, Atom prop, Atom type, gulong *val,
259 guint num);
260 void obt_prop_set_text(Window win, Atom prop, const gchar *str);
261 void obt_prop_set_array_text(Window win, Atom prop, const gchar *const *strs);
262
263 void obt_prop_erase(Window win, Atom prop);
264
265 void obt_prop_message(gint screen, Window about, Atom messagetype,
266 glong data0, glong data1, glong data2, glong data3,
267 glong data4, glong mask);
268 void obt_prop_message_to(Window to, Window about, Atom messagetype,
269 glong data0, glong data1, glong data2, glong data3,
270 glong data4, glong mask);
271
272 #define OBT_PROP_ATOM(prop) obt_prop_atom(OBT_PROP_##prop)
273
274 #define OBT_PROP_GET32(win, prop, type, ret) \
275 (obt_prop_get32(win, OBT_PROP_ATOM(prop), OBT_PROP_ATOM(type), ret))
276 #define OBT_PROP_GETA32(win, prop, type, ret, nret) \
277 (obt_prop_get_array32(win, OBT_PROP_ATOM(prop), OBT_PROP_ATOM(type), \
278 ret, nret))
279 #define OBT_PROP_GETS(win, prop, ret) \
280 (obt_prop_get_text(win, OBT_PROP_ATOM(prop), 0, ret))
281 #define OBT_PROP_GETSS(win, prop, ret) \
282 (obt_prop_get_array_text(win, OBT_PROP_ATOM(prop), 0, ret))
283
284 #define OBT_PROP_GETS_TYPE(win, prop, type, ret) \
285 (obt_prop_get_text(win, OBT_PROP_ATOM(prop), OBT_PROP_TEXT_##type, ret))
286 #define OBT_PROP_GETSS_TYPE(win, prop, type, ret) \
287 (obt_prop_get_array_text(win, OBT_PROP_ATOM(prop), \
288 OBT_PROP_TEXT_##type, ret))
289
290 #define OBT_PROP_GETS_UTF8(win, prop, ret) \
291 OBT_PROP_GETS_TYPE(win, prop, UTF8_STRING, ret)
292 #define OBT_PROP_GETSS_UTF8(win, prop, ret) \
293 OBT_PROP_GETSS_TYPE(win, prop, UTF8_STRING, ret)
294 #define OBT_PROP_GETS_XPCS(win, prop, ret) \
295 OBT_PROP_GETS_TYPE(win, prop, STRING_XPCS, ret)
296
297 #define OBT_PROP_SET32(win, prop, type, val) \
298 (obt_prop_set32(win, OBT_PROP_ATOM(prop), OBT_PROP_ATOM(type), val))
299 #define OBT_PROP_SETA32(win, prop, type, val, num) \
300 (obt_prop_set_array32(win, OBT_PROP_ATOM(prop), OBT_PROP_ATOM(type), \
301 val, num))
302 #define OBT_PROP_SETS(win, prop, val) \
303 (obt_prop_set_text(win, OBT_PROP_ATOM(prop), val))
304 #define OBT_PROP_SETSS(win, prop, strs) \
305 (obt_prop_set_array_text(win, OBT_PROP_ATOM(prop), strs))
306
307 #define OBT_PROP_ERASE(win, prop) (obt_prop_erase(win, OBT_PROP_ATOM(prop)))
308
309 #define OBT_PROP_MSG(screen, about, msgtype, data0, data1, data2, data3, \
310 data4) \
311 (obt_prop_message(screen, about, OBT_PROP_ATOM(msgtype), \
312 data0, data1, data2, data3, data4, \
313 SubstructureNotifyMask | SubstructureRedirectMask))
314
315 #define OBT_PROP_MSG_TO(to, about, msgtype, data0, data1, data2, data3, \
316 data4, mask) \
317 (obt_prop_message_to(to, about, OBT_PROP_ATOM(msgtype), \
318 data0, data1, data2, data3, data4, mask))
319
320 G_END_DECLS
321
322 #endif /* __obt_prop_h */
This page took 0.050113 seconds and 4 git commands to generate.