[comp.windows.x] Mtg about wm issues at X Conference

ellis@cadillac.siemens.COM (Ellis Cohen) (01/05/88)

There will be a meeting to discuss window manger related issues
from 9:30am to Noon on Wed Jan 13th at the X Conference.
Members of the DEC, SUN and Siemens window manager group will
be there.  You are also invited to attend if you are actively
developing a window manager, or have been actively thinking about these
issues and can contribute to the discussion.

We would like to limit attendance to at most a dozen people so that we
can accomplish as much as possible in the limited time available.  If you
would like to attend, contact me by e-mail or phone, leting me know why
you'd like to attend, and I'll let you know the location.

A list of issues is included below, culled from a variety of sources,
including questions and comments in the various mailing lists.  I've
tried to be both neutral and complete.

At the meeting, we hopefully will find that we are in agreement about
each issue -- where we are not, we probably will simply clarify our
positions and list pros and cons.

The results of the meeting should be the basis for further discussion at
the WM BOF at the X Conference and/or in the appropriate mailing list.

Among the eventual results should be
  (1) a guide for clients -- indicating how they should write code
      to work with different window manangers (or none at all).
  (2) a guide for wm developers -- indicating what they ought to do
      to keep client programs happy.

If there are issues you think should be added (whether or not you
will be attending the meeting), send me mail, and I'll include them. 


  Ellis Cohen

  Siemens RTL Tiled Window Project
  105 College Rd East
  Princeton NJ 08540
  (609) 734-6524

  ellis%cadillac.siemens.com@princeton.edu (arpa)
  princeton!siemens!ellis (uucp)

------------------------------------------------------------

  Philosophical
  -------------

How much should properties be changed?  How hard should we strive
to stay compatible with existing programs?

Should we consider issues that are important to a class of window
managers, even if they are not universal?

Should we consider changing any property names -- e.g.
WM_NAME => WM_TITLE, WM_ICON_NAME => WM_ICON_TITLE,
WM_CLASS => WM_RESOURCE_NAMES?

  About WM_CLASS
  --------------

Is WM_CLASS meant to be write-at-most-once?  If not, what should be the
effect of changing it?

Should we recommend a way for clients to generate WM_CLASS (such as, in
Unix, using a RESOURCE_NAME environment variable or argv[0])?

Should we recommend a way for clients to automatically generate WM_NAME
from WM_CLASS and/or WM_CLIENT_MACHINE if WM_NAME is not explicitly
provided?

  About WM_HINTS
  --------------

Should WM_HINTS initial_state only be initial?  If so, what if a wm
crashes and is restarted after the client iconizes it?  If not, how 
can/should wm's respond to changes in it?

Should other fields be added that some wm's might find useful -- e.g.
expensive_to_redraw, expensive_to_resize, keep_visible,
accept_wm_messages, extensions_used?

Should icon-related properties be pulled out of WM_HINTS and moved to a
separate WM_ICON_HINTS property?

  About Icons
  -----------

How should wm's respond to changes in the icon-related fields of
WM_HINTS?

Should a can_ahrink_to_iconify field be added to WM_HINTS?  It would
suggest that a window manager can iconize a window by simply shrinking it
to icon size (possibly removing the usual window decorations).

Clarify which proerties are relevant to client_icon_windows: Size hints?
Non-icon-related fields of WM_HINTS?

  About Transient Windows
  -----------------------

Should other fields be added to the WM_TRANSIENT_FOR property?
  - map_together:  When TRUE, mapping or unmapping the application window
      should have the same effect on the transient window.  (Consider
      semantics if can_shrink_to-iconify is included.)
  - transient_location:  Initial desired location relative to application
      window.
  - transient_gravity:  How the wm should move the transient window when
      the application window is moved or resized.
  - application_inactive:  Indicates that no output is sent and no input
      accepted in the application window while the transient window is
      mapped.

Clarify which properties are relevant to transient windows:  Size hints?
WM_CLASS?  WM_NAME?  Non-icon-related fields of WM_HINTS?

  About Window Sizes
  ------------------

Should WM_ZOOM_HINTS (and ZoomState) be eliminated?  Should a
WM_RANGE_HINTS property be added instead (or added to WM_NORMAL_HINTS).
It would hold a list of height and width ranges that are desired.  Could
it allow a specific height range to be associated with a specific width
range, and vice versa?

Clarify the relation of min_width and min_height to width_inc and
height_inc.  How should the window size be reported by the wm to the user
when the _inc's are provided (and != 1)?

