summaryrefslogtreecommitdiff
diff options
authorPierre Equoy <pierre.equoy@canonical.com>2022-06-15 12:01:12 +0800
committerPierre Equoy <pierre.equoy@canonical.com>2022-06-15 12:06:08 +0800
commit324babd388cf0086f0e76926c4eae876102c56ce (patch)
treed781a1d602e80e8e346d842c2c4fd6cdd25f7df6
parentf46c63f429b8f2cfaa95a004e38b4bde03b47fbf (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-xbin/touchpad_test.py52
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