common: Update from gnome-settings-daemon

This commit is contained in:
Rui Matos 2015-07-02 15:17:28 +02:00
parent ae11d34c60
commit 912e78d896
2 changed files with 42 additions and 80 deletions

View file

@ -29,6 +29,7 @@
#include <X11/extensions/XInput2.h> #include <X11/extensions/XInput2.h>
#include "gsd-input-helper.h" #include "gsd-input-helper.h"
#include "gsd-device-manager.h"
#define INPUT_DEVICES_SCHEMA "org.gnome.settings-daemon.peripherals.input-devices" #define INPUT_DEVICES_SCHEMA "org.gnome.settings-daemon.peripherals.input-devices"
#define KEY_HOTPLUG_COMMAND "hotplug-command" #define KEY_HOTPLUG_COMMAND "hotplug-command"
@ -163,7 +164,7 @@ supports_xinput2_devices (int *opcode)
} }
gboolean gboolean
device_is_touchpad (XDevice *xdevice) xdevice_is_synaptics (XDevice *xdevice)
{ {
Atom realtype, prop; Atom realtype, prop;
int realformat; int realformat;
@ -191,60 +192,13 @@ device_is_touchpad (XDevice *xdevice)
} }
gboolean gboolean
device_info_is_touchpad (XDeviceInfo *device_info) synaptics_is_present (void)
{
return (device_info->type == XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XI_TOUCHPAD, False));
}
gboolean
device_info_is_touchscreen (XDeviceInfo *device_info)
{
return (device_info->type == XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XI_TOUCHSCREEN, False));
}
gboolean
device_info_is_tablet (XDeviceInfo *device_info)
{
/* Note that this doesn't match Wacom tablets */
return (device_info->type == XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XI_TABLET, False));
}
gboolean
device_info_is_mouse (XDeviceInfo *device_info)
{
return (device_info->type == XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XI_MOUSE, False));
}
gboolean
device_info_is_trackball (XDeviceInfo *device_info)
{
gboolean retval;
retval = (device_info->type == XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XI_TRACKBALL, False));
if (retval == FALSE &&
device_info->name != NULL) {
char *lowercase;
lowercase = g_ascii_strdown (device_info->name, -1);
retval = strstr (lowercase, "trackball") != NULL;
g_free (lowercase);
}
return retval;
}
static gboolean
device_type_is_present (InfoIdentifyFunc info_func,
DeviceIdentifyFunc device_func)
{ {
XDeviceInfo *device_info; XDeviceInfo *device_info;
gint n_devices; gint n_devices;
guint i; guint i;
gboolean retval; gboolean retval;
if (supports_xinput_devices () == FALSE)
return TRUE;
retval = FALSE; retval = FALSE;
device_info = XListInputDevices (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &n_devices); device_info = XListInputDevices (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &n_devices);
@ -254,21 +208,12 @@ device_type_is_present (InfoIdentifyFunc info_func,
for (i = 0; i < n_devices; i++) { for (i = 0; i < n_devices; i++) {
XDevice *device; XDevice *device;
/* Check with the device info first */
retval = (info_func) (&device_info[i]);
if (retval == FALSE)
continue;
/* If we only have an info func, we're done checking */
if (device_func == NULL)
break;
gdk_error_trap_push (); gdk_error_trap_push ();
device = XOpenDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device_info[i].id); device = XOpenDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device_info[i].id);
if (gdk_error_trap_pop () || (device == NULL)) if (gdk_error_trap_pop () || (device == NULL))
continue; continue;
retval = (device_func) (device); retval = xdevice_is_synaptics (device);
xdevice_close (device); xdevice_close (device);
if (retval) if (retval)
break; break;
@ -278,32 +223,54 @@ device_type_is_present (InfoIdentifyFunc info_func,
return retval; return retval;
} }
static gboolean
device_type_is_present (GsdDeviceType type)
{
GList *l = gsd_device_manager_list_devices (gsd_device_manager_get (),
type);
g_list_free (l);
return l != NULL;
}
gboolean gboolean
touchscreen_is_present (void) touchscreen_is_present (void)
{ {
return device_type_is_present (device_info_is_touchscreen, return device_type_is_present (GSD_DEVICE_TYPE_TOUCHSCREEN);
NULL);
} }
gboolean gboolean
touchpad_is_present (void) touchpad_is_present (void)
{ {
return device_type_is_present (device_info_is_touchpad, return device_type_is_present (GSD_DEVICE_TYPE_TOUCHPAD);
device_is_touchpad);
} }
gboolean gboolean
mouse_is_present (void) mouse_is_present (void)
{ {
return device_type_is_present (device_info_is_mouse, return device_type_is_present (GSD_DEVICE_TYPE_MOUSE);
NULL);
} }
gboolean gboolean
trackball_is_present (void) trackball_is_present (void)
{ {
return device_type_is_present (device_info_is_trackball, gboolean retval;
NULL); GList *l, *mice = gsd_device_manager_list_devices (gsd_device_manager_get (),
GSD_DEVICE_TYPE_MOUSE);
if (mice == NULL)
return FALSE;
for (l = mice; l != NULL; l = l->next) {
gchar *lowercase;
const gchar *name = gsd_device_get_name (l->data);
if (!name)
continue;
lowercase = g_ascii_strdown (name, -1);
retval = strstr (lowercase, "trackball") != NULL;
g_free (lowercase);
}
g_list_free (mice);
return retval;
} }
char * char *
@ -465,8 +432,8 @@ set_device_enabled (int device_id,
} }
gboolean gboolean
set_touchpad_device_enabled (int device_id, set_synaptics_device_enabled (int device_id,
gboolean enabled) gboolean enabled)
{ {
Atom prop; Atom prop;
guchar value; guchar value;
@ -578,7 +545,7 @@ run_custom_command (GdkDevice *device,
} }
GList * GList *
get_disabled_touchpads (GdkDeviceManager *manager) get_disabled_synaptics (void)
{ {
GdkDisplay *display; GdkDisplay *display;
XDeviceInfo *device_info; XDeviceInfo *device_info;

View file

@ -57,17 +57,12 @@ 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 set_synaptics_device_enabled (int device_id,
gboolean enabled); gboolean enabled);
gboolean device_is_touchpad (XDevice *xdevice); gboolean xdevice_is_synaptics (XDevice *xdevice);
gboolean device_info_is_touchpad (XDeviceInfo *device_info);
gboolean device_info_is_touchscreen (XDeviceInfo *device_info);
gboolean device_info_is_tablet (XDeviceInfo *device_info);
gboolean device_info_is_mouse (XDeviceInfo *device_info);
gboolean device_info_is_trackball (XDeviceInfo *device_info);
gboolean synaptics_is_present (void);
gboolean touchpad_is_present (void); gboolean touchpad_is_present (void);
gboolean touchscreen_is_present (void); gboolean touchscreen_is_present (void);
gboolean mouse_is_present (void); gboolean mouse_is_present (void);
@ -80,7 +75,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_touchpads (GdkDeviceManager *manager); GList * get_disabled_synaptics (void);
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,