My comments on the WM spec
- From: Owen Taylor <otaylor redhat com>
- To: wm-spec-list gnome org
- Subject: My comments on the WM spec
- Date: 25 Sep 2000 22:14:19 -0400
Following up on the discussion over the last few days, and
also because people are interested in finalizing the
spec, I just took a careful pass over the WM spec looking
for remaining issues, and actually, I found quite a few.
I'm still working on adding support for the hints into the
GTK+ codebase, so I may find a few more issues over the
next few days, but I wanted to get these out as soon
as possible.
A lot of the following is basically editorial for the spec -
suggesting clarification or pointing out missing information.
But there are a few places where I think the actual protocol
needs to be changed as well.
Regards,
Owen
_NET_NUMBER_OF_DESKTOPS
I find the language
_NET_VIRTUAL_ROOTS MUST be set store the new number of desktop
virtual root window IDs
a bit confusing.
I would suggest:
The contents of _NET_VIRTUAL_ROOTS MUST be altered so that the
number of window IDS it contain is new_desktops_number.
(If that is the proper interpretation; I'm not completely sure
about _NET_VIRTUAL_ROOTS, see below)
I would also suggest that language be added indicating that
if _NET_CURRENT_DESKTOP need to be changed or windows need
to be moved to a different desktop, these changes must
be changed _before_ _NET_NUMBER_OF_DESKTOP is changed.
_NET_DESKTOP_GEOMETRY
Its probably worth saying that this size must be equal or
greater than the actual dimensions of the screen
as determined by ScreenWidth, ScreenHeight.
[ Current proposals to make it possible to change the size of the
screen on the fly might cause this to be momemtarily violated when
changing screen size ]
The specification of the format for _NET_DESKTOP_GEOMETRY
client messages is missing.
Also, I would recommend making this section correspond to
_NET_NUMBER_OF_DESKTOPS by saying that the window manager is not
required to honour _NET_DESKTOP_GEOMETRY client messages.
_NET_DESKTOP_VIEWPORT
Might also be useful to specify the constraints that
0 <= x < desktop geometry width - ScreenWidth
0 <= y < desktop geometry height - ScreenHeight
Somewhere, the spec should to specify whether coordinates for client
windows when mapping the window or in ConfigureRequest are taken with
respect to the viewport origin or the desktop origin. I believe the
standard is to use the desktop origin, but would have to check what
various window managers do.
Again the client message format is missing
_NET_DESKTOP_NAMES
The type and format are not specified. Is this the standard
NUL-separated list of strings?
Also, note typo: "Window Mangaer"
_NET_SUPPORTING_WM_CHECK
"set with the same value" is potentially unclear. Better to say
"also set to the ID of the child window". And I think it
is useful to extend the rational here: the property on the
child window is used so that an active window manager can
be distinguished from a stale _NET_SUPPORTING_WM_CHECK
property that happens to point to another window. If the
_NET_SUPPORTING_WM_CHECK window on the client window is missing
or not properly set, clients should assume that no conforming
window manager is present.
Reading over the ICCCM again, I realized that this really
is the wrong way of doing things - really we should be
working on top of the selection mechanism described in
sections 2.8 and 4.3. The X selection mechanism is meant
the way in X to control ownership of shared resources,
and the ICCCM describes how starting one window manager
should cause the previous window manager to cleanly give
up control of the root window. Of course, I don't know if any window
managers actually conform to the ICCCM in this respect.
_NET_WORKAREA
Should say that the coordinates here are taken with respect
to the the current viewport. (If they are.)
_NET_VIRTUAL_ROOTS
Is this a) an (unordered) list of all virtual root windows other
than the real root window, or b) a list of the window that
corresponds to each desktop, either real or virtual?
I'm a little nervous about including this since it is known
that using virtual root windows introduces a number of problems
for various operations (the ICCCM claims that a protocol
extension would be needed to properly implement virtual root
windows.)
_NET_CLOSE_WINDOW
There is a formatting problem with client message format
specification.
_NET_WM_MOVERESIZE
A thing to be careful about here is that this operation is
essentially talking about transferring a pointer grab from
one window to another. It needs to be pointed out that the
window manager has no guarantee of getting the release from
the mouse click that started the operation, and needs to
check the state field of motion events to safely know when
to release the grab.
(With this protocol there is no way of getting around the fact
that a fast press/release/press can be misinterpreted.)
For proper operation, I think you really should include
the mouse button that started the operation, not just the
x and y coordinates.
The name of the enumerations probably really should use
North,South,East,West, instead of top,right,...to correspond with
similar names used in X elsewhere.
_NET_WM_NAME
The property type for this property isn't specified - I would
suggest UTF8_STRING. _NET_WM_ICON_NAME is missing.
_NET_WM_STATE
I don't have concrete suggestions here, but I will note that
this property feels very hackish to me:
- It groups together different things
- current state of the window (SHADED/MAXIMIZED)
- the way the window should be treated
(modal, skip taskbar, sticky)
- When mapping a window, does a missing atom mean
that the state should is "unset" or "not specified" -
this doesn't matter so much for, say, SHADED,
but for MODAL and SKIP_TASKBAR, it is quite likely
that the window manager may, e.g., determine automatically
determine that a window should be MODAL by examining,
for instance, its WINDOW_TYPE and/or TRANSIENT_FOR
properties.
- The concept that exactly two properties may be changed
together seems very odd to me.
Assuming that we want to keep mixing all these types of "state"
together, the way I would do this property is to make it
a bitfield, or actually, two bitfields - one for the bits
that are present, and one for the the state of these
bits.
The client message would then include a bitfield, and an
operation - set, clear, toggle, and unset_to_default.
But I really don't understand the coherence of the different
atoms currently in the property.
_NET_WM_ICON_GEOMETRY
How do we resolve who sets this property? What if there
are multiple task lists?
_NET_WM_ICON
It currently says that 1 byte should be each of the width and height
I think this is probably a typo and it is supposed to be the
first two elements. (This would correspond to the format being 32.)
If it isn't a typo, it should be changed, since while 256x256
is just barely big enough for icons for the forseeable future,
it is limiting, and we might want to use image specifications
like this elsewhere.
Using CARDINAL for the property type is a bit suspect, since the type
of the data is really something a lot more specific than
just a bunch of cardinals - its a simple image format.
Using a specific type also is a little more forward looking since we
could later add additional formats, and only require changes
to window managers, and not to clients.
_NET_WM_HANDLED_ICONS
What's the format (and contents?) of this property?
_NET_WM_PING
Is the window field of the event really supposed to be
set to the root window? Leaving it set to the client window
is
A problem through out the spec is that the event mask for sending
events to the root window is not specified. But it isn't possible
to receive ClientMessage events without setting a mask in
XSendEvent. Probably this should be specified as
SubtructureNotify|StructureRedirectMask, as it is for similar
events in the ICCCM.
As noted before, "immediately" should be replaced by
"as soon as possible".
Implementation Notes:
As noted before, interpreting WM_TRANSFIENT_FOR pointing to the
root window to mean transient for the group breaks legacy applications.
The statement "is extremely unlikely to break anything" is just
wrong; and we should not require or even recommend this
behavior. (To repeat the argument as to why it is wrong,
Such hints should either be ignored or be treated to be equivalent to
using "_NET_WM_WINDOW_TYPE_DIALOG" without any explicit
TRANSIENT_FOR properties.
The Window Movement section needs some fixing:
If you move a window with, for insance, NorthEastGravity to (x,y), the
effect is _not_ to move the upper left corner of the frame to
(x,y). Instead, if the size of the window is (width, height)
_excluding the frame_, then the effect is to move the upper left
corner of the frame to (x+width,y).
Also, the list is missing North,South,East, and West gravity.
For "Killing Hung Processes", it needs to be noted that if a window
does not respond to _NET_WM_PING, it does _not_ necesarily mean that
the process is dead, and window managers MUST ask for confirmation
from the user before proceeding to kill the process.
Throughout the document we have "UTF8" - I would suggest writing this
as UTF-8 instead, as this is the way that it is officially written by
the Unicode consortium.
The document needs a references section for at least the Unicode
standard and the ICCCM.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]