Re: Fwd: Draft 1
- From: Marko Macek <Marko Macek gmx net>
- To: wm-spec-list gnome org
- Subject: Re: Fwd: Draft 1
- Date: Sun, 20 Jun 1999 21:07:13 +0200
Matthias Ettrich wrote:
>
> Here's a draft for some hints I consider both necessary and useful.
> Note that it's far from being totally defined or complete.
> The draft is based on my experiences with KDE, the GNOME Hints and some
> intensive discussion with Raster and Alfredo. Any remaining errors are mine,
> of course.
OK.
> ======================
> Properties of the client window
> ======================
>
> _NET_WM_ICON_GEOMETRY
>
> An array x,y,w,h of type CARDINAL, format 32. This optional property
> may be set by standalone tools like a taskbar or an iconbox. It
> specifies the geometry of a possible icon in case the window is
> iconified.
>
> Rationale: This makes it possible for a window manager to display a
> nice animation like morphing the window into its icon.
OK.
> _NET_WM_LOCATION <desktop>
>
> Cardinal to determine the desktop the window is in (or wants to be),
> starting with 1 for the first desktop. 0 indicates that the window is
> withdrawn and the window manager is free to place it. Type CARDINAL,
> format 32.
>
> A window manager honors _NET_WM_LOCATION whenever a withdrawn window
> requests to be mapped. When being in another state (iconified or
> mapped), the client can request a change by sending a _NET_WM_LOCATION
> client message to the root window. (window is the respective window,
> type _NET_WM_LOCATION, format 32, l[0]=<desktop>)
OK.
> _NET_WM_DECORATION
>
> How the window's decoration frame should look like. Possible values
> are None, Normal, Tiny, and Tool.
>
> #define _NET_WM_DECORATION_NONE 0 /* the window should not be decorated at all (but managed!)*/
> #define _NET_WM_DECORATION_NORMAL 1 /* normal decoration */
> #define _NET_WM_DECORATION_TINY 2 /* a tiny decoration, just a small frame that fits into the look and feel */
> #define _NET_WM_DECORATION_TOOL 3 /* a toolwindow, i.e. slightly smaller decorations */
>
> A window manager honors _NET_WM_DECORATION whenever a withdrawn window
> requests to be mapped. When being in another state (iconified or
> mapped), the client can request a change by sending a _NET_WM_DECORATION
> client message to the root window. (window is the respective window,
> type _NET_WM_DECORATION, format 32, l[0]=<decoration>)
>
> Rationale: especially DEORATION_NONE is very important. It allows
> application developers to create borderless windows ( for example
> taskbars, desktop panels or application specific floating toolbars )
> without the need of making them override_redirect. This way the
> window can benefit from the window manager's focus handling, which
> isn't possible at all with override_redirect windows.
OK. We probably need root properties that tell what dimensions these
have.
> Type CARDINAL, format 32.
>
> _NET_WM_LAYER
>
> #define _NET_WIN_LAYER_DESKTOP 0
> #define _NET_WIN_LAYER_BELOW 2
> #define _NET_WIN_LAYER_NORMAL 4
> #define _NET_WIN_LAYER_ONTOP 6
> #define _NET_WIN_LAYER_DOCK 8
> #define _NET_WIN_LAYER_ABOVE_DOCK 10
> #define _NET_WIN_LAYER_MENU 12
>
> Type CARDINAL, format 32
OK. Same as currently.
> _NET_WM_STATE
>
> #define _NET_WM_STATE_STICKY (1<<0) /* the window sticks on the screen even when the virtual desktop scrolls */
> #define _NET_WM_STATE_OMNIPRESENT (1<<1) /* the window is visible on all virtual desktops */
> #define _NET_WM_STATE_MAXIMIZED_VERT (1<<2) /* the window is vertically maximized */
> #define _NET_WM_STATE_MAXIMIZED_HORZ (1<<3) /* the window is horizontally maximized */
> #define _NET_WM_STATE_SHADED (1<<4) /* the window is shaded */
>
> A window manager honors _NET_WM_STATE whenever a withdrawn window
> requests to be mapped. When being in another state (iconified or
> mapped), the client can request a change by sending a _NET_WM_STATE
> client message to the root window. (window is the respective window,
> type _NET_WM_STATE, format 32, l[0]=<mask>, l[1]=<new values for masked
> bits> )
Icewm also supports HIDDEN state. This would cause window not to appear
on the taskbar or have desktop icon, but otherwise be equivalent to
minimize. I believe other WMs also have hidden state (wmaker?).
> _NET_WM_HINTS
> Additional hints for the window manager or tools like panels or taskbars.
> Possible values:
>
> #define _NET_WM_HINTS_SKIP_FOCUS (1<<0) /* "alt-tab" skips this win */
> #define _NET_WM_HINTS_SKIP_WINLIST (1<<1) /* do not show in window list */
> #define _NET_WM_HINTS_SKIP_TASKBAR (1<<2) /* do not show on taskbar */
> #define _NET_WM_HINTS_NO_AUTO_FOCUS (1<<3) /* do not automatically put focus on this window when it pops up */
> #define _NET_WM_HINTS_STANDALONE_MENUBAR (1<<4) /* this window is a standalone menubar */
> #define _NET_WM_HINTS_FIXED_POSITION (1<<5) /* this window has a fixed position (should be excluded from desktop uncluttering etc.) */
> #define _NET_WM_HINTS_DO_NOT_COVER (1<<6) /* attempt to never cover up this window if possible (placement policy priority hint)*/
>
> A window manager honors _NET_WM_HINTS whenever a withdrawn window
> requests to be mapped. When being in another state (iconified or
> mapped), the client can request a change by sending a _NET_WM_HINTS
> client message to the root window. (window is the respective window,
> type _NET_WM_HINTS, format 32, l[0]=<mask>, l[1]=<new values for masked
> bits> )
>
> Type CARDINAL, format 32.
Seems OK.
> _NET_WM_MOVERESIZEGRIP
>
> Defines an array of childwindows that serves as move or sizegrips. The
> windowmanager may install a passive button grab on these windows to
> takeover the resize or move handling. The property is handled when a
> window becomes mapped the very first time (map request). Type
> XA_WINDOW, format 32.
>
> The default is resize to bottom right. But the grips may define an
> additional property _NET_WM_MOVERESIZE_DIRECTION of Type XA_CARDINAL,
> Format32 with the following values:
>
> #define _NET_WM_MOVERESIZE_DIRECTION_TOPLEFT 0 /* towards the top-left */
> #define _NET_WM_MOVERESIZE_DIRECTION_TOP 1 /* towards the top */
> #define _NET_WM_MOVERESIZE_DIRECTION_TOPRRIGHT 2 /* towards the top-right */
> #define _NET_WM_MOVERESIZE_DIRECTION_RIGHT 3 /* towards the right */
> #define _NET_WM_MOVERESIZE_DIRECTION_BOTTOMRIGHT 4 /* towards the bottom-right*/
> #define _NET_WM_MOVERESIZE_DIRECTION_BOTTOM 5 /* towards the bottom */
> #define _NET_WM_MOVERESIZE_DIRECTION_BOTTOMLEFT 6 /* towards the bottom-left */
> #define _NET_WM_MOVERESIZE_DIRECTION_LEFT 7 /* towards the left */
> #define _NET_WM_MOVERESIZE_DIRECTION_MOVE 8 /* only movement */
This seems messy. Couldn't the app just send the message to the WM when
it wants move/resize to start. This would simplify things a lot. (and
speed things up since WM would not have to grab things). A message
containing the necessary info (above+click x,y,xr,yr) would be sent to
the root window. This would also allow apps to implement special resize
by keyboard, not just clicks.
> _NET_WM_STRUT
>
> An array of struts. Strut[0] is the global strut, i.e. it appears on
> all virtual desktops. The optional following struts appear only on
> their respective virtual desktop. A strut is defined as 4-tupel of
> cardinals, one for each border of the screen. The order of the borders
> is left, right, top, bottom. The client may change this property
> anytime, a window manager therefore has to watch out for property
> notify events. A strut is valid when the window is mapped relatively
> to its virtual desktop.
>
> Type _NET_WM_CARDINAL, format 32.
Please explain this more.
> ======================
> WM_PROTOCOLS
> ======================
>
> _NET_WM_SIZEMOVE_NOTIFY
>
> If this protocol is selected, the window will receive
> _NET_WM_SIZEMOVE_ENTER and _NET_WM_SIZEMOVE_EXIT client messages when the
> window manager starts or ends resizing in opaque mode.
>
> Rationale: This allows slow applications to use a faster resizing
> method until they finally receive the _NET_WM_SIZEMOVE_EXIT hint.
OK.
> ======================
> Properties of the root window
> ======================
>
> _NET_SUPPORTED
>
> This property is supposed to be set by the window manager to indicate
> whether the protocol is supported and up to which version. Type
> CARDINAL, format 32.
OK.
> _NET_CLIENT_LIST
>
> An array of all X Windows managed by the window manager. Type
> XA_WINDOW, format 32.
OK.
> _NET_NUMBER_OF_DESKTOPS
>
> The number of virtual desktops. Type CARDINAL, format 32. If a
> client wants to change the number of desktops, it can send a
> _NET_NUMBER_OF_DESKTOPS client message to the root window (type
> _NET_NUMBER_OF_DESKTOPS, format 32, l[0]=<new number> )
OK.
> _NET_DESKTOP_GEOMETRY
>
> Array of two Cardinals (type CARDINAL, format 32 ) that defines the
> width and height of each desktop in pixel. If a client wants to change
> the desktop geometry, it can send a _NET_DESKTOP_GEOMETRY client
> message to the root window (type _NET_DESKTOP_GEOMETRY, format 32,
> l[0]=<new width>, l[1]=<new height> ).
Are all desktops the same?
> _NET_DESKTOP_VIEWPORT
>
> Array of two Cardinals (type CARDINAL, format 32 ) that defines the
> toplevel corner of the current view. For window managers that don't
> support paged desktops, this is always (0,0). If a client wants to change
> the desktop viewport, it can send a _NET_DESKTOP_VIEWPORT client
> message to the root window (type _NET_DESKTOP_VIEWPORT, format 32,
> l[0]=<new x>, l[1]=<new y> ).
Can this be unset in non-supporting WMs?
> _NET_CURRENT_DESKTOP
>
> The index of the current desktop, starts with desktop 1. Type
> CARDINAL, format 32. If a client wants to switch to another virtual
> desktop, it can send a _NET_CURRENT_DESKTOP client message to the
> root window (type _NET_CURRENT_DESKTOP, format 32, l[0]=<new index> )
OK.
> _NET_DESKTOP_NAMES
> The names of all virtual desktops. Text Property.
Who sets this? Who can change it?
> _NET_ACTIVE_WINDOW
>
> The window handle of the currently active window. This is a read-only
> property set by the window manager. If a client (for example a
> taskbar) wants to activate another window, it can send a
> _NET_ACTIVE_WINDOW client message request to the root window (window
> is the respective window, type _NET_ACTIVE_WINDOW, format 32,
> l[0]=0 /*may be used later*/ )
>
> Rationale: XSetInputFocus is not sufficient, since the window may be
> hidden on another virtual desktop ( in that case XSetInputFocus
> fails with a BadWindow error )
OK.
> ======================
> Misc
> ======================
>
> _NET_CLOSE_WINDOW
>
> Clients that wish to close another client ( typical examples are
> pagers or taskbars ), shall send a _NET_CLOSE_WINDOW client message
> request to the root window (window is the respective window that shall
> be closed, type _NET_ACTIVE_WINDOW, format 32, l[0]=0 /*may be used
> later*/ )
>
> Rationale: A window manager might be more clever than the usual
> method (send WM_DELETE message if the protocol is selected,
> XKillClient otherwise). It might introduce a timeout, for example.
> Instead of duplicating the close code, the WM can easily do the job.
OK. Should there be other window management commands: MIN,MAX,HIDE,...?
I think it would also be useful to have two things,
root:_NET_PROTOCOLS (like current _WIN_PROTOCOLS):
- list of all properties that WM supports
client:_NET_PROTOCOLS (new proposal)
- list of all properties that WM should handle/set on the window. This
would be a speed optimization, because WM only has to handle the hints
that application requires (even standard ICCCM and MWM hints could be
included here).
Also needed: WORKAREA handling. (do we need this per-workspace?).
Mark
--
... GUI: WPS.
------------------------------------------------------------------------
Marko.Macek@gmx.net http://www.kiss.uni-lj.si/~k4fr0235/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]