common: Update from gnome-settings-daemon

This commit is contained in:
Rui Matos 2015-06-29 16:12:57 +02:00
parent 1f4f6ded0f
commit dbe6eb9bbf
3 changed files with 62 additions and 18 deletions

View file

@ -109,14 +109,14 @@ add_device (GsdX11DeviceManager *manager,
if (!device_file) if (!device_file)
return; 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)) { if (!g_hash_table_lookup (manager->devices, device_file)) {
device = create_device (gdk_device, device_file); device = create_device (gdk_device, device_file);
g_hash_table_insert (manager->devices, g_strdup (device_file), device); g_hash_table_insert (manager->devices, g_strdup (device_file), device);
g_signal_emit_by_name (manager, "device-added", 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 static void
@ -136,13 +136,13 @@ remove_device (GsdX11DeviceManager *manager,
if (device) if (device)
g_object_ref (device); g_object_ref (device);
g_hash_table_remove (manager->devices, device_file);
g_hash_table_remove (manager->gdk_devices, gdk_device);
if (device) { if (device) {
g_signal_emit_by_name (manager, "device-removed", device); g_signal_emit_by_name (manager, "device-removed", device);
g_object_unref (device); g_object_unref (device);
} }
g_hash_table_remove (manager->devices, device_file);
g_hash_table_remove (manager->gdk_devices, gdk_device);
} }
static void static void

View file

@ -464,6 +464,29 @@ set_device_enabled (int device_id,
return TRUE; 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 * static const char *
custom_command_to_string (CustomCommand command) custom_command_to_string (CustomCommand command)
{ {
@ -555,35 +578,53 @@ run_custom_command (GdkDevice *device,
} }
GList * GList *
get_disabled_devices (GdkDeviceManager *manager) get_disabled_touchpads (GdkDeviceManager *manager)
{ {
GdkDisplay *display;
XDeviceInfo *device_info; XDeviceInfo *device_info;
gint n_devices; gint n_devices, act_format, rc;
guint i; guint i;
GList *ret; GList *ret;
Atom prop, act_type;
unsigned long nitems, bytes_after;
unsigned char *data;
ret = NULL; ret = NULL;
device_info = XListInputDevices (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &n_devices); display = gdk_display_get_default ();
if (device_info == NULL) 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; return ret;
}
for (i = 0; i < n_devices; i++) { 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 (rc != Success || act_type != XA_INTEGER ||
if (device_info[i].use == IsXKeyboard || act_format != 8 || nitems < 1)
device_info[i].use == IsXPointer)
continue; continue;
/* Check whether the device is actually available */ if (!(data[0])) {
device = gdk_x11_device_manager_lookup (manager, device_info[i].id); XFree (data);
if (device != NULL)
continue; continue;
}
XFree (data);
ret = g_list_prepend (ret, GINT_TO_POINTER (device_info[i].id)); ret = g_list_prepend (ret, GINT_TO_POINTER (device_info[i].id));
} }
gdk_error_trap_pop_ignored ();
XFreeDeviceList (device_info); XFreeDeviceList (device_info);
return ret; return ret;

View file

@ -57,6 +57,9 @@ gboolean supports_xtest (void);
gboolean set_device_enabled (int device_id, gboolean set_device_enabled (int device_id,
gboolean enabled); gboolean enabled);
gboolean set_touchpad_device_enabled (int device_id,
gboolean enabled);
gboolean device_is_touchpad (XDevice *xdevice); gboolean device_is_touchpad (XDevice *xdevice);
gboolean device_info_is_touchpad (XDeviceInfo *device_info); gboolean device_info_is_touchpad (XDeviceInfo *device_info);
@ -77,7 +80,7 @@ gboolean device_set_property (XDevice *xdevice,
gboolean run_custom_command (GdkDevice *device, gboolean run_custom_command (GdkDevice *device,
CustomCommand command); CustomCommand command);
GList * get_disabled_devices (GdkDeviceManager *manager); GList * get_disabled_touchpads (GdkDeviceManager *manager);
char * xdevice_get_device_node (int deviceid); char * xdevice_get_device_node (int deviceid);
int xdevice_get_last_tool_id (int deviceid); int xdevice_get_last_tool_id (int deviceid);
gboolean xdevice_get_dimensions (int deviceid, gboolean xdevice_get_dimensions (int deviceid,