Difference between revisions of "Window manager"

From GNUstepWiki
Jump to navigation Jump to search
Line 28: Line 28:
  
 
=Window Level=
 
=Window Level=
GNUstep needs arbitrary window levels. EWMH define these two:
+
GNUstep needs arbitrary window levels. EWMH defines these two:
 
   _NET_WM_STATE_ABOVE, ATOM
 
   _NET_WM_STATE_ABOVE, ATOM
 
   _NET_WM_STATE_BELOW, ATOM
 
   _NET_WM_STATE_BELOW, ATOM
 +
 +
The rest depends on the function of a window. To obtain good interoperability between different Desktop Environments, the following layered stacking order is recommended, from the bottom to the top:
 +
# windows of type <tt>_NET_WM_TYPE_DESKTOP</tt>
 +
# windows having state <tt>_NET_WM_STATE_BELOW</tt>
 +
# windows not belonging in any other layer
 +
# windows of type <tt>_NET_WM_TYPE_DOCK</tt> (unless they have state <tt>_NET_WM_TYPE_BELOW</tt>) and windows having state <tt>_NET_WM_STATE_ABOVE</tt>
 +
# focused windows having state <tt>_NET_WM_STATE_FULLSCREEN</tt>

Revision as of 06:39, 29 March 2007

In Windows and Mac OS X the window manager is tied into the OS. That's not the case for Linux or BSD. Window Maker is the recommended window manager for GNUstep, but a standard feature-set is needed. GNUstep-based applications have additional needs beyond traditional window managers, like handling the dock icon or the menus. Collecting the requirements here will lead to a specification, so any window manager can clearly state whether or not it is GNUstep-compliant.

Backend WM Attributes

Headers/x11/XGServerWindow.h defines

 unsigned long flags
 unsigned long window_style
 unsigned long window_level
 unsigned long reserved
 Pixmap miniaturize_pixmap;    // pixmap for miniaturize button
 Pixmap close_pixmap;          // pixmap for close button.
 Pixmap miniaturize_mask;      // miniaturize pixmap mask
 Pixmap close_mask;            // close pixmap mask
 unsigned long extra_flags;
 #define GSWindowStyleAttr                   (1<<0)
 #define GSWindowLevelAttr                   (1<<1)
 #define GSMiniaturizePixmapAttr             (1<<3)
 #define GSClosePixmapAttr                   (1<<4)
 #define GSMiniaturizeMaskAttr               (1<<5)
 #define GSCloseMaskAttr                     (1<<6)
 #define GSExtraFlagsAttr                    (1<<7)
 #define GSDocumentEditedFlag                (1<<0)
 #define GSWindowWillResizeNotificationsFlag (1<<1)
 #define GSWindowWillMoveNotificationsFlag   (1<<2)
 #define GSNoApplicationIconFlag             (1<<5)
 #define WMFHideOtherApplications            10
 #define WMFHideApplication                  12

Window Level

GNUstep needs arbitrary window levels. EWMH defines these two:

 _NET_WM_STATE_ABOVE, ATOM
 _NET_WM_STATE_BELOW, ATOM

The rest depends on the function of a window. To obtain good interoperability between different Desktop Environments, the following layered stacking order is recommended, from the bottom to the top:

  1. windows of type _NET_WM_TYPE_DESKTOP
  2. windows having state _NET_WM_STATE_BELOW
  3. windows not belonging in any other layer
  4. windows of type _NET_WM_TYPE_DOCK (unless they have state _NET_WM_TYPE_BELOW) and windows having state _NET_WM_STATE_ABOVE
  5. focused windows having state _NET_WM_STATE_FULLSCREEN