1 #ifndef CLIENTPROPS_H_HEADER_INCLUDED
2 #define CLIENTPROPS_H_HEADER_INCLUDED
3 
4 #include <X11/Xresource.h>
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 
11 struct ASDatabase;
12 struct ASDatabaseRecord;
13 struct ASStatusHints;
14 struct ScreenInfo;
15 struct AtomXref;
16 
17 
18 typedef enum
19 {
20 	HINTS_ICCCM = 0,
21 	HINTS_GroupLead,
22 	HINTS_Transient,
23 	HINTS_Motif,
24 	HINTS_Gnome,
25 	HINTS_KDE,
26 	HINTS_ExtendedWM,
27 	HINTS_XResources,
28 	HINTS_ASDatabase,
29 	HINTS_Supported
30 }HintsTypes;
31 
32 #if 0
33 /***********************************************************/
34 /* AS Startup flags :                                      */
35 #define AS_StartPosition        (1<<0)
36 #define AS_StartPositionUser    (1<<1)
37 #define AS_Position 		    (1<<1)
38 #define AS_StartSize			(1<<2)
39 #define AS_Size					(1<<2)
40 #define AS_StartSizeUser		(1<<3)
41 #define AS_StartBorderWidth     (1<<4)
42 #define AS_BorderWidth     		(1<<4)
43 /* Viewport cannot be changed after window is mapped : */
44 #define AS_StartViewportX       (1<<5)
45 #define AS_StartViewportY       (1<<6)
46 #define AS_StartDesktop         (1<<7)
47 #define AS_Desktop 		        (1<<7)
48 #define AS_StartLayer			(1<<8)
49 #define AS_Layer				(1<<8)
50 /* the following are flags identifying client's status : */
51 #define AS_StartsIconic         (1<<9)
52 #define AS_Iconic               (1<<9)
53 #define AS_StartsMaximizedX     (1<<10)
54 #define AS_MaximizedX           (1<<10)
55 #define AS_StartsMaximizedY     (1<<11)
56 #define AS_MaximizedY           (1<<11)
57 #define AS_StartsSticky         (1<<12)
58 #define AS_Sticky               (1<<12)
59 #define AS_StartsShaded         (1<<13)
60 #define AS_Shaded               (1<<13)
61 /* special state - client withdrawn itself */
62 #define AS_Withdrawn            (1<<14)
63 #define AS_Dead                 (1<<15) /* dead client - has been destroyd or about to be destroyed */
64 /* special state - client is mapped - there is a small gap between MapRequest+XMapWindow and MapNotify event */
65 #define AS_Mapped               (1<<16)
66 #define AS_IconMapped           (1<<17)
67 
68 /***********************************************************/
69 /* General flags                                           */
70 #define AS_MinSize				(1<<0)
71 #define AS_MaxSize				(1<<1)
72 #define AS_SizeInc				(1<<2)
73 #define AS_Aspect				(1<<3)
74 #define AS_BaseSize				(1<<4)
75 #define AS_Gravity				(1<<5)
76 #define AS_PID					(1<<6)
77 #define AS_Transient 			(1<<7)
78 #define AS_AcceptsFocus			(1<<8)
79 #define AS_ClickToFocus			(1<<9)
80 #define AS_Titlebar				(1<<10)
81 #define AS_VerticalTitle		(1<<11)
82 #define AS_Border				(1<<12)
83 #define AS_Handles				(1<<13)
84 #define AS_Frame				(1<<14)
85 #define AS_SkipWinList          (1<<15)
86 #define AS_DontCirculate        (1<<16)
87 #define AS_AvoidCover           (1<<17)
88 #define AS_IconTitle            (1<<18)
89 #define AS_Icon                 (1<<19)
90 #define AS_ClientIcon           (1<<20)
91 #define AS_ClientIconPixmap     (1<<21)
92 #define AS_ClientIconPosition   (1<<22)
93 
94 /***********************************************************/
95 /* AS supported protocols :                                */
96 #define AS_DoesWmTakeFocus 		(1<<0)
97 #define AS_DoesWmDeleteWindow 	(1<<1)
98 #define AS_DoesWmPing           (1<<2)
99 #define AS_NeedsVisibleName		(1<<3)  /* only if window has _NET_WM_NAME hint */
100 
101 /***********************************************************/
102 /* AS function masks :                                     */
103 #define AS_FuncPopup            (1<<0)
104 #define AS_FuncMinimize         (1<<1)
105 #define AS_FuncMaximize         (1<<2)
106 #define AS_FuncResize           (1<<3)
107 #define AS_FuncMove             (1<<4)
108 #define AS_FuncClose            (1<<7)
109 #define AS_FuncKill             (1<<8)
110 
111 /***********************************************************/
112 /* AS layers :                                             */
113 #define AS_LayerDesktop         -10000  /* our desktop - just for the heck of it */
114 #define AS_LayerOtherDesktop    -2      /* for all those other file managers, KDE, GNOME, etc. */
115 #define AS_LayerBack            -1      /* normal windows below */
116 #define AS_LayerNormal           0      /* normal windows */
117 #define AS_LayerTop              1      /* normal windows above */
118 #define AS_LayerService          2      /* primarily for Wharfs, etc. */
119 #define AS_LayerUrgent           3      /* for modal dialogs that needs urgent answer (System Modal)*/
120 #define AS_LayerOtherMenu        4      /* for all those other menus - KDE, GNOME, etc. */
121 #define AS_LayerMenu             10000  /* our menu  - can't go wrong with that */
122 
123 #define ASHINTS_STATIC_DATA 	 28     /* number of elements below that are not */
124 										/* dynamic arrays */
125 
126 #endif
127 /************************************************************************/
128 /*		globals (atom IDs)					*/
129 /************************************************************************/
130 extern Atom _XA_WM_PROTOCOLS;
131 extern Atom _XA_WM_TAKE_FOCUS;
132 extern Atom _XA_WM_DELETE_WINDOW;
133 extern Atom _XA_WM_COLORMAP_WINDOWS;
134 extern Atom _XA_WM_STATE;
135 extern Atom _XA_SM_CLIENT_ID;
136 extern Atom _XA_WM_WINDOW_ROLE;
137 extern Atom _XA_WM_CLIENT_LEADER;
138 
139 /* Motif hints */
140 extern Atom _XA_MwmAtom;
141 
142 /* Gnome hints */
143 extern Atom _XA_WIN_LAYER;
144 extern Atom _XA_WIN_STATE;
145 extern Atom _XA_WIN_WORKSPACE;
146 extern Atom _XA_WIN_HINTS;
147 
148 /* wm-spec _NET hints : */
149 extern Atom _XA_NET_WM_NAME;
150 extern Atom _XA_NET_WM_ICON_NAME;
151 
152 extern Atom _XA_NET_WM_VISIBLE_NAME;
153 extern Atom _XA_NET_WM_VISIBLE_ICON_NAME;
154 
155 extern Atom _XA_NET_WM_DESKTOP;
156 extern Atom _XA_NET_WM_WINDOW_TYPE;
157 extern Atom _XA_NET_WM_WINDOW_TYPE_DESKTOP;
158 extern Atom _XA_NET_WM_WINDOW_TYPE_DOCK;
159 extern Atom _XA_NET_WM_WINDOW_TYPE_TOOLBAR;
160 extern Atom _XA_NET_WM_WINDOW_TYPE_MENU;
161 extern Atom _XA_NET_WM_WINDOW_TYPE_DIALOG;
162 extern Atom _XA_NET_WM_WINDOW_TYPE_NORMAL;
163 extern Atom _XA_NET_WM_WINDOW_TYPE_UTILITY;
164 extern Atom _XA_NET_WM_WINDOW_TYPE_SPLASH;
165 extern Atom _XA_AS_WM_WINDOW_TYPE_MODULE;
166 
167 extern Atom _XA_NET_WM_STATE;
168 extern Atom _XA_NET_WM_STATE_MODAL;
169 extern Atom _XA_NET_WM_STATE_STICKY;
170 extern Atom _XA_NET_WM_STATE_MAXIMIZED_VERT;
171 extern Atom _XA_NET_WM_STATE_MAXIMIZED_HORZ;
172 extern Atom _XA_NET_WM_STATE_SHADED;
173 extern Atom _XA_NET_WM_STATE_SKIP_TASKBAR;
174 extern Atom _XA_NET_WM_STATE_SKIP_PAGER;
175 extern Atom _XA_NET_WM_STATE_HIDDEN;
176 extern Atom _XA_NET_WM_STATE_FULLSCREEN;
177 extern Atom _XA_NET_WM_STATE_ABOVE;
178 extern Atom _XA_NET_WM_STATE_BELOW;
179 extern Atom _XA_NET_WM_STATE_DEMANDS_ATTENTION;
180 extern Atom _XA_NET_WM_STATE_FOCUSED;
181 
182 #define MAX_NET_WM_STATES   12
183 
184 extern Atom _XA_NET_WM_PID;
185 extern Atom _XA_NET_WM_PING;
186 extern Atom _XA_NET_WM_ICON;
187 
188 extern Atom _XA_NET_WM_WINDOW_OPACITY;
189 #define NET_WM_WINDOW_OPACITY_OPAQUE		0xffffffff
190 
191 extern Atom _XA_AS_MOVERESIZE;
192 
193 extern struct AtomXref      *EXTWM_State;
194 
195 #define IsNameProp(a) \
196 		((a) == XA_WM_NAME ||  \
197 		 (a) == XA_WM_ICON_NAME || \
198 		 (a) == XA_WM_CLASS ||  \
199 		 (a) == _XA_NET_WM_NAME || \
200 		 (a) == _XA_NET_WM_ICON_NAME || \
201 		 (a) == _XA_NET_WM_VISIBLE_NAME || \
202 		 (a) == _XA_NET_WM_VISIBLE_ICON_NAME )
203 
204 /* must not track state properties, since we manage it ourselves !! */
205 #define NeedToTrackPropChanges(a) \
206    (((a)== XA_WM_HINTS  )|| \
207 	((a)== XA_WM_NORMAL_HINTS  )|| \
208 	((a)== XA_WM_TRANSIENT_FOR  )|| \
209 	((a)== XA_WM_COMMAND  )|| \
210 	((a)== XA_WM_CLIENT_MACHINE  )|| \
211 	((a)== _XA_WM_PROTOCOLS  )|| \
212 	((a)== _XA_WM_COLORMAP_WINDOWS  )|| \
213 	((a)== _XA_MwmAtom  )|| \
214 	((a)== _XA_WIN_HINTS  )|| \
215 	((a)== _XA_NET_WM_WINDOW_TYPE  ))
216 
217 /* Crossreferences of atoms into flag value for
218    different atom list type of properties :*/
219 
220 
221 /************************************************************************/
222 /* 		ICCCM window hints		 			*/
223 /************************************************************************/
224 
225 /* our own enchancement to XWMHints flags : */
226 #define IconWindowIsChildHint	(1L << 14)
227 
228 
229 /*
230 All of this stuff is part of standard Xlib so we put it into comments -
231 no need to redefine it.
232 
233 This are placed By Client :
234  WM_NAME                 TEXT
235  WM_CLASS   		 XClassHint
236 	res_class
237 	res_name
238  WM_ICON_NAME            TEXT
239  WM_CLIENT_MACHINE       TEXT
240 
241  WM_HINTS                XWMHints   	32
242 	flags 	         CARD32
243 	USPosition
244 	USSize
245 	PPosition
246 	PSize
247 	PMinSize
248 	PMaxSize
249 	PResizeInc
250 	PAspect
251 	PBaseSize
252 	PWinGravity
253 	pad 	         4*CARD32
254 	max_width            INT32
255 	max_height           INT32
256 	width_inc 	         INT32
257 	height_inc           INT32
258 	max_aspect           (INT32,INT32)
259 	base_width           INT32
260 	base_height          INT32
261 	win_gravity
262 	NorthWest
263 	North
264 	NorthEast
265 	West
266 	Center
267 	East
268 	SouthWest
269 	South
270 	SouthEast
271 	Static
272 
273  WM_NORMAL_HINTS         XSizeHints 	32
274 	flags 	         CARD32
275 	InputHint
276 	StateHint
277 	IconPixmapHint
278 	IconWindowHint
279 	IconPositionHint
280 	IconMaskHint
281 	WindowGroupHint
282 	MessageHint       (this bit is obsolete)
283 	UrgencyHint
284 	input 	         CARD32
285 	False - if Globally Active and No Input
286 	True  - Passive and Locally Active
287 	initial_state        CARD32
288 	WithdrawnState   0
289 	NormalState      1
290 	IconicState      3
291 	icon_pixmap          PIXMAP
292 	icon_window          WINDOW
293 	icon_mask            PIXMAP
294   Ignored :
295 	icon_x 		 INT32
296 	icon_y 	         INT32
297 
298  WM_PROTOCOLS            ATOM 		32 (list of atoms)
299 	WM_TAKE_FOCUS
300 	WM_DELETE_WINDOW
301 
302  WM_TRANSIENT_FOR        WINDOW         32
303  WM_COLORMAP_WINDOWS     WINDOW     	32 (List of windows)
304 
305 This are placed By Window Manager :
306  WM_STATE                WM_STATE       32
307 	state		 CARD32
308 	WithdrawnState   0
309 	NormalState      1
310 	IconicState      3
311 	icon 		 WINDOW
312 
313  WM_ICON_SIZE            XIconSize
314 	max_width            CARD32
315 	max_height           CARD32
316 	width_inc            CARD32
317 	height_inc           CARD32
318 */
319 
320 #ifndef 	UrgencyHint
321 # ifndef 	XUrgencyHint
322 #  define 	UrgencyHint		256
323 # else
324 #  define 	UrgencyHint		XUrgencyHint
325 # endif
326 #endif
327 
328 
329 /************************************************************************/
330 /* 		Motif WM window hints					*/
331 /************************************************************************/
332 /* This are placed By Client : */
333 
334 typedef struct MwmHints
335 {
336   CARD32 flags;         /* window hints */
337   CARD32 functions;     /* requested functions */
338   CARD32 decorations;   /* requested decorations */
339   INT32  inputMode;     /* input mode */
340   CARD32 status;        /* status (ignored) */
341 }MwmHints;
342 
343 /* Motif WM window hints */
344 #define MWM_HINTS_FUNCTIONS     (1L << 0)
345 #define MWM_HINTS_DECORATIONS   (1L << 1)
346 #define MWM_HINTS_INPUT_MODE    (1L << 2)
347 #define MWM_HINTS_STATUS        (1L << 3)
348 
349 /* Motif WM function flags */
350 #define MWM_FUNC_ALL            (1L << 0)
351 #define MWM_FUNC_RESIZE         (1L << 1)
352 #define MWM_FUNC_MOVE           (1L << 2)
353 #define MWM_FUNC_MINIMIZE       (1L << 3)
354 #define MWM_FUNC_MAXIMIZE       (1L << 4)
355 #define MWM_FUNC_CLOSE          (1L << 5)
356 #define MWM_FUNC_EVERYTHING     (MWM_FUNC_RESIZE|MWM_FUNC_MOVE|MWM_FUNC_MINIMIZE|MWM_FUNC_MAXIMIZE|MWM_FUNC_CLOSE)
357 
358 /* Motif WM decor flags */
359 #define MWM_DECOR_ALL           (1L << 0)
360 #define MWM_DECOR_BORDER        (1L << 1)
361 #define MWM_DECOR_RESIZEH       (1L << 2)
362 #define MWM_DECOR_TITLE         (1L << 3)
363 #define MWM_DECOR_MENU          (1L << 4)
364 #define MWM_DECOR_MINIMIZE      (1L << 5)
365 #define MWM_DECOR_MAXIMIZE      (1L << 6)
366 #define MWM_DECOR_EVERYTHING    (MWM_DECOR_BORDER|MWM_DECOR_RESIZEH|MWM_DECOR_TITLE|MWM_DECOR_MENU|MWM_DECOR_MINIMIZE|MWM_DECOR_MAXIMIZE)
367 
368 /* Motif WM input modes */
369 #define MWM_INPUT_MODELESS 			0
370 #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 	1
371 #define MWM_INPUT_SYSTEM_MODAL 			2
372 #define MWM_INPUT_FULL_APPLICATION_MODAL 	3
373 #define MWM_INPUT_APPLICATION_MODAL 		MWM_INPUT_PRIMARY_APPLICATION_MODAL
374 
375 #define PROP_MOTIF_WM_HINTS_ELEMENTS  5
376 #define PROP_MWM_HINTS_ELEMENTS       PROP_MOTIF_WM_HINTS_ELEMENTS
377 
378 /************************************************************************/
379 /* 		OldGnome WM window hints 				*/
380 /************************************************************************/
381 
382 /*
383 	Client hints include :
384 	_WIN_LAYER
385 	_WIN_STATE
386 	_WIN_WORKSPACE
387 	_WIN_HINTS
388 	Unsupported :
389 	_WIN_EXPANDED_SIZE
390 */
391 
392 /*_WIN_LAYER is also a CARDINAL that is the stacking layer the application wishes to exist in.
393   The values for this property are:    */
394 #define WIN_LAYER_DESKTOP       0
395 #define WIN_LAYER_BELOW         2
396 #define WIN_LAYER_NORMAL        4
397 #define WIN_LAYER_ONTOP         6
398 #define WIN_LAYER_DOCK          8
399 #define WIN_LAYER_ABOVE_DOCK   10
400 #define WIN_LAYER_MENU         12
401 
402 /* The bitmask for _WIN_STATE is as follows: */
403 #define WIN_STATE_STICKY          (1<<0)	/*everyone knows sticky */
404 #define WIN_STATE_MINIMIZED       (1<<1)	/*Reserved - definition is unclear */
405 #define WIN_STATE_MAXIMIZED_VERT  (1<<2)	/*window in maximized V state */
406 #define WIN_STATE_MAXIMIZED_HORIZ (1<<3)	/*window in maximized H state */
407 #define WIN_STATE_HIDDEN          (1<<4)	/*not on taskbar but window visible */
408 #define WIN_STATE_SHADED          (1<<5)	/*shaded (MacOS / Afterstep style) */
409 #define WIN_STATE_HID_WORKSPACE   (1<<6)	/*not on current desktop */
410 #define WIN_STATE_HID_TRANSIENT   (1<<7)	/*owner of transient is hidden */
411 #define WIN_STATE_FIXED_POSITION  (1<<8)	/*window is fixed in position even */
412 #define WIN_STATE_ARRANGE_IGNORE  (1<<9)	/*ignore for auto arranging */
413 
414 /* The bitmask for _WIN_HINTS is as follows: */
415 #define WIN_HINTS_SKIP_FOCUS      (1<<0)	/*"alt-tab" skips this win */
416 #define WIN_HINTS_SKIP_WINLIST    (1<<1)	/*do not show in window list */
417 #define WIN_HINTS_SKIP_TASKBAR    (1<<2)	/*do not show on taskbar */
418 #define WIN_HINTS_GROUP_TRANSIENT (1<<3)	/*Reserved - definition is unclear */
419 #define WIN_HINTS_FOCUS_ON_CLICK  (1<<4)	/*app only accepts focus if clicked */
420 
421 typedef struct GnomeHints
422 {
423 #define GNOME_LAYER		(1<<0)
424 #define GNOME_STATE		(1<<1)
425 #define GNOME_WORKSPACE		(1<<2)
426 #define GNOME_HINTS		(1<<3)
427 #define GNOME_EXP_SIZE		(1<<4)
428   ASFlagType flags;
429 
430   CARD32 layer;
431   CARD32 state;
432   CARD32 workspace;
433   CARD32 hints;
434   /* Unsupported : */
435   CARD32 expanded_size[4];
436 
437 }
438 GnomeHints;
439 
440 /************************************************************************/
441 /*	New Gnome-KDE WM compatibility window hints			*/
442 /*      see: http://www.freedesktop.org/standards/wm-spec/      	*/
443 /************************************************************************/
444 /*
445   Client window properties :
446 	_NET_WM_NAME		UTF-8
447 	_NET_WM_VISIBLE_NAME_STRING UTF-8
448 	_NET_WM_DESKTOP		CARDINAL	32
449 	_NET_WM_WINDOW_TYPE		list of Atoms :
450 	_NET_WM_WINDOW_TYPE_DESKTOP
451 	_NET_WM_WINDOW_TYPE_DOCK
452 	_NET_WM_WINDOW_TYPE_TOOLBAR
453 	_NET_WM_WINDOW_TYPE_MENU
454 	_NET_WM_WINDOW_TYPE_DIALOG
455 	_NET_WM_WINDOW_TYPE_NORMAL
456 	_NET_WM_STATE		list of Atoms :
457 	_NET_WM_STATE_MODAL
458 	_NET_WM_STATE_STICKY
459 	_NET_WM_STATE_MAXIMIZED_VERT
460 	_NET_WM_STATE_MAXIMIZED_HORZ
461 	_NET_WM_STATE_SHADED
462 	_NET_WM_STATE_SKIP_TASKBAR
463 
464 	_NET_WM_PID
465 
466  Unsupported :
467 	_NET_WM_STRUT
468 	_NET_WM_HANDLED_ICONS
469 	_NET_WM_ICON_GEOMETRY
470 	_NET_WM_ICON
471 
472  Protocols :
473 	_NET_WM_PING
474 	_NET_WM_ICON
475 
476 */
477 
478 typedef struct ExtendedWMHints
479 {
480 #define EXTWM_NAME              (0x01<<0)
481 #define EXTWM_ICON_NAME         (0x01<<1)
482 #define EXTWM_VISIBLE_NAME      (0x01<<2)
483 #define EXTWM_VISIBLE_ICON_NAME (0x01<<3)
484 #define EXTWM_DESKTOP           (0x01<<4)
485 
486 #define EXTWM_TypeSet	        (0x01<<5)
487 #define EXTWM_StateSet	        (0x01<<6)
488 #define EXTWM_ICON              (0x01<<7)
489 #define EXTWM_PID               (0x01<<8)
490 #define EXTWM_DoesWMPing        (0x01<<9)
491 #define EXTWM_WINDOW_OPACITY    (0x01<<10)
492 
493 /* actions to be performed on window state upon client request :*/
494 #define EXTWM_StateRemove   0    /* remove/unset property */
495 #define EXTWM_StateAdd      1    /* add/set property */
496 #define EXTWM_StateToggle   2    /* toggle property  */
497 
498   ASFlagType flags;
499 
500 #define EXTWM_TypeDesktop       (0x01<<0)
501 #define EXTWM_TypeDock          (0x01<<1)
502 #define EXTWM_TypeToolbar       (0x01<<2)
503 #define EXTWM_TypeMenu          (0x01<<3)
504 #define EXTWM_TypeDialog        (0x01<<4)
505 #define EXTWM_TypeNormal        (0x01<<5)
506 #define EXTWM_TypeUtility       (0x01<<6)
507 #define EXTWM_TypeSplash        (0x01<<7)
508 #define EXTWM_TypeASModule      (0x01<<8)
509 #define EXTWM_TypeEverything    (EXTWM_TypeDesktop|EXTWM_TypeDock|EXTWM_TypeToolbar| \
510 								 EXTWM_TypeMenu|EXTWM_TypeDialog|EXTWM_TypeNormal| \
511 								 EXTWM_TypeUtility|EXTWM_TypeSplash|EXTWM_TypeASModule)
512 
513   ASFlagType type_flags;
514 
515 #define EXTWM_StateModal        (0x01<<16)
516 #define EXTWM_StateSticky       (0x01<<17)
517 #define EXTWM_StateMaximizedV   (0x01<<18)
518 #define EXTWM_StateMaximizedH   (0x01<<19)
519 #define EXTWM_StateShaded       (0x01<<20)
520 #define EXTWM_StateSkipTaskbar  (0x01<<21)
521 #define EXTWM_StateSkipPager    (0x01<<22)
522 #define EXTWM_StateHidden    	(0x01<<23)
523 #define EXTWM_StateFullscreen	(0x01<<24)
524 #define EXTWM_StateAbove	 	(0x01<<25)
525 #define EXTWM_StateBelow	 	(0x01<<26)
526 #define EXTWM_StateDemandsAttention	(0x01<<27)
527 #define EXTWM_StateFocused	(0x01<<28)
528 
529 #define EXTWM_StateEverything   (EXTWM_StateModal|EXTWM_StateSticky|EXTWM_StateMaximizedV| \
530 								 EXTWM_StateMaximizedH|EXTWM_StateShaded| \
531 								 EXTWM_StateSkipTaskbar|EXTWM_StateSkipPager | \
532 								 EXTWM_StateHidden|EXTWM_StateFullscreen| \
533 								 EXTWM_StateAbove|EXTWM_StateBelow|EXTWM_StateDemandsAttention \
534 								 |EXTWM_StateFocused)
535 
536   ASFlagType state_flags;
537 
538   XTextProperty *name;
539   XTextProperty *icon_name;
540   XTextProperty *visible_name;
541   XTextProperty *visible_icon_name;
542   CARD32 desktop;
543   CARD32 pid;
544   CARD32 *icon;
545   long icon_length;
546   CARD32 window_opacity ;
547 }
548 ExtendedWMHints;
549 
550 typedef struct KDEHints
551 {
552 #define KDE_DesktopWindow              (0x01<<0)
553 #define KDE_SysTrayWindowFor           (0x01<<1)
554 
555 	ASFlagType flags ;
556 	Window systray_window_for;
557 }KDEHints;
558 
559 /***********************************************************************/
560 /*    AfterStep structure to collect all the hints set on window :     */
561 /***********************************************************************/
562 
563 typedef struct ASParentHints
564 { /* this contains all the information about window that has governing relations
565    * to us. For eaxmple window which we are transient for, or leader of the group
566    */
567 	Window  parent ;
568 	ASFlagType flags ;
569 	int 	desktop ;
570 	int viewport_x, viewport_y ;
571 
572 }ASParentHints;
573 
574 typedef Bool (*get_parent_hints_func)(Window parent, ASParentHints *dst );
575 
576 /* use this function to override default function : */
577 get_parent_hints_func set_parent_hints_func(get_parent_hints_func new_func);
578 
579 #define HINT_NAME               (1<<0)
580 #define HINT_PROTOCOL           (1<<1)
581 #define HINT_COLORMAP           (1<<2)
582 #define HINT_GENERAL            (1<<3)
583 #define HINT_STARTUP            (1<<4)
584 #define HINT_ANY                ASFLAGS_EVERYTHING
585 
586 typedef struct ASRawHints
587 {
588   struct ScreenInfo 	*scr;
589   /* ICCCM hints : */
590   XTextProperty *wm_name;
591   XTextProperty *wm_icon_name;
592   XClassHint    *wm_class;
593   ASRectangle    placement ;
594   unsigned int   border_width;
595   XWMHints      *wm_hints;
596   ASParentHints *group_leader ;
597   XSizeHints    *wm_normal_hints;
598   ASParentHints *transient_for;
599 
600   ASFlagType     wm_protocols;
601   CARD32        *wm_cmap_windows;
602   long           wm_cmap_win_count;
603 
604   XTextProperty *wm_client_machine ;    /* hostname of the computer on which client was executed */
605   int            wm_cmd_argc ;
606   char         **wm_cmd_argv ;
607 
608   INT32          wm_state ;
609   CARD32         wm_state_icon_win ;
610 
611   /* Motif Hints : */
612   MwmHints      *motif_hints;
613 
614   /* Gnome Hints : */
615   GnomeHints     gnome_hints;   /* see gnome_hints.flags for what's actually set */
616 
617   /* WM-specs (new Gnome) Hints : */
618   ExtendedWMHints extwm_hints;
619   KDEHints	kde_hints;
620 
621   ASFlagType  hints_types ;
622 
623 }
624 ASRawHints;
625 
626 /*************************************************************************/
627 /*                           Interface                                   */
628 /*************************************************************************/
629 /* low level */
630 CARD32 read_extwm_desktop_val ( Window w);
631 
632 
633 /* X Resources : */
634 void init_xrm();
635 void load_user_database();
636 void destroy_user_database();
637 Bool read_int_resource( XrmDatabase db, const char *res_name, const char*res_class, int *value );
638 
639 /* High level */
640 void intern_hint_atoms ();
641 ASRawHints *collect_hints (struct ScreenInfo *scr, Window w, ASFlagType what, ASRawHints *reusable_memory);
642 void destroy_raw_hints( ASRawHints *hints, Bool reusable );
643 void clientprops_cleanup ();
644 
645 void read_wm_protocols (ASRawHints * hints, Window w);
646 
647 /* printing functions :
648  * if func and stream are not specified - fprintf(stderr) is used ! */
649 void print_wm_hints         ( stream_func func, void* stream, XWMHints *hints );
650 void print_wm_normal_hints  ( stream_func func, void* stream, XSizeHints *hints );
651 void print_motif_hints      ( stream_func func, void* stream, MwmHints *hints );
652 void print_gnome_hints      ( stream_func func, void* stream, GnomeHints *hints );
653 void print_extwm_hints      ( stream_func func, void* stream, ExtendedWMHints *hints );
654 void print_hints            ( stream_func func, void* stream, ASRawHints *hints );
655 
656 
657 /*************************************************************************/
658 Bool handle_client_property_update ( Window w, Atom property, ASRawHints *raw );
659 Bool handle_manager_property_update( Window w, Atom property, ASRawHints *raw );
660 
661 Bool get_extwm_state_flags (Window w, ASFlagType *flags);
662 
663 
664 /*************************************************************************/
665 /****************** Setting properties - updating hints : ****************/
666 /*************************************************************************/
667 void set_client_state( Window w, struct ASStatusHints *status );
668 void set_extwm_urgency_state (Window w, Bool set );
669 void set_client_desktop( Window w, int ext_desk );
670 void set_client_names( Window w, char *name, char *icon_name, char *res_class, char *res_name );
671 void set_client_protocols (Window w, ASFlagType protocols, ASFlagType extwm_protocols);
672 void set_extwm_hints( Window w, ExtendedWMHints *extwm_hints );
673 void set_gnome_hints( Window w, GnomeHints *gnome_hints );
674 
675 void set_client_hints( Window w, XWMHints *hints, XSizeHints *size_hints, ASFlagType protocols,
676 					   ExtendedWMHints *extwm_hints );
677 void set_client_cmd (Window w);
678 
679 
680 void send_wm_protocol_request (Window w, Atom request, Time timestamp);
681 
682 /*************************************************************************/
683 /********************************THE END**********************************/
684 /*************************************************************************/
685 #ifdef __cplusplus
686 }
687 #endif
688 
689 
690 #endif  /* CLIENTPROPS_H_HEADER_INCLUDED */
691