summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2016-05-12 16:21:30 -0500
committerDerek Foreman <derekf@osg.samsung.com>2016-05-12 16:22:35 -0500
commit923fa535b573f23909337c5eba7d1f11c37cb9dc (patch)
tree71c51e9ab5e896c767c792ff36f072be6eba7c02
parente80d8d9a7134fdc00fc2ea791205eee5d208e175 (diff)
downloadefl-devs/derekf/scroll.tar.gz
ecore_drm: Handle wheel scrolling separately from finger scrollingdevs/derekf/scroll
Wheels are discrete and scroll in clicks, fingers are continuous and scroll in fractional pixels. This change causes wheel based scrolling to be returned in "clicks" instead of "degrees" - allowing us to roll a single menu item with a click. It also will allow us to reduce the speed of two finger scrolling without messing up the speed of wheel scrolling.
-rw-r--r--src/lib/ecore_drm/ecore_drm_evdev.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_evdev.c b/src/lib/ecore_drm/ecore_drm_evdev.c
index b389e5c86d..3b851b5566 100644
--- a/src/lib/ecore_drm/ecore_drm_evdev.c
+++ b/src/lib/ecore_drm/ecore_drm_evdev.c
@@ -585,6 +585,22 @@ _device_handle_button(struct libinput_device *device, struct libinput_event_poin
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
}
+#if LIBINPUT_HIGHER_08
+static double
+_event_scroll_get(struct libinput_event_pointer *pe, enum libinput_pointer_axis axis)
+{
+ switch (libinput_event_pointer_get_axis_source(pe))
+ {
+ case LIBINPUT_POINTER_AXIS_SOURCE_WHEEL:
+ return libinput_event_pointer_get_axis_value_discrete(pe, axis);
+ case LIBINPUT_POINTER_AXIS_SOURCE_FINGER:
+ case LIBINPUT_POINTER_AXIS_SOURCE_CONTINUOUS:
+ return libinput_event_pointer_get_axis_value(pe, axis);
+ }
+ return 0.0;
+}
+#endif
+
static void
_device_handle_axis(struct libinput_device *device, struct libinput_event_pointer *event)
{
@@ -618,13 +634,13 @@ _device_handle_axis(struct libinput_device *device, struct libinput_event_pointe
#if LIBINPUT_HIGHER_08
axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL;
if (libinput_event_pointer_has_axis(event, axis))
- ev->z = libinput_event_pointer_get_axis_value(event, axis);
+ ev->z = _event_scroll_get(event, axis);
axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL;
if (libinput_event_pointer_has_axis(event, axis))
{
ev->direction = 1;
- ev->z = libinput_event_pointer_get_axis_value(event, axis);
+ ev->z = _event_scroll_get(event, axis);
}
#else
axis = libinput_event_pointer_get_axis(event);