Expose touchpad settings if synaptics is in use
authorDaniel van Vugt <daniel.van.vugt@canonical.com>
Fri, 16 Mar 2018 17:53:10 +0000 (13:53 -0400)
committerJeremy Bicha <jbicha@debian.org>
Mon, 19 Mar 2018 00:14:00 +0000 (00:14 +0000)
Upstream is aggressively pushing for libinput over synaptics. However that
creates a factually incorrect situation where gnome-control-center thinks
there is no touchpad unless you're using the xserver-xorg-input-libinput.
This patch adds support for both drivers, removing the code that would
hide the touchpad settings when xserver-xorg-input-synaptics is in use.

This patch is only useful in the GNOME on Xorg session.
In GNOME on Wayland, libinput is used anyway.

This patch requires a companion patch in mutter which GNOME has rejected.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/37

Gbp-Pq: Name 0004-Expose-touchpad-settings-if-synaptics-is-in-use.patch

panels/mouse/cc-mouse-caps-helper.c
panels/mouse/gnome-mouse-properties.c

index acbe9c94a0647aa40cc133f171e5ecf8d0fade35..108fde235134916bcc29ce938d18d42cfc25e79a 100644 (file)
@@ -37,6 +37,13 @@ touchpad_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
        unsigned long nitems, bytes_after;
        unsigned char *data;
 
+       if (cc_synaptics_check ()) {
+               *have_two_finger_scrolling = TRUE;
+               *have_edge_scrolling = TRUE;
+               *have_tap_to_click = TRUE;
+               return TRUE;
+       }
+
         display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
        prop_scroll_methods = XInternAtom (display, "libinput Scroll Methods Available", False);
        prop_tapping_enabled = XInternAtom (display, "libinput Tapping Enabled", False);
index 4d0920b2d5de48c097d073d2ba8007899d8156ca..7ae7f6fada1b46952231af972d045ff6c6ddec47 100644 (file)
@@ -61,7 +61,6 @@ struct _CcMousePropertiesPrivate
        gboolean have_mouse;
        gboolean have_touchpad;
        gboolean have_touchscreen;
-       gboolean have_synaptics;
 
        gboolean left_handed;
        GtkGesture *left_gesture;
@@ -81,10 +80,6 @@ setup_touchpad_options (CcMousePropertiesPrivate *d)
        gboolean have_edge_scrolling;
        gboolean have_tap_to_click;
 
-       gtk_widget_set_visible (WID ("touchpad-frame"), !d->have_synaptics);
-       if (d->have_synaptics)
-               return;
-
        gtk_widget_set_visible (WID ("touchpad-frame"), d->have_touchpad);
        if (!d->have_touchpad)
                return;
@@ -306,7 +301,10 @@ device_changed (GsdDeviceManager *device_manager,
                GsdDevice *device,
                CcMousePropertiesPrivate *d)
 {
-       d->have_touchpad = touchpad_is_present ();
+       d->have_touchpad = touchpad_is_present () || cc_synaptics_check ();
+       /*                                           ^^^^^^^^^^^^^^^^^^^^^
+        *         Workaround https://gitlab.gnome.org/GNOME/gtk/issues/97
+        */
 
        setup_touchpad_options (d);
 
@@ -387,11 +385,11 @@ cc_mouse_properties_init (CcMouseProperties *object)
                                                 G_CALLBACK (device_changed), d);
 
        d->have_mouse = mouse_is_present ();
-       d->have_touchpad = touchpad_is_present ();
+       d->have_touchpad = touchpad_is_present () || cc_synaptics_check ();
+       /*                                           ^^^^^^^^^^^^^^^^^^^^^
+        *         Workaround https://gitlab.gnome.org/GNOME/gtk/issues/97
+        */
        d->have_touchscreen = touchscreen_is_present ();
-       d->have_synaptics = cc_synaptics_check ();
-       if (d->have_synaptics)
-               g_warning ("Detected synaptics X driver, please migrate to libinput");
 
        d->changing_scroll = FALSE;