summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2015-12-17 11:41:12 +0100
committerBastien Nocera <hadess@hadess.net>2015-12-17 11:41:40 +0100
commit570cc8a2561728bdf4ec6c91064c618debc3e5d4 (patch)
tree7bb8ccdd0b8dec900ab755bd5492f8141b88c3eb
parent1be6b1db115bcc3cfd91934334f69a30d41ce9ab (diff)
downloadgnome-settings-daemon-570cc8a2561728bdf4ec6c91064c618debc3e5d4.tar.gz
mouse: Force 2-finger scroll by default if available
When the touchpad is two-finger scrolling capable, always enable it. When the touchpad only supports edge scrolling (usually older devices, and usually smaller devices), allow disabling the edge scrolling. This requires a newer gsettings-desktop-schemas as the scroll-method key was removed, and the edge-scroll-enabled key added. See https://bugzilla.gnome.org/show_bug.cgi?id=759304 https://bugzilla.gnome.org/show_bug.cgi?id=759559
-rw-r--r--plugins/mouse/gsd-mouse-manager.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/plugins/mouse/gsd-mouse-manager.c b/plugins/mouse/gsd-mouse-manager.c
index 4ea3f215..f2f90ba4 100644
--- a/plugins/mouse/gsd-mouse-manager.c
+++ b/plugins/mouse/gsd-mouse-manager.c
@@ -67,7 +67,7 @@
#define KEY_SPEED "speed"
/* Touchpad settings */
-#define KEY_SCROLL_METHOD "scroll-method"
+#define KEY_EDGE_SCROLLING_ENABLED "edge-scrolling-enabled"
#define KEY_TAP_TO_CLICK "tap-to-click"
#define KEY_SEND_EVENTS "send-events"
#define KEY_NATURAL_SCROLL_ENABLED "natural-scroll"
@@ -750,9 +750,9 @@ set_horiz_scroll (GdkDevice *device,
}
static void
-set_scroll_method (GsdMouseManager *manager,
- GdkDevice *device,
- GsdTouchpadScrollMethod method)
+set_edge_scrolling_enabled (GsdMouseManager *manager,
+ GdkDevice *device,
+ gboolean enabled)
{
int rc;
XDevice *xdevice;
@@ -760,6 +760,7 @@ set_scroll_method (GsdMouseManager *manager,
int act_format;
unsigned long nitems, bytes_after;
unsigned char *data;
+ GsdTouchpadScrollMethod method;
if (xdevice_is_libinput (gdk_x11_device_get_id (device)))
return;
@@ -788,14 +789,18 @@ set_scroll_method (GsdMouseManager *manager,
XA_INTEGER, &act_type, &act_format, &nitems,
&bytes_after, &data);
if (rc == Success && act_type != None) {
- if (!(data[3]) && method == GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING) {
- g_warning ("Two finger scroll is not supported by %s", gdk_device_get_name (device));
- method = GSD_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING;
- }
+ /* Two-finger scrolling is supported, so enable it */
+ if (data[3])
+ method = GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING;
XFree (data);
}
+ if (enabled && method != GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING)
+ method = GSD_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING;
+ else
+ method = GSD_TOUCHPAD_SCROLL_METHOD_DISABLED;
+
rc = XGetDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice,
prop_edge, 0, 1, False,
XA_INTEGER, &act_type, &act_format, &nitems,
@@ -1146,7 +1151,7 @@ set_mouse_settings (GsdMouseManager *manager,
set_motion (manager, device);
set_tap_to_click (device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK), touchpad_left_handed);
- set_scroll_method (manager, device, g_settings_get_enum (manager->priv->touchpad_settings, KEY_SCROLL_METHOD));
+ set_edge_scrolling_enabled (manager, device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_EDGE_SCROLLING_ENABLED));
set_horiz_scroll (device, TRUE);
set_natural_scroll (manager, device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_NATURAL_SCROLL_ENABLED));
@@ -1216,8 +1221,8 @@ touchpad_callback (GSettings *settings,
mouse_left_handed = g_settings_get_boolean (manager->priv->mouse_settings, KEY_LEFT_HANDED);
set_tap_to_click (device, g_settings_get_boolean (settings, key),
get_touchpad_handedness (manager, mouse_left_handed));
- } else if (g_str_equal (key, KEY_SCROLL_METHOD)) {
- set_scroll_method (manager, device, g_settings_get_enum (settings, key));
+ } else if (g_str_equal (key, KEY_EDGE_SCROLLING_ENABLED)) {
+ set_edge_scrolling_enabled (manager, device, g_settings_get_boolean (settings, key));
set_horiz_scroll (device, TRUE);
} else if (g_str_equal (key, KEY_SPEED)) {
set_motion (manager, device);