[gnome-control-center] common: Update from gnome-settings-daemon



commit dbe6eb9bbfb169edba678653d57b71e078bac9a4
Author: Rui Matos <tiagomatos gmail com>
Date:   Mon Jun 29 16:12:57 2015 +0200

    common: Update from gnome-settings-daemon

 panels/common/gsd-device-manager-x11.c |   12 +++---
 panels/common/gsd-input-helper.c       |   63 ++++++++++++++++++++++++++------
 panels/common/gsd-input-helper.h       |    5 ++-
 3 files changed, 62 insertions(+), 18 deletions(-)
---
diff --git a/panels/common/gsd-device-manager-x11.c b/panels/common/gsd-device-manager-x11.c
index 89397bd..cee7b2f 100644
--- a/panels/common/gsd-device-manager-x11.c
+++ b/panels/common/gsd-device-manager-x11.c
@@ -109,14 +109,14 @@ add_device (GsdX11DeviceManager *manager,
        if (!device_file)
                return;
 
+       /* Takes ownership of device_file */
+       g_hash_table_insert (manager->gdk_devices, gdk_device, device_file);
+
        if (!g_hash_table_lookup (manager->devices, device_file)) {
                device = create_device (gdk_device, device_file);
                g_hash_table_insert (manager->devices, g_strdup (device_file), device);
                g_signal_emit_by_name (manager, "device-added", device);
        }
-
-       /* Takes ownership of device_file */
-       g_hash_table_insert (manager->gdk_devices, gdk_device, device_file);
 }
 
 static void
@@ -136,13 +136,13 @@ remove_device (GsdX11DeviceManager *manager,
        if (device)
                g_object_ref (device);
 
-       g_hash_table_remove (manager->devices, device_file);
-       g_hash_table_remove (manager->gdk_devices, gdk_device);
-
        if (device) {
                g_signal_emit_by_name (manager, "device-removed", device);
                g_object_unref (device);
        }
+
+       g_hash_table_remove (manager->devices, device_file);
+       g_hash_table_remove (manager->gdk_devices, gdk_device);
 }
 
 static void
diff --git a/panels/common/gsd-input-helper.c b/panels/common/gsd-input-helper.c
index d3cf40c..7ea4061 100644
--- a/panels/common/gsd-input-helper.c
+++ b/panels/common/gsd-input-helper.c
@@ -464,6 +464,29 @@ set_device_enabled (int device_id,
         return TRUE;
 }
 
+gboolean
+set_touchpad_device_enabled (int device_id,
+                             gboolean enabled)
+{
+        Atom prop;
+        guchar value;
+
+        prop = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), "Synaptics Off", False);
+        if (!prop)
+                return FALSE;
+
+        gdk_error_trap_push ();
+
+        value = enabled ? 0 : 1;
+        XIChangeProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
+                          device_id, prop, XA_INTEGER, 8, PropModeReplace, &value, 1);
+
+        if (gdk_error_trap_pop ())
+                return FALSE;
+
+        return TRUE;
+}
+
 static const char *
 custom_command_to_string (CustomCommand command)
 {
@@ -555,35 +578,53 @@ run_custom_command (GdkDevice              *device,
 }
 
 GList *
-get_disabled_devices (GdkDeviceManager *manager)
+get_disabled_touchpads (GdkDeviceManager *manager)
 {
+        GdkDisplay *display;
         XDeviceInfo *device_info;
-        gint n_devices;
+        gint n_devices, act_format, rc;
         guint i;
         GList *ret;
+        Atom prop, act_type;
+        unsigned long  nitems, bytes_after;
+        unsigned char *data;
 
         ret = NULL;
 
-        device_info = XListInputDevices (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &n_devices);
-        if (device_info == NULL)
+        display = gdk_display_get_default ();
+        prop = gdk_x11_get_xatom_by_name ("Synaptics Off");
+
+        gdk_error_trap_push ();
+
+        device_info = XListInputDevices (GDK_DISPLAY_XDISPLAY (display), &n_devices);
+        if (device_info == NULL) {
+                gdk_error_trap_pop_ignored ();
+
                 return ret;
+        }
 
         for (i = 0; i < n_devices; i++) {
-                GdkDevice *device;
+                rc = XIGetProperty (GDK_DISPLAY_XDISPLAY (display),
+                                    device_info[i].id, prop, 0, 1, False,
+                                    XA_INTEGER, &act_type, &act_format,
+                                    &nitems, &bytes_after, &data);
 
-                /* Ignore core devices */
-                if (device_info[i].use == IsXKeyboard ||
-                    device_info[i].use == IsXPointer)
+                if (rc != Success || act_type != XA_INTEGER ||
+                    act_format != 8 || nitems < 1)
                         continue;
 
-                /* Check whether the device is actually available */
-                device = gdk_x11_device_manager_lookup (manager, device_info[i].id);
-                if (device != NULL)
+                if (!(data[0])) {
+                        XFree (data);
                         continue;
+                }
+
+                XFree (data);
 
                 ret = g_list_prepend (ret, GINT_TO_POINTER (device_info[i].id));
         }
 
+        gdk_error_trap_pop_ignored ();
+
         XFreeDeviceList (device_info);
 
         return ret;
diff --git a/panels/common/gsd-input-helper.h b/panels/common/gsd-input-helper.h
index f7f568e..4df8dc3 100644
--- a/panels/common/gsd-input-helper.h
+++ b/panels/common/gsd-input-helper.h
@@ -57,6 +57,9 @@ gboolean  supports_xtest           (void);
 gboolean set_device_enabled       (int device_id,
                                    gboolean enabled);
 
+gboolean  set_touchpad_device_enabled (int device_id,
+                                       gboolean enabled);
+
 gboolean  device_is_touchpad       (XDevice                *xdevice);
 
 gboolean  device_info_is_touchpad    (XDeviceInfo         *device_info);
@@ -77,7 +80,7 @@ gboolean  device_set_property     (XDevice                *xdevice,
 gboolean  run_custom_command      (GdkDevice              *device,
                                    CustomCommand           command);
 
-GList *   get_disabled_devices     (GdkDeviceManager       *manager);
+GList *   get_disabled_touchpads     (GdkDeviceManager       *manager);
 char *    xdevice_get_device_node  (int                     deviceid);
 int       xdevice_get_last_tool_id (int                     deviceid);
 gboolean  xdevice_get_dimensions   (int                     deviceid,


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