Sub-surface protocol
Pekka Paalanen
ppaalanen at gmail.com
Fri Dec 7 00:31:20 PST 2012
On Wed, 05 Dec 2012 15:43:18 -0200
Tiago Vignatti <tiago.vignatti at linux.intel.com> wrote:
> Hi,
>
> On 12/05/2012 12:32 PM, Pekka Paalanen wrote:
> >
> > I have not even thought about sub-surfaces' implications to input
> > handling or the shell yet. Sub-surfaces probably need to be able to
> > receive input. The shell perhaps needs a bounding box of the set of
> > surfaces to be able to pick an initial position for the window, etc.
>
> indeed. On my "less intrusive" draft of subsurface, I've first started
> brainstorming the input focus behavior [0]. That's quite useful for the
> video player example that wants some kind of input control or a dialog
> stick window that might not. So we'll need a way to tell which
> subsurface gets the input focus. The way I did was enumerating methods
> for the subsurface, like "transient" for passing away the focus and
> "child" for a regular surface that wants it.. not a nice name, I agree.
>
> That being said, I'm afraid that the input focus together with the
> configuration, positing and stacking, belongs more to the shells than
> the compositor itself, which should only control the attach -> damage ->
> commit. Just the concept of "windows" itself doesn't sound that good for
> a simple shell for instance, so at the moment it's being hard for me
> draw the picture why this is not an extension of the shell_surface.
> That's why I started drafting from this other direction.
Well, my first attack on the input management would be to do nothing
special. :-)
I.e. a sub-surface and a parent surface are all just wl_surfaces, and
would not differ at all from a "window in a single wl_surface" case. On
the input side, the client would just deal with a set of surfaces
instead of one surface. It would get leave and enter events as usual,
when the pointer or kbd focus changes from sub-surface to another. If a
sub-surface wants or does not want input, the client sets the input
region accordingly. The client (toolkit) just needs to be prepared to
combine input events from the sub-surfaces, and e.g. direct keyboard
events to the "whole window" first, rather than starting with just the
one wl_surface.
On the compositor side, I would not have to modify the input code at
all.
Weston's core would not need to deal much with "composite windows", i.e.
a collection of a parent wl_surface and a set of sub-surfaces. It only
needs to maintain the associations, and maybe offer helpers like the
bounding box computation. Therefore it should not really need the
concept of a window. Window management is the shell's job, and for
instance the force-move binding is a shell feature, which can look up
and move the whole composite window, when the user tries to move a
sub-surface.
So, instead of trying to be smart about input foci between the
sub-surfaces and the parent, I would just punt that to the clients'
input handling.
I hope that works also in practice.
> Anyways, nice write-up and summary Pekka. Thanks for bringing this up!
Thank you!
> [0] http://cgit.freedesktop.org/~vignatti/wayland/commit/?h=xwm-client-OLD
> http://cgit.freedesktop.org/~vignatti/weston/commit/?h=xwm-client-OLD
I see, right.
Thanks,
pq
More information about the wayland-devel
mailing list