mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
wayland: Implement wl_pointer.axis_source/axis_stop/axis_frame emission
As per the spec. wl_pointer.axis_source determines the current source of scroll events, wl_pointer.axis_stop determines when there's no further scroll events on any axis (Which Clutter sends as dx/dy=0 events). wl_pointer.axis_frame marks the end of a series of axis_* events. v2: Updated to v4 of the protocol spec by Peter Hutterer <peter.hutterer@who-t.net> v3: Update to use Clutter API
This commit is contained in:
parent
a5d2555196
commit
74be2e9f94
@ -494,10 +494,27 @@ handle_scroll_event (MetaWaylandPointer *pointer,
|
|||||||
{
|
{
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
wl_fixed_t x_value = 0, y_value = 0;
|
wl_fixed_t x_value = 0, y_value = 0;
|
||||||
|
enum wl_pointer_axis_source source = -1;
|
||||||
|
|
||||||
if (clutter_event_is_pointer_emulated (event))
|
if (clutter_event_is_pointer_emulated (event))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
switch (event->scroll.scroll_source)
|
||||||
|
{
|
||||||
|
case CLUTTER_SCROLL_SOURCE_WHEEL:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_WHEEL;
|
||||||
|
break;
|
||||||
|
case CLUTTER_SCROLL_SOURCE_FINGER:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_FINGER;
|
||||||
|
break;
|
||||||
|
case CLUTTER_SCROLL_SOURCE_CONTINUOUS:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_CONTINUOUS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_WHEEL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch (clutter_event_get_scroll_direction (event))
|
switch (clutter_event_get_scroll_direction (event))
|
||||||
{
|
{
|
||||||
case CLUTTER_SCROLL_UP:
|
case CLUTTER_SCROLL_UP:
|
||||||
@ -537,12 +554,31 @@ handle_scroll_event (MetaWaylandPointer *pointer,
|
|||||||
{
|
{
|
||||||
wl_resource_for_each (resource, &pointer->focus_client->pointer_resources)
|
wl_resource_for_each (resource, &pointer->focus_client->pointer_resources)
|
||||||
{
|
{
|
||||||
|
if (wl_resource_get_version (resource) >= WL_POINTER_AXIS_SOURCE_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_source (resource, source);
|
||||||
|
|
||||||
if (x_value)
|
if (x_value)
|
||||||
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
||||||
WL_POINTER_AXIS_HORIZONTAL_SCROLL, x_value);
|
WL_POINTER_AXIS_HORIZONTAL_SCROLL, x_value);
|
||||||
|
|
||||||
|
if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_HORIZONTAL) &&
|
||||||
|
wl_resource_get_version (resource) >= WL_POINTER_AXIS_STOP_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_stop (resource,
|
||||||
|
clutter_event_get_time (event),
|
||||||
|
WL_POINTER_AXIS_HORIZONTAL_SCROLL);
|
||||||
|
|
||||||
if (y_value)
|
if (y_value)
|
||||||
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
||||||
WL_POINTER_AXIS_VERTICAL_SCROLL, y_value);
|
WL_POINTER_AXIS_VERTICAL_SCROLL, y_value);
|
||||||
|
|
||||||
|
if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_VERTICAL) &&
|
||||||
|
wl_resource_get_version (resource) >= WL_POINTER_AXIS_STOP_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_stop (resource,
|
||||||
|
clutter_event_get_time (event),
|
||||||
|
WL_POINTER_AXIS_VERTICAL_SCROLL);
|
||||||
|
|
||||||
|
if (wl_resource_get_version (resource) >= WL_POINTER_AXIS_SOURCE_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_frame (resource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
#define META_WL_DATA_DEVICE_MANAGER_VERSION 2
|
#define META_WL_DATA_DEVICE_MANAGER_VERSION 2
|
||||||
#define META_XDG_SHELL_VERSION 1
|
#define META_XDG_SHELL_VERSION 1
|
||||||
#define META_WL_SHELL_VERSION 1
|
#define META_WL_SHELL_VERSION 1
|
||||||
#define META_WL_SEAT_VERSION 4
|
#define META_WL_SEAT_VERSION 5
|
||||||
#define META_WL_OUTPUT_VERSION 2
|
#define META_WL_OUTPUT_VERSION 2
|
||||||
#define META_XSERVER_VERSION 1
|
#define META_XSERVER_VERSION 1
|
||||||
#define META_GTK_SHELL_VERSION 2
|
#define META_GTK_SHELL_VERSION 2
|
||||||
|
Loading…
Reference in New Issue
Block a user