[gnome-control-center] common: Update from gnome-settings-daemon
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] common: Update from gnome-settings-daemon
- Date: Mon, 29 Jun 2015 14:23:26 +0000 (UTC)
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]