pad: switch the REL_WHEEL direction to match dials with scroll wheels
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 20 Jun 2024 22:39:10 +0000 (08:39 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Fri, 21 Jun 2024 00:02:07 +0000 (10:02 +1000)
REL_WHEEL sends -1 for "down" and +1 for "up", so let's make sure we
keep that correct here too.

Part-of: <https://gitlab.freedesktop.org/libinput/libinput/-/merge_requests/1021>

src/evdev-tablet-pad.c
test/test-pad.c

index 97826c18efe27736d64fac5a42bc87d5072c2af9..3aa92a4a4c694ee236a10dd2f7dfa4c7964fa8c1 100644 (file)
@@ -111,7 +111,7 @@ pad_process_relative(struct pad_dispatch *pad,
                break;
        case REL_WHEEL:
                if (!pad->dials.has_hires_dial) {
-                       pad->dials.dial1 = e->value * 120;
+                       pad->dials.dial1 = -1 * e->value * 120;
                        pad->changed_axes |= PAD_AXIS_DIAL1;
                        pad_set_status(pad, PAD_AXES_UPDATED);
                }
@@ -124,7 +124,7 @@ pad_process_relative(struct pad_dispatch *pad,
                }
                break;
        case REL_WHEEL_HI_RES:
-               pad->dials.dial1 = e->value;
+               pad->dials.dial1 = -1 * e->value;
                pad->changed_axes |= PAD_AXIS_DIAL1;
                pad_set_status(pad, PAD_AXES_UPDATED);
                break;
index c840310bb79c57beb57ab041f7c60d66c1875064..59e8b312fd02fe326f8ed768d27ec3045fa7e123 100644 (file)
@@ -526,7 +526,16 @@ START_TEST(pad_dial_low_res)
                struct libinput_event_tablet_pad *pev = litest_is_pad_dial_event(ev, 0);
 
                double v120 = libinput_event_tablet_pad_get_dial_delta_v120(pev);
-               ck_assert_double_eq(v120, 120.0 * direction);
+               switch (code) {
+               case REL_WHEEL: /* inverted */
+                       ck_assert_double_eq(v120, -120.0 * direction);
+                       break;
+               case REL_DIAL:
+                       ck_assert_double_eq(v120, 120.0 * direction);
+                       break;
+               default:
+                       ck_abort();
+               }
                libinput_event_destroy(ev);
        }
 }
@@ -556,7 +565,7 @@ START_TEST(pad_dial_hi_res)
                struct libinput_event_tablet_pad *pev = litest_is_pad_dial_event(ev, 0);
 
                double v120 = libinput_event_tablet_pad_get_dial_delta_v120(pev);
-               ck_assert_double_eq(v120, increment);
+               ck_assert_double_eq(v120, -increment); /* REL_WHEEL is inverted */
                libinput_event_destroy(ev);
        }
 }