[gnome-control-center/gnome-3-20] mouse: Use Gdk instead of Xlib for touchpad capabilities check



commit 97689b586bfb6f5937799101220001e15bd47856
Author: Rui Matos <tiagomatos gmail com>
Date:   Tue Apr 5 17:48:11 2016 +0200

    mouse: Use Gdk instead of Xlib for touchpad capabilities check
    
    Just use X API where needed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=764257

 panels/mouse/cc-mouse-caps-helper.c |   49 +++++++++++++++++------------------
 panels/mouse/cc-mouse-caps-helper.h |    6 +---
 2 files changed, 25 insertions(+), 30 deletions(-)
---
diff --git a/panels/mouse/cc-mouse-caps-helper.c b/panels/mouse/cc-mouse-caps-helper.c
index 125304d..d82bdb2 100644
--- a/panels/mouse/cc-mouse-caps-helper.c
+++ b/panels/mouse/cc-mouse-caps-helper.c
@@ -18,6 +18,10 @@
  * Author: Felipe Borges <feborges redhat com>
  */
 
+#include <gdk/gdkx.h>
+#include <X11/Xatom.h>
+#include <X11/extensions/XInput2.h>
+
 #include "cc-mouse-caps-helper.h"
 
 static gboolean
@@ -25,15 +29,16 @@ touchpad_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
                                  gboolean *have_edge_scrolling,
                                  gboolean *have_tap_to_click)
 {
-       int numdevices, i;
-       XDeviceInfo *devicelist;
+        Display *display;
+       GList *devicelist, *l;
        Atom realtype, prop_scroll_methods, prop_tapping_enabled;
        int realformat;
        unsigned long nitems, bytes_after;
        unsigned char *data;
 
-       prop_scroll_methods = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), "libinput 
Scroll Methods Available", False);
-       prop_tapping_enabled = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), "libinput 
Tapping Enabled", False);
+        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);
        if (!prop_scroll_methods || !prop_tapping_enabled)
                return FALSE;
 
@@ -41,23 +46,19 @@ touchpad_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
        *have_edge_scrolling = FALSE;
        *have_tap_to_click = FALSE;
 
-       devicelist = XListInputDevices (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &numdevices);
-       for (i = 0; i < numdevices; i++) {
-               if (devicelist[i].use != IsXExtensionPointer)
-                       continue;
+        gdk_error_trap_push ();
 
-               gdk_error_trap_push ();
-               XDevice *device = XOpenDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
-                                              devicelist[i].id);
-               if (gdk_error_trap_pop ())
+       devicelist = gdk_seat_get_slaves (gdk_display_get_default_seat (gdk_display_get_default ()),
+                                          GDK_SEAT_CAPABILITY_ALL_POINTING);
+       for (l = devicelist; l != NULL; l = l->next) {
+                GdkDevice *device = l->data;
+                if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD)
                        continue;
 
-               gdk_error_trap_push ();
-
                /* xorg-x11-drv-libinput */
-               if ((XGetDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device, 
prop_scroll_methods,
-                                        0, 2, False, XA_INTEGER, &realtype, &realformat, &nitems,
-                                        &bytes_after, &data) == Success) && (realtype != None)) {
+               if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_scroll_methods,
+                                    0, 2, False, XA_INTEGER, &realtype, &realformat, &nitems,
+                                    &bytes_after, &data) == Success) && (realtype != None)) {
                        /* Property data is booleans for two-finger, edge, on-button scroll available. */
 
                        if (data[0])
@@ -69,20 +70,18 @@ touchpad_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
                        XFree (data);
                }
 
-               if ((XGetDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device, 
prop_tapping_enabled,
-                                       0, 1, False, XA_INTEGER, &realtype, &realformat, &nitems,
-                                       &bytes_after, &data) == Success) && (realtype != None)) {
+               if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_tapping_enabled,
+                                    0, 1, False, XA_INTEGER, &realtype, &realformat, &nitems,
+                                    &bytes_after, &data) == Success) && (realtype != None)) {
                        /* Property data is boolean for tapping enabled. */
                        *have_tap_to_click = TRUE;
 
                        XFree (data);
                }
-
-               gdk_error_trap_pop_ignored ();
-
-               XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device);
        }
-       XFreeDeviceList (devicelist);
+        g_list_free (devicelist);
+
+        gdk_error_trap_pop_ignored ();
 
        return TRUE;
 }
diff --git a/panels/mouse/cc-mouse-caps-helper.h b/panels/mouse/cc-mouse-caps-helper.h
index 51c8314..d116abe 100644
--- a/panels/mouse/cc-mouse-caps-helper.h
+++ b/panels/mouse/cc-mouse-caps-helper.h
@@ -21,11 +21,7 @@
 #ifndef _CC_MOUSE_CAPS_HELPER_H_
 #define _CC_MOUSE_CAPS_HELPER_H_
 
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-
-#include <X11/Xatom.h>
-#include <X11/extensions/XInput.h>
+#include <glib.h>
 
 gboolean cc_touchpad_check_capabilities (gboolean *have_two_finger_scrolling,
                                          gboolean *have_edge_scrolling,


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