[mutter] Add tag-and-drag setting from libinput into mutter



commit 12792f99a06ebccbee9895e3a7325f3ee47133a4
Author: freeroot <free r gmx fr>
Date:   Fri Aug 18 01:00:10 2017 +0200

    Add tag-and-drag setting from libinput into mutter
    
    The problem is that libinput offers the possibility to not enabled
    dragging when tap-to-click is enabled but mutter doesn't. For people who
    have a sensitive touchpad and who like tap-to-click option, dragging is
    launched even when you don't want it : for example, when you select a
    folder, most of the time the folder is dragging whereas just selected or
    when you want to select some lines of a text file, several lines are
    moved as a cut-paste which is not expected and erase datas.
    
    To fix it, you need to have the possibility to desactivate the drag
    option when you use tap-to-click in mutter. Because it's already a
    specification of libinput, it remains to add it to mutter.
    Implementation with X11 is added too.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=775755

 src/backends/meta-input-settings-private.h       |    3 ++
 src/backends/meta-input-settings.c               |   33 ++++++++++++++++++++++
 src/backends/native/meta-input-settings-native.c |   19 ++++++++++++
 src/backends/x11/meta-input-settings-x11.c       |   12 ++++++++
 4 files changed, 67 insertions(+), 0 deletions(-)
---
diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h
index 7a661e8..605690e 100644
--- a/src/backends/meta-input-settings-private.h
+++ b/src/backends/meta-input-settings-private.h
@@ -54,6 +54,9 @@ struct _MetaInputSettingsClass
   void (* set_tap_enabled)   (MetaInputSettings  *settings,
                               ClutterInputDevice *device,
                               gboolean            enabled);
+  void (* set_tap_and_drag_enabled) (MetaInputSettings  *settings,
+                                     ClutterInputDevice *device,
+                                     gboolean            enabled);
   void (* set_disable_while_typing) (MetaInputSettings  *settings,
                                      ClutterInputDevice *device,
                                      gboolean            enabled);
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
index 2bbc8c1..83c06ad 100644
--- a/src/backends/meta-input-settings.c
+++ b/src/backends/meta-input-settings.c
@@ -529,6 +529,36 @@ update_touchpad_tap_enabled (MetaInputSettings  *input_settings,
 }
 
 static void
