[Spice-devel] [6/6] [PATCH xf86-video-qxl] Add horizontal mouse wheel support

Matthew Francis mjay.francis at gmail.com
Wed Oct 25 11:23:52 UTC 2017


Signed-off-by: Matthew Francis <mjay.francis at gmail.com>
---
 src/spiceqxl_inputs.c | 30 ++++++++++++++++++++++++++----
 src/spiceqxl_uinput.c | 24 +++++++++++++++++++-----
 2 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/src/spiceqxl_inputs.c b/src/spiceqxl_inputs.c
index b39eeae..bc96688 100644
--- a/src/spiceqxl_inputs.c
+++ b/src/spiceqxl_inputs.c
@@ -68,7 +68,11 @@ static InputDriverRec XSPICE_KEYBOARD = {
     NULL
 };
 
+#if SPICE_SERVER_VERSION >= 0x000e01 /* 0.14.1 */
+#define BUTTONS 7
+#else
 #define BUTTONS 5
+#endif
 
 typedef struct XSpiceKbd {
     SpiceKbdInstance sin;
@@ -100,6 +104,10 @@ static int xspice_pointer_proc(DeviceIntPtr pDevice, int onoff)
             btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
             btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
             btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
+#if SPICE_SERVER_VERSION >= 0x000e01 /* 0.14.1 */
+            btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
+            btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
+#endif
             axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
             axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
             InitPointerDeviceStruct(pDev, map, BUTTONS,btn_labels,(PtrCtrlProcPtr)NoopDDA,
@@ -272,8 +280,13 @@ typedef struct XSpicePointer {
 
 static XSpicePointer *g_xspice_pointer;
 
+#if SPICE_SERVER_VERSION >= 0x000e01 /* 0.14.1 */
+static void mouse_motion(SpiceMouseInstance *sin, int dx, int dy, int dw, int dz,
+                         uint32_t buttons_state)
+#else
 static void mouse_motion(SpiceMouseInstance *sin, int dx, int dy, int dz,
                          uint32_t buttons_state)
+#endif
 {
     // TODO
 }
@@ -345,13 +358,22 @@ static void tablet_buttons(SpiceTabletInstance *sin,
     spiceqxl_tablet_buttons(buttons_state);
 }
 
-static void tablet_wheel(SpiceTabletInstance* sin, int wheel,
+#if SPICE_SERVER_VERSION >= 0x000e01 /* 0.14.1 */
+static void tablet_wheel(SpiceTabletInstance* sin, int hwheel, int vwheel,
                          uint32_t buttons_state)
+#else
+static void tablet_wheel(SpiceTabletInstance* sin, int vwheel,
+                         uint32_t buttons_state)
+#endif
 {
-    // convert wheel into fourth and fifth buttons
+    // convert wheels into fourth to seventh buttons
     tablet_buttons(sin, buttons_state
-                        | (wheel > 0 ? (1<<4) : 0)
-                        | (wheel < 0 ? (1<<3) : 0));
+#if SPICE_SERVER_VERSION >= 0x000e01 /* 0.14.1 */
+                        | (hwheel > 0 ? (1<<6) : 0)
+                        | (hwheel < 0 ? (1<<5) : 0)
+#endif
+                        | (vwheel > 0 ? (1<<4) : 0)
+                        | (vwheel < 0 ? (1<<3) : 0));
 }
 
 static const SpiceTabletInterface tablet_interface = {
diff --git a/src/spiceqxl_uinput.c b/src/spiceqxl_uinput.c
index 618de3e..257f989 100644
--- a/src/spiceqxl_uinput.c
+++ b/src/spiceqxl_uinput.c
@@ -68,11 +68,25 @@ static void spiceqxl_uinput_read_cb(int fd, int event, void *opaque)
         spiceqxl_tablet_buttons(buttons_state);
         break;
     case EV_REL:
-        button = 1;
-        if (inp_event.value == 1) {
-            button = 1 << 3;
-        } else {
-            button = 1 << 4;
+        switch (inp_event.code) {
+        case REL_HWHEEL:
+            if (inp_event.value == 1) {
+                button = 1 << 5;
+            } else {
+                button = 1 << 6;
+            }
+            break;
+        case REL_WHEEL:
+            if (inp_event.value == 1) {
+                button = 1 << 3;
+            } else {
+                button = 1 << 4;
+            }
+            break;
+        default:
+            fprintf(stderr, "%s: unknown scroll axis %d, ignoring\n", __func__, inp_event.code);
+            return;
+            break;
         }
         buttons_state |= button;
         spiceqxl_tablet_buttons(buttons_state);
-- 
2.7.4



More information about the Spice-devel mailing list