ICCCM breakage, IconicState, and desktops


The spec currently says this about implementing multiple desktops:

 The second option is to keep all managed windows as children of the
 root window and unmap the frames of those which are not on the
 current desktop. This puts the clients in an undefined ICCCM state,
 since they are unviewable, but not iconic. In practice, this seems to
 cause no problems and the ICCCM compliant alternative to iconify all
 clients on non-current desktops (without showing their icons) is
 clearly not acceptable.

The ICCCM explicitly and clearly contradicts this in section 4.1.4. It
specifies that IconicState must always correspond to mapped/unmapped
on the client window, and that the client window must be unmapped and
set to IconicState whenever it becomes unviewable.

The ICCCM description of IconicState is "whatever that means for this
window manager." So I see no reason it can't be used for windows not
on the current desktop, shaded windows, etc.

The problem with what the WM spec says is that clients can become
unviewable with no notification - the ICCCM ensures that you always
get UnmapNotify if you become unviewable. So say you wanted to stop
using CPU when not viewable, which would make sense for some clients,
you can't really implement that.

We seem to have declared IconicState to mean "minimized" vs. all the
other ways of taking a client offscreen (shaded, desktop, etc.)
and to me this breaks the ICCCM in a way that was really not needed
and doesn't make much sense.

Can someone shed some light on what the rationale was here?

The only issue I see with setting IconicState for not-on-desktop or
shaded windows is that when restarting the WM it will minimize those
windows, typically.

To me it would make more sense if the spec left IconicState as-is in
the ICCCM, and specified its use for any case where the client is
unviewable. Then add a _MINIMIZED property to _NET_WM_STATE which
would be used to track MINIMIZED as a special kind of iconification,
alongside _SHADED which is already in _NET_WM_STATE.

On WM restart, the _NET_WM_STATE and _NET_WM_DESKTOP could be used to
interpret the initial value of WM_STATE, i.e. indicating whether the
initial IconicState means minimized/shaded/etc.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]