[PATCH wayland v4] protocol: Define further the behavior of input on the presence of grabs
Jonas Ã…dahl
jadahl at gmail.com
Thu Jan 17 15:56:46 UTC 2019
On Thu, Jan 17, 2019 at 05:27:44PM +0200, Pekka Paalanen wrote:
> Hi all,
>
> I noticed that this patch did not land yet. I added to CC everyone who
> commented on the v3 I believe.
>
> Is this still relevant?
I'd say it's good clarifications, and making it possible to "leave"
touch points is still more correct than "up":ing or "cancel":ing them.
Just one minor comment about wording below.
>
>
> Thanks,
> pq
>
> On Fri, 27 Jan 2017 18:46:58 +0100
> Carlos Garnacho <carlosg at gnome.org> wrote:
>
> > The leave events in the respective device interfaces has been further
> > documented so those can convey the necessary info when input is being
> > redirected out of their currently focused surface.
> >
> > Only wl_touch is missing something semantically similar, a wl_touch.leave
> > event has been added so the touch interface can cope with such input
> > redirection situations on individual touchpoints.
> >
> > Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
> > Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
> > ---
> >
> > Changes since v3: Applied wording improvements from Yong Bakos, added
> > the clarification suggested by Daniel, and made wl_touch.leave part of
> > wl_touch.frame as suggested by Jonas (and that was the intended behavior).
> >
> > Also went ahead and bumped wl_seat version again to 7, since this is not
> > 1.13 material.
> >
> > protocol/wayland.xml | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++--
> > 1 file changed, 66 insertions(+), 2 deletions(-)
> >
> > diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> > index 29b63be..7be23ec 100644
> > --- a/protocol/wayland.xml
> > +++ b/protocol/wayland.xml
> > @@ -1651,7 +1651,7 @@
> > </request>
> > </interface>
> >
> > - <interface name="wl_seat" version="6">
> > + <interface name="wl_seat" version="7">
> > <description summary="group of input devices">
> > A seat is a group of keyboards, pointer and touch devices. This
> > object is published as a global during start up, or when such a
> > @@ -1839,6 +1839,23 @@
> >
> > The leave notification is sent before the enter notification
> > for the new focus.
> > +
> > + While a pointer will not usually leave a surface while a button
> > + is pressed, there are circumstances where this event may occur,
> > + such as:
> > +
> > + - When a popup is shown by this or another client.
> > + - When a drag-and-drop operation is initiated from this or
> > + any other surface.
> > + - Other compositor-specific grabs, like pointer gestures.
> > +
> > + In these situations, a leave event will be emitted with no
> > + paired button release event on this surface, and clients must
> > + undo their internal state related to the ongoing button presses.
> > +
> > + Clients must either receive a release or a leave event in a
> > + timely manner, and strictly before all other input events from
> > + that seat.
Clients can't "must" receive anything, a compositor either will or it
wont. Also is the "all other input evets from the seat" intentional? Or
should it be "all other pointer events from that seat"?
Jonas
> > </description>
> > <arg name="serial" type="uint" summary="serial number of the leave event"/>
> > <arg name="surface" type="object" interface="wl_surface" summary="surface left by the pointer"/>
> > @@ -1880,6 +1897,10 @@
> > kernel's event code list. All other button codes above 0xFFFF are
> > currently undefined but may be used in future versions of this
> > protocol.
> > +
> > + Clients should note that pressed/released events may not be paired;
> > + in some cases, a leave event will be sent in place of a released event.
> > + See wl_pointer.leave for more details.
> > </description>
> > <arg name="serial" type="uint" summary="serial number of the button event"/>
> > <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
> > @@ -2127,6 +2148,17 @@
> >
> > The leave notification is sent before the enter notification
> > for the new focus.
> > +
> > + There may be circumstances that force the keyboard focus to be taken
> > + away from a surface while there are pressed keys, for example:
> > +
> > + - When a popup is shown by this or another client.
> > + - When a drag-and-drop operation is initiated from this or
> > + any other surface.
> > +
> > + In these situations, a leave event will be emitted with no paired
> > + key release events on this surface, and clients must undo their
> > + internal state related to the ongoing key presses.
> > </description>
> > <arg name="serial" type="uint" summary="serial number of the leave event"/>
> > <arg name="surface" type="object" interface="wl_surface" summary="surface that lost keyboard focus"/>
> > @@ -2145,6 +2177,10 @@
> > A key was pressed or released.
> > The time argument is a timestamp with millisecond
> > granularity, with an undefined base.
> > +
> > + Clients should note that pressed/released events may not be paired;
> > + in some cases, a leave event will be sent in place of a released event.
> > + See wl_keyboard.leave for more details.
> > </description>
> > <arg name="serial" type="uint" summary="serial number of the key event"/>
> > <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
> > @@ -2194,7 +2230,7 @@
> > </event>
> > </interface>
> >
> > - <interface name="wl_touch" version="6">
> > + <interface name="wl_touch" version="7">
> > <description summary="touchscreen input device">
> > The wl_touch interface represents a touchscreen
> > associated with a seat.
> > @@ -2226,6 +2262,10 @@
> > The touch point has disappeared. No further events will be sent for
> > this touch point and the touch point's ID is released and may be
> > reused in a future touch down event.
> > +
> > + Clients should note that down/up events may not be paired;
> > + in some cases, a leave event will be sent in place of a wl_touch.up
> > + event. See wl_touch.leave for more details.
> > </description>
> > <arg name="serial" type="uint" summary="serial number of the touch up event"/>
> > <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
> > @@ -2336,6 +2376,30 @@
> > <arg name="id" type="int" summary="the unique ID of this touch point"/>
> > <arg name="orientation" type="fixed" summary="angle between major axis and positive surface y-axis in degrees"/>
> > </event>
> > +
> > + <!-- Version 7 additions -->
> > +
> > + <event name="leave" since="7">
> > + <description summary="leave event">
> > + Notification that this touch point is no longer focused on a
> > + certain surface. This event does not occur on its own. It is
> > + sent before a wl_touch.frame event.
> > +
> > + Note that, because touch points are always implicitly grabbed,
> > + this event will only be emitted when the touch point is taken
> > + away from this surface through explicit means, for example:
> > +
> > + - When a popup is shown by this or another client.
> > + - When a drag-and-drop operation is initiated from this or
> > + any other surface.
> > +
> > + This event will only be emitted on objects of version 6 or
> > + higher, older clients will receive a wl_touch.up event per
> > + remaining touchpoint instead.
> > + </description>
> > + <arg name="surface" type="object" interface="wl_surface"/>
> > + <arg name="id" type="int" summary="the unique ID of this touch point"/>
> > + </event>
> > </interface>
> >
> > <interface name="wl_output" version="3">
>
More information about the wayland-devel
mailing list