diff options
author | Pierre Equoy <pierre.equoy@canonical.com> | 2022-06-15 12:01:12 +0800 |
---|---|---|
committer | Pierre Equoy <pierre.equoy@canonical.com> | 2022-06-15 12:06:08 +0800 |
commit | 324babd388cf0086f0e76926c4eae876102c56ce (patch) | |
tree | d781a1d602e80e8e346d842c2c4fd6cdd25f7df6 | |
parent | f46c63f429b8f2cfaa95a004e38b4bde03b47fbf (diff) |
Fix:touchpad_test.py: Use smooth scrolling events to determine direction
"scroll-method" was removed back in 2015[1] and replaced with "edge-scrolling-enabled" and "two-finger-scrolling-enabled" keys (both of them boolean values)[2]. Moreover, Wayland and recent versions of X (libinput) dispatch a GDK_SCROLL_SMOOTH event instead of the old GDK_SCROLL_[UP|DOWN|LEFT|RIGHT]. However, using this, the script has to compute the direction using the deltas provided by event.get_scroll_deltas(). This works on default GNOME settings ("Natural Scrolling" enabled). LP: #1969170 [1] https://github.com/GNOME/gsettings-desktop-schemas/commit/656aca6942c8417ddb3216063b97b7a1336076c9 [2] https://github.com/GNOME/gsettings-desktop-schemas/commit/d9dfe56726e49d3a31354466c3fffa2aaedf5a5e
-rwxr-xr-x | bin/touchpad_test.py | 52 |
1 files changed, 40 insertions, 12 deletions
diff --git a/bin/touchpad_test.py b/bin/touchpad_test.py index b859730..83940ec 100755 --- a/bin/touchpad_test.py +++ b/bin/touchpad_test.py @@ -3,6 +3,7 @@ import gi import sys import gettext +from time import sleep from gettext import gettext as _ gi.require_version('Gdk', '3.0') @@ -124,21 +125,33 @@ class GtkScroller(object): def run(self): # Save touchpad settings. - self.saved_scroll_method = self.touchpad_settings.get_string( - "scroll-method") + self.saved_edge_scrolling_enabled = self.touchpad_settings.get_boolean( + "edge-scrolling-enabled") + self.saved_two_finger_enabled = self.touchpad_settings.get_boolean( + "two-finger-scrolling-enabled") # Set touchpad settings. if self.edge_scroll: - self.touchpad_settings.set_string( - "scroll-method", "edge-scrolling") - + self.touchpad_settings.set_boolean( + "edge-scrolling-enabled", True) + self.touchpad_settings.set_boolean( + "two-finger-scrolling-enabled", False) + else: + self.touchpad_settings.set_boolean( + "two-finger-scrolling-enabled", True) + self.touchpad_settings.set_boolean( + "edge-scrolling-enabled", False) Gtk.main() def quit(self): # Reset touchpad settings. - self.touchpad_settings.set_string( - "scroll-method", self.saved_scroll_method) - + self.touchpad_settings.set_boolean( + "two-finger-scrolling-enabled", self.saved_two_finger_enabled) + # GNOME does not like when both settings are set at the same time, so + # waiting a bit. + sleep(0.1) + self.touchpad_settings.set_boolean( + "edge-scrolling-enabled", self.saved_edge_scrolling_enabled) Gtk.main_quit() def show_text(self, text, widget=None): @@ -161,10 +174,25 @@ class GtkScroller(object): def on_scroll(self, window, event): for direction in self.directions: - if direction.value == event.direction: - self.found_direction(direction) - break - + scroll_delta, delta_x, delta_y = event.get_scroll_deltas() + if scroll_delta: + event_direction = None + # Arbitrarily using 0.8, which requires a little bit of hand + # movement on the touchpads used for testing. + # Note that the directions are based on the default natural + # scrolling settings in GNOME settings. + if delta_x > 0.8: + event_direction = Direction("left") + elif delta_x < -0.8: + event_direction = Direction("right") + if delta_y > 0.8: + event_direction = Direction("up") + elif delta_y < -0.8: + event_direction = Direction("down") + if event_direction: + if direction.value == event_direction.value: + self.found_direction(direction) + break return True |