How should a client request a size change?  By doing first an XConfigure
followed by setting WM_NORMAL_HINTS?  If so, should we
encourage/discourage special meaning from being attached (by wm's) to
just doing one or the other?

How should a wm respond to to changes in the min or max size in
WM_NORMAL_HINTS if the current window size is no longeer within the range
indicated?  Alternately, how should a client change a window's min or max
size?

Should a new WM_USER_GEOMETRY property be added, that would be set by
the wm when the user specified a desired change in the window geometry
(this may be different from the actual XConfigure done by the wm if
it is enforcing layout constraints)?  How would an application use this
information?

  About Colormaps
  ---------------

Clarify how a window manager should deal with colormaps.

  About Input Focus
  -----------------

Clarify the ways & reasons a client might set input focus and how a wm
ought to respond.

Clarify how an application with multiple top-level windows should move
the pointer/focus from one to the other.  WarpPointer followed optionally
by a SetInputFocus?

  About WM_MANAGER
  ----------------

Should a wm place a WM_MANAGER property on the desktop (root or
pseudo-root) it manages?  It would contain an id of a window that would
probably not be mapped and not be in the wm's save set.  The wm could
attach properties to it readable by its clients, and clients could send
messages (including specialized wm-specific protocols) to the wm via this
window.

Should the WM_ICON_SIZE property be moved to this window?

Is there a need for a standard WM_PROPERTIES property to be placed
on the WM_MANAGER window?  It would contain fields indicating whether or
not the wm
    - sends messages or synthetic events (see below)
    - reparents/constrains regular/transient/icon windows
    - notifies when configure is denied
    - supports client icons
    - supports transient gravity
    - etc.

Is there a need for a WM_PROTOCOLS property to be placed on the
WM_MANAGER window?  It would hold a list of atoms identifying
protocols or conventions  that the window manager supports for
interacting with clients.

  About WM/Client Communication
  -----------------------------

Should a special class of ClientMessages be defined for wm/client
communications?

When a reparenting wm reconfigures a window but does not resize it
(i.e. restacks or moves the parent), should the client be notified?
By a synthetic ConfigureNotify event?  By a WM_MOVED message?

When a ConfigureRequest is effectively denied by a wm (no change takes
place), should the client be notified?  By a synthetic
ConfigureNotify event?  By a synthetic error event?  By a
WM_CONFIGURE_DENIED message?  If a message, might the wm also supply
hints about a request that could succeed?  Should a client that needs to
wait for such a notification time out, assume that any wm either
does the configure or denies it, or use a timeout based upon fiedl in
WM_PROPERTIES?

When a reparenting wm unmaps the parent window, should it also unmap the
client window?  Send it a synthetic UnmapNotify event?  Send it a
WM_UNAMP message?  (Consider case where it is backed_up, or where
can_shrink_to_iconify is used).

Should a wm notify top-level window clients when it comes up?
Via a synthetic PropertyNotify event?  Via a WM_INSTALL message?

Should a wm notify a client that a user has requested that its geometry
be changed?  Via a synthetic PropertyNotify event?  Via a
WM_USER_GEOMETRY message?

Should there be a standard WM_REQUEST_KILL message that a wm can use to
request that a client kill itself?  How might a client respond to such a
message?  Via WM_KILL_REFUSE, WM_KILL_ACCEPT, or WM_KILL_WAIT messages
(send via the WM_MANAGER window)?
How about a WM_WILL_KILL message indicating that the client will be
killed by a certain time?

  Relating to Xlib
  ----------------

Should XSetStandardProperties be eliminated or changed, for example, to
accept a resource class and name?  Should it set WM_CLIENT_MACHINE?  If a
resource class is not provided, should XSetStandardProperties set it to
the window name?  If a resource name is not provided, should
XSetStandardProperties set it based on a RESOURCE_NAME environment
variable and/or argv[0]?  If a window name is not provided, should
XSetStandardProperties set WM_NAME based on other properties?

How to best support cases where a window manager uses a window other than
the root as the desktop?  A PARENT_DESKTOP environment variable?
Extending the DISPLAY environment variable?  Should there be a new Xlib
DefaultParentWindow macro, and should clients be encouraged to use this
instead of DefaultRootWindow in XCreateSimpleWindow?

Do other functions need to be added to Xlib encapsulating some of the
common but complex sequences of operations a client needs to do?