314a7ca
From d03bf0d1759d7d113216a0311e794b5adb0845de Mon Sep 17 00:00:00 2001
314a7ca
From: Jason Gerecke <killertofu@gmail.com>
314a7ca
Date: Fri, 9 Jun 2017 16:02:07 -0700
314a7ca
Subject: [PATCH xserver 12/12] xwayland: Implement tablet_tool_wheel for
314a7ca
 scrolling
314a7ca
314a7ca
The 'tablet_tool_wheel' function for tablet scrolling was added back in
314a7ca
8a1defcc634 but left unimplemented. This commit fills in the necessary
314a7ca
details, using the "clicks" count as the number of discrete scroll up/down
314a7ca
events to send.
314a7ca
314a7ca
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
314a7ca
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
314a7ca
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
314a7ca
(cherry picked from commit 7c7a540f1e1d6b5466e1c9aa28476a2d7273d5ed)
314a7ca
---
314a7ca
 hw/xwayland/xwayland-input.c | 24 ++++++++++++++++++++++++
314a7ca
 hw/xwayland/xwayland.h       |  2 ++
314a7ca
 2 files changed, 26 insertions(+)
314a7ca
314a7ca
diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
314a7ca
index a6d7d9356..0cf318623 100644
314a7ca
--- a/hw/xwayland/xwayland-input.c
314a7ca
+++ b/hw/xwayland/xwayland-input.c
314a7ca
@@ -1566,6 +1566,13 @@ static void
314a7ca
 tablet_tool_wheel(void *data, struct zwp_tablet_tool_v2 *tool,
314a7ca
                   wl_fixed_t degrees, int32_t clicks)
314a7ca
 {
314a7ca
+    struct xwl_tablet_tool *xwl_tablet_tool = data;
314a7ca
+    struct xwl_seat *xwl_seat = xwl_tablet_tool->seat;
314a7ca
+
314a7ca
+    if (!xwl_seat->focus_window)
314a7ca
+        return;
314a7ca
+
314a7ca
+    xwl_tablet_tool->wheel_clicks = clicks;
314a7ca
 }
314a7ca
 
314a7ca
 static void
314a7ca
@@ -1677,6 +1684,23 @@ tablet_tool_frame(void *data, struct zwp_tablet_tool_v2 *tool, uint32_t time)
314a7ca
     }
314a7ca
 
314a7ca
     xwl_tablet_tool->buttons_prev = xwl_tablet_tool->buttons_now;
314a7ca
+
314a7ca
+    while (xwl_tablet_tool->wheel_clicks) {
314a7ca
+            if (xwl_tablet_tool->wheel_clicks < 0) {
314a7ca
+                button = 4;
314a7ca
+                xwl_tablet_tool->wheel_clicks++;
314a7ca
+            }
314a7ca
+            else {
314a7ca
+                button = 5;
314a7ca
+                xwl_tablet_tool->wheel_clicks--;
314a7ca
+            }
314a7ca
+
314a7ca
+            QueuePointerEvents(xwl_tablet_tool->xdevice,
314a7ca
+                               ButtonPress, button, 0, &mask);
314a7ca
+            QueuePointerEvents(xwl_tablet_tool->xdevice,
314a7ca
+                               ButtonRelease, button, 0, &mask);
314a7ca
+
314a7ca
+    }
314a7ca
 }
314a7ca
 
314a7ca
 static const struct zwp_tablet_tool_v2_listener tablet_tool_listener = {
314a7ca
diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
314a7ca
index 250564f73..135aa8761 100644
314a7ca
--- a/hw/xwayland/xwayland.h
314a7ca
+++ b/hw/xwayland/xwayland.h
314a7ca
@@ -213,6 +213,8 @@ struct xwl_tablet_tool {
314a7ca
     uint32_t buttons_now,
314a7ca
              buttons_prev;
314a7ca
 
314a7ca
+    int32_t wheel_clicks;
314a7ca
+
314a7ca
     struct xwl_cursor cursor;
314a7ca
 };
314a7ca
 
314a7ca
-- 
314a7ca
2.13.5
314a7ca