From: Daniel van Vugt Date: Fri, 16 Mar 2018 13:53:10 -0400 Subject: Expose touchpad settings if synaptics is in use 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 --- panels/mouse/cc-mouse-caps-helper.c | 7 +++++++ panels/mouse/cc-mouse-panel.c | 16 +++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/panels/mouse/cc-mouse-caps-helper.c b/panels/mouse/cc-mouse-caps-helper.c index 6658f41..12aafdb 100644 --- a/panels/mouse/cc-mouse-caps-helper.c +++ b/panels/mouse/cc-mouse-caps-helper.c @@ -38,6 +38,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; + } + gdisplay = gdk_display_get_default (); display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); prop_scroll_methods = XInternAtom (display, "libinput Scroll Methods Available", False); diff --git a/panels/mouse/cc-mouse-panel.c b/panels/mouse/cc-mouse-panel.c index cdd28ab..6d1269a 100644 --- a/panels/mouse/cc-mouse-panel.c +++ b/panels/mouse/cc-mouse-panel.c @@ -64,7 +64,6 @@ struct _CcMousePanel gboolean have_mouse; gboolean have_touchpad; gboolean have_touchscreen; - gboolean have_synaptics; gboolean left_handed; GtkGesture *left_gesture; @@ -82,7 +81,7 @@ setup_touchpad_options (CcMousePanel *self) gboolean have_edge_scrolling; gboolean have_tap_to_click; - if (self->have_synaptics || !self->have_touchpad) { + if (!self->have_touchpad) { gtk_widget_hide (GTK_WIDGET (self->touchpad_group)); return; } @@ -308,7 +307,10 @@ setup_dialog (CcMousePanel *self) static void device_changed (CcMousePanel *self) { - self->have_touchpad = touchpad_is_present (); + self->have_touchpad = touchpad_is_present () || cc_synaptics_check (); + /* ^^^^^^^^^^^^^^^^^^^^^ + * Workaround https://gitlab.gnome.org/GNOME/gtk/issues/97 + */ setup_touchpad_options (self); @@ -363,11 +365,11 @@ cc_mouse_panel_init (CcMousePanel *self) G_CALLBACK (device_changed), self, G_CONNECT_SWAPPED); self->have_mouse = mouse_is_present (); - self->have_touchpad = touchpad_is_present (); + self->have_touchpad = touchpad_is_present () || cc_synaptics_check (); + /* ^^^^^^^^^^^^^^^^^^^^^ + * Workaround https://gitlab.gnome.org/GNOME/gtk/issues/97 + */ self->have_touchscreen = touchscreen_is_present (); - self->have_synaptics = cc_synaptics_check (); - if (self->have_synaptics) - g_warning ("Detected synaptics X driver, please migrate to libinput"); setup_dialog (self); }