+update_touchpad_tap_and_drag_enabled (MetaInputSettings  *input_settings,
+                                      ClutterInputDevice *device)
+{
+  MetaInputSettingsClass *input_settings_class;
+  MetaInputSettingsPrivate *priv;
+  gboolean enabled;
+
+  if (device &&
+      clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
+    return;
+
+  priv = meta_input_settings_get_instance_private (input_settings);
+  input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
+  enabled = g_settings_get_boolean (priv->touchpad_settings, "tap-and-drag");
+
+  if (device)
+    {
+      settings_device_set_bool_setting (input_settings, device,
+                                        input_settings_class->set_tap_and_drag_enabled,
+                                        enabled);
+    }
+  else
+    {
+      settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
+                                 input_settings_class->set_tap_and_drag_enabled,
+                                 enabled);
+    }
+}
+
+static void
 update_touchpad_edge_scroll (MetaInputSettings *input_settings,
                              ClutterInputDevice *device)
 {
@@ -1039,6 +1069,8 @@ meta_input_settings_changed_cb (GSettings  *settings,
         update_device_natural_scroll (input_settings, NULL);
       else if (strcmp (key, "tap-to-click") == 0)
         update_touchpad_tap_enabled (input_settings, NULL);
+      else if (strcmp (key, "tap-and_drag") == 0)
+        update_touchpad_tap_and_drag_enabled (input_settings, NULL);
       else if (strcmp(key, "disable-while-typing") == 0)
         update_touchpad_disable_while_typing (input_settings, NULL);
       else if (strcmp (key, "send-events") == 0)
@@ -1338,6 +1370,7 @@ apply_device_settings (MetaInputSettings  *input_settings,
 
   update_touchpad_left_handed (input_settings, device);
   update_touchpad_tap_enabled (input_settings, device);
+  update_touchpad_tap_and_drag_enabled (input_settings, device);
   update_touchpad_disable_while_typing (input_settings, device);
   update_touchpad_send_events (input_settings, device);
   update_touchpad_two_finger_scroll (input_settings, device);
diff --git a/src/backends/native/meta-input-settings-native.c 
b/src/backends/native/meta-input-settings-native.c
index f0d7057..8a62bb3 100644
--- a/src/backends/native/meta-input-settings-native.c
+++ b/src/backends/native/meta-input-settings-native.c
@@ -122,6 +122,24 @@ meta_input_settings_native_set_tap_enabled (MetaInputSettings  *settings,
 }
 
 static void
+meta_input_settings_native_set_tap_and_drag_enabled (MetaInputSettings  *settings,
+                                                     ClutterInputDevice *device,
+                                                     gboolean            enabled)
+{
+  struct libinput_device *libinput_device;
+
+  libinput_device = clutter_evdev_input_device_get_libinput_device (device);
+  if (!libinput_device)
+    return;
+
+  if (libinput_device_config_tap_get_finger_count (libinput_device) > 0)
+    libinput_device_config_tap_set_drag_enabled (libinput_device,
+                                                 enabled ?
+                                                 LIBINPUT_CONFIG_DRAG_ENABLED :
+                                                 LIBINPUT_CONFIG_DRAG_DISABLED);
+}
+
+static void
 meta_input_settings_native_set_disable_while_typing (MetaInputSettings  *settings,
                                                      ClutterInputDevice *device,
                                                      gboolean            enabled)
@@ -530,6 +548,7 @@ meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
   input_settings_class->set_speed = meta_input_settings_native_set_speed;
   input_settings_class->set_left_handed = meta_input_settings_native_set_left_handed;
   input_settings_class->set_tap_enabled = meta_input_settings_native_set_tap_enabled;
+  input_settings_class->set_tap_and_drag_enabled = meta_input_settings_native_set_tap_and_drag_enabled;
   input_settings_class->set_invert_scroll = meta_input_settings_native_set_invert_scroll;
   input_settings_class->set_edge_scroll = meta_input_settings_native_set_edge_scroll;
   input_settings_class->set_two_finger_scroll = meta_input_settings_native_set_two_finger_scroll;
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
index 636f98a..c833296 100644
--- a/src/backends/x11/meta-input-settings-x11.c
+++ b/src/backends/x11/meta-input-settings-x11.c
@@ -233,6 +233,17 @@ meta_input_settings_x11_set_tap_enabled (MetaInputSettings  *settings,
 }
 
 static void
+meta_input_settings_x11_set_tap_and_drag_enabled (MetaInputSettings  *settings,
+                                                  ClutterInputDevice *device,
+                                                  gboolean            enabled)
+{
+  guchar value = (enabled) ? 1 : 0;
+
+  change_property (device, "libinput TappingDrag Enabled",
+                   XA_INTEGER, 8, &value, 1);
+}
+
+static void
 meta_input_settings_x11_set_invert_scroll (MetaInputSettings  *settings,
                                            ClutterInputDevice *device,
                                            gboolean            inverted)
@@ -779,6 +790,7 @@ meta_input_settings_x11_class_init (MetaInputSettingsX11Class *klass)
   input_settings_class->set_speed = meta_input_settings_x11_set_speed;
   input_settings_class->set_left_handed = meta_input_settings_x11_set_left_handed;
   input_settings_class->set_tap_enabled = meta_input_settings_x11_set_tap_enabled;
+  input_settings_class->set_tap_and_drag_enabled = meta_input_settings_x11_set_tap_and_drag_enabled;
   input_settings_class->set_disable_while_typing = meta_input_settings_x11_set_disable_while_typing;
   input_settings_class->set_invert_scroll = meta_input_settings_x11_set_invert_scroll;
   input_settings_class->set_edge_scroll = meta_input_settings_x11_set_edge_scroll;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]