[mutter/gnome-3-22] meta-input-settings-x11: Don't try setting unavailable scroll methods



commit 5c46094d67f2e5cdafe6edcfd8c0d5894a2dafc6
Author: Rui Matos <tiagomatos gmail com>
Date:   Mon Nov 14 17:33:11 2016 +0100

    meta-input-settings-x11: Don't try setting unavailable scroll methods
    
    Since doing so causes BadValue X errors.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=771744

 src/backends/x11/meta-input-settings-x11.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
index 332997b..eccc68a 100644
--- a/src/backends/x11/meta-input-settings-x11.c
+++ b/src/backends/x11/meta-input-settings-x11.c
@@ -222,19 +222,27 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings            *settings,
                                          gboolean                      edge_scroll_enabled)
 {
   guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
-  guchar *current;
+  guchar *current = NULL;
+  guchar *available = NULL;
+
+  available = get_property (device, "libinput Scroll Methods Available",
+                            XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
+  if (!available || !available[SCROLL_METHOD_FIELD_EDGE])
+    goto out;
 
   current = get_property (device, "libinput Scroll Method Enabled",
                           XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
   if (!current)
-    return;
+    goto out;
 
   memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
 
   values[SCROLL_METHOD_FIELD_EDGE] = !!edge_scroll_enabled;
   change_property (device, "libinput Scroll Method Enabled",
                    XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
+ out:
   meta_XFree (current);
+  meta_XFree (available);
 }
 
 static void
@@ -243,19 +251,27 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings            *set
                                                gboolean                      two_finger_scroll_enabled)
 {
   guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
-  guchar *current;
+  guchar *current = NULL;
+  guchar *available = NULL;
+
+  available = get_property (device, "libinput Scroll Methods Available",
+                            XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
+  if (!available || !available[SCROLL_METHOD_FIELD_2FG])
+    goto out;
 
   current = get_property (device, "libinput Scroll Method Enabled",
                           XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
   if (!current)
-    return;
+    goto out;
 
   memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
 
   values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled;
   change_property (device, "libinput Scroll Method Enabled",
                    XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
+ out:
   meta_XFree (current);
+  meta_XFree (available);
 }
 
 static void


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