On Fri, Jan 08, 2016 at 02:43:10PM +1000, Peter Hutterer wrote: > ping - can we merge this now?
Just pushed the protocol patch: 2b236af..c5356e9 master -> master If no one objects, I intend to push the weston implementation patches as well within a couple of days. FWIW, the weston APIs are not stable, and if they need to change, nothing stops us from doing that later. Jonas > > On Tue, Dec 08, 2015 at 11:11:07AM +1000, Peter Hutterer wrote: > > The frame event groups separate pointer events together. The primary > > use-case > > for this at the moment is diagonal scrolling - a vertical/horizontal scroll > > event can be grouped together to calculate the correct motion vector. > > Frame events group all wl_pointer events. An example sequence of motion > > events > > followed by a diagonal scroll followed by a button event is: > > wl_pointer.motion > > wl_pointer.frame > > wl_pointer.motion > > wl_pointer.frame > > wl_pointer.axis > > wl_pointer.axis > > wl_pointer.frame > > wl_pointer.button > > wl_pointer.frame > > > > In the future, other extensions may insert additional information about an > > event into the frame. For example, an extension may add information about > > the > > physical device that generated an event into the frame. For this reason, > > enter/leave events are grouped by a frame event too. > > > > The axis_source event determines how an axis event was generated. That > > enables > > clients to judge when to use kinetic scrolling. Only one axis_source event > > is > > allowed per frame and applies to all events in this frame. > > > > The axis_stop event notifies a client about the termination of a scroll > > sequence, likewise needed to calculate kinetic scrolling parameters. > > Multiple axis_stop events within the same frame indicate that scrolling has > > stopped in all these axis at the same time. > > > > The axis_discrete event provides the wheel click count. Previously the axis > > value was some hardcoded number (10), with the discrete steps this enables a > > client to differ between line-based scrolling on a mouse wheel and smooth > > scrolling with a touchpad. The axis_discrete event carries the axis > > information and the discrete value and can occur at any time in the frame > > provided it is ordered before the matching axis event. Specifically, this > > sequence is valid: > > > > wl_pointer.axis_source > > wl_pointer.axis_discrete (vert) > > wl_pointer.axis_discrete (horiz) > > wl_pointer.axis (horiz) > > wl_pointer.axis (vert) > > wl_pointer.frame > > > > Enter and leave event also trigger wl_pointer.frame events, where possible > > the > > compositor should group leave and subsequent enter into the same frame. This > > indicates to the client that the pointer has moved between surfaces and may > > allow a client to shortcut code otherwise triggerd by the leave or enter > > events. > > > > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> > > Reviewed-by: Carlos Garnacho <carl...@gnome.org> > > Reviewed-by: Jonas Ådahl <jad...@gmail.com> > > Reviewed-by: Daniel Stone <dani...@collabora.com> > > Reviewed-by: Bryce Harrington <br...@osg.samsung.com> > > --- > > Changes to v7: > > - remove notion of latching, now that we have the axis value the discrete > > event can occur any time before the coupled axis event, not just > > immediately before. > > - add documentation for enter/leave event frame grouping. > > > > Note: I left the previous rev-by in here, pls let me know where it doesn't > > apply anymore. > > > > protocol/wayland.xml | 150 > > +++++++++++++++++++++++++++++++++++++++++++++++++-- > > 1 file changed, 147 insertions(+), 3 deletions(-) > > > > diff --git a/protocol/wayland.xml b/protocol/wayland.xml > > index df8ed19..8a62190 100644 > > --- a/protocol/wayland.xml > > +++ b/protocol/wayland.xml > > @@ -1482,7 +1482,7 @@ > > > > </interface> > > > > - <interface name="wl_pointer" version="3"> > > + <interface name="wl_pointer" version="5"> > > <description summary="pointer input device"> > > The wl_pointer interface represents one or more input devices, > > such as mice, which control the pointer location and pointer_focus > > @@ -1649,9 +1649,153 @@ > > </description> > > </request> > > > > + <!-- Version 5 additions --> > > + > > + <event name="frame" since="5"> > > + <description summary="end of a pointer event sequence"> > > + Indicates the end of a set of events that logically belong together. > > + A client is expected to accumulate the data in all events within the > > + frame before proceeding. > > + > > + All wl_pointer events before a wl_pointer.frame event belong > > + logically together. For example, in a diagonal scroll motion the > > + compositor will send an optional wl_pointer.axis_source event, two > > + wl_pointer.axis events (horizontal and vertical) and finally a > > + wl_pointer.frame event. The client may use this information to > > + calculate a diagonal vector for scrolling. > > + > > + When multiple wl_pointer.axis events occur within the same frame, > > + the motion vector is the combined motion of all events. > > + When a wl_pointer.axis and a wl_pointer.axis_stop event occur within > > + the same frame, this indicates that axis movement in one axis has > > + stopped but continues in the other axis. > > + When multiple wl_pointer.axis_stop events occur within in the same > > + frame, this indicates that these axes stopped in the same instance. > > + > > + A wl_pointer.frame event is sent for every logical event group, > > + even if the group only contains a single wl_pointer event. > > + Specifically, a client may get a sequence: motion, frame, button, > > + frame, axis, frame, axis_stop, frame. > > + > > + The wl_pointer.enter and wl_pointer.leave events are logical events > > + generated by the compositor and not the hardware. These events are > > + also grouped by a wl_pointer.frame. When a pointer moves from one > > + surface to the another, a compositor should group the > > + wl_pointer.leave event within the same wl_pointer.frame. > > + However, a client must not rely on wl_pointer.leave and > > + wl_pointer.enter being in the same wl_pointer.frame. > > + Compositor-specific policies may require the wl_pointer.leave and > > + wl_pointer.enter event being split across multiple wl_pointer.frame > > + groups. > > + </description> > > + </event> > > + > > + <enum name="axis_source"> > > + <description summary="axis source types"> > > + Describes the source types for axis events. This indicates to the > > + client how an axis event was physically generated; a client may > > + adjust the user interface accordingly. For example, scroll events > > + from a "finger" source may be in a smooth coordinate space with > > + kinetic scrolling whereas a "wheel" source may be in discrete steps > > + of a number of lines. > > + > > + The "continuous" axis source is a device generating events in a > > + continuous coordinate space, but using something other than a > > + finger. One example for this source is button-based scrolling where > > + the vertical motion of a device is converted to scroll events while > > + a button is held down. > > + </description> > > + <entry name="wheel" value="0" summary="A physical wheel" /> > > + <entry name="finger" value="1" summary="Finger on a touch surface" /> > > + <entry name="continuous" value="2" summary="Continuous coordinate > > space"/> > > + </enum> > > + > > + <event name="axis_source" since="5"> > > + <description summary="axis source event"> > > + Source information for scroll and other axes. > > + > > + This event does not occur on its own. It is sent before a > > + wl_pointer.frame event and carries the source information for > > + all events within that frame. > > + > > + The source specifies how this event was generated. If the source is > > + wl_pointer.axis_source.finger, a wl_pointer.axis_stop event will be > > + sent when the user lifts the finger off the device. > > + > > + If the source is wl_pointer axis_source.wheel or > > + wl_pointer.axis_source.continuous, a wl_pointer.axis_stop event may > > + or may not be sent. Whether a compositor sends a axis_stop event > > + for these sources is hardware-specific and implementation-dependent; > > + clients must not rely on receiving an axis_stop event for these > > + scroll sources and should treat scroll sequences from these scroll > > + sources as unterminated by default. > > + > > + This event is optional. If the source is unknown for a particular > > + axis event sequence, no event is sent. > > + Only one wl_pointer.axis_source event is permitted per frame. > > + > > + The order of wl_pointer.axis_discrete and wl_pointer.axis_source is > > + not guaranteed. > > + </description> > > + <arg name="axis_source" type="uint" enum="axis_source"/> > > + </event> > > + > > + <event name="axis_stop" since="5"> > > + <description summary="axis stop event"> > > + Stop notification for scroll and other axes. > > + > > + For some wl_pointer.axis_source types, a wl_pointer.axis_stop event > > + is sent to notify a client that the axis sequence has terminated. > > + This enables the client to implement kinetic scrolling. > > + See the wl_pointer.axis_source documentation for information on when > > + this event may be generated. > > + > > + Any wl_pointer.axis events with the same axis_source after this > > + event should be considered as the start of a new axis motion. > > + > > + The timestamp is to be interpreted identical to the timestamp in the > > + wl_pointer.axis event. The timestamp value may be the same as a > > + preceeding wl_pointer.axis event. > > + </description> > > + <arg name="time" type="uint" summary="timestamp with millisecond > > granularity"/> > > + <arg name="axis" type="uint" enum="axis" summary="the axis stopped > > with this event"/> > > + </event> > > + > > + <event name="axis_discrete" since="5"> > > + <description summary="axis click event"> > > + Discrete step information for scroll and other axes. > > + > > + This event carries the axis value of the wl_pointer.axis event in > > + discrete steps (e.g. mouse wheel clicks). > > + > > + This event does not occur on its own, it is coupled with a > > + wl_pointer.axis event that represents this axis value on a > > + continuous scale. The protocol guarantees that each axis_discrete > > + event is always followed by exactly one axis event with the same > > + axis number within the same wl_pointer.frame. Note that the protocol > > + allows for other events to occur between the axis_discrete and > > + its coupled axis event, including other axis_discrete or axis > > + events. > > + > > + This event is optional; continuous scrolling devices > > + like two-finger scrolling on touchpads do not have discrete > > + steps and do not generate this event. > > + > > + The discrete value carries the directional information. e.g. a value > > + of -2 is two steps towards the negative direction of this axis. > > + > > + The axis number is identical to the axis number in the associate > > + axis event. > > + > > + The order of wl_pointer.axis_discrete and wl_pointer.axis_source is > > + not guaranteed. > > + </description> > > + <arg name="axis" type="uint" enum="axis" /> > > + <arg name="discrete" type="int"/> > > + </event> > > </interface> > > > > - <interface name="wl_keyboard" version="4"> > > + <interface name="wl_keyboard" version="5"> > > <description summary="keyboard input device"> > > The wl_keyboard interface represents one or more keyboards > > associated with a seat. > > @@ -1765,7 +1909,7 @@ > > </event> > > </interface> > > > > - <interface name="wl_touch" version="3"> > > + <interface name="wl_touch" version="5"> > > <description summary="touchscreen input device"> > > The wl_touch interface represents a touchscreen > > associated with a seat. > > -- > > 2.5.0 > > > > _______________________________________________ > > wayland-devel mailing list > > wayland-devel@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel > > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel