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