Weston : ideas about xdg_sell, and implementation for a taskbar
Bill Spitzak
spitzak at gmail.com
Thu Jan 30 17:48:56 PST 2014
Jasper St. Pierre wrote:
> Hiding windows should not have any influence over the client, as many
> desktop environments, including Weston, want to show live previews for
> minimized or hidden windows in alt-tab or Expose-alikes.
>
> Also, it matches user expectations. If the user clicks minimize on a
> window, they want it hidden, and they mean it, not get bested with
> "surprise! You tried to hide me but I resist by mapping my subsurfaces
> elsewhere!"
The problem is that it makes window management very complicated, or
limiting. This is why no modern applications use overlapping windows,
instead doing their own tiled window layout inside one big window. They
cannot get the window system to overlay windows correctly except for
trivial temporary popups.
A simple problem is a floating window shared by two main windows. Some
parts of the compositor want to know that the floating window belongs to
at least one main window (for instance to not show it in a toolbar). But
the client does not want it to vanish when that window is closed, yet it
should vanish when both windows are closed.
This will require the client to tell the compositor that both of the
main windows are parents, thus giving rise to a Directed Acyclic Graph
of parents. I believe reliably updating this structure from the client
is enormously more complex and error-prone than a simple tree. Also I
suspect there are desirable window manipulations that cannot be
described by a DAG and thus even more complex api must be provided in
Wayland.
Kristin has proposed that nothing be sent from the client to the
compositor, I think he is worried about the api bloat this may cause.
I feel that an intermediate solution that limits the data to a tree,
since only a "set parent" api is needed to manage it. When a client
requests that a window be raised or hidden then this tree causes
children to do the same. But this is only done after a request from the
client, so the client can first rearrange or delete the tree in order to
get the behavior it wants. The main reason for this is that I think it
is necessary so wayland clients can be displayed remotely on non-wayland
systems that support such trees, otherwise remote display may be very
blinky when users raise windows.
Both of these however require that all decisions about window
relationships be left to the client. There is no way around this, no
matter how much you want to pretend otherwise.
A client that fails to hide the window after the request and a timeout
can get force-hidden, if you think this is a problem. But you cannot use
misbehaving clients as a reason for designing an api, since there are a
billion other ways a client can misbehave and you are not stopping them
all with this one api.
More information about the wayland-devel
mailing list