summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-02-13 11:58:52 +0100
committerCarlos Garnacho <carlosg@gnome.org>2017-03-13 19:34:10 +0100
commite081bb3921aefdf773ee4f490c56139d467c3757 (patch)
treea9f990eb40e4ca1be1914c16e492e5aad3be2a86
parentad24967d78981826fe196f542c0c7fce5e0b1ce4 (diff)
downloadmutter-e081bb3921aefdf773ee4f490c56139d467c3757.tar.gz
clutter: Add clutter_input_device_is_grouped call/vfunc
This will be used to query grouped devices (eg. tablets and pads) https://bugzilla.gnome.org/show_bug.cgi?id=779986
-rw-r--r--clutter/clutter/clutter-device-manager-private.h3
-rw-r--r--clutter/clutter/clutter-input-device.c10
-rw-r--r--clutter/clutter/clutter-input-device.h3
-rw-r--r--clutter/clutter/evdev/clutter-input-device-evdev.c14
-rw-r--r--clutter/clutter/x11/clutter-input-device-xi2.c8
5 files changed, 38 insertions, 0 deletions
diff --git a/clutter/clutter/clutter-device-manager-private.h b/clutter/clutter/clutter-device-manager-private.h
index 37b2eec6c..57423c41a 100644
--- a/clutter/clutter/clutter-device-manager-private.h
+++ b/clutter/clutter/clutter-device-manager-private.h
@@ -160,6 +160,9 @@ struct _ClutterInputDeviceClass
guint button);
gint (* get_group_n_modes) (ClutterInputDevice *device,
gint group);
+
+ gboolean (* is_grouped) (ClutterInputDevice *device,
+ ClutterInputDevice *other_device);
};
/* Platform-dependent interface */
diff --git a/clutter/clutter/clutter-input-device.c b/clutter/clutter/clutter-input-device.c
index 686e5a804..d8caf0118 100644
--- a/clutter/clutter/clutter-input-device.c
+++ b/clutter/clutter/clutter-input-device.c
@@ -2266,3 +2266,13 @@ clutter_input_device_set_mapping_mode (ClutterInputDevice *device,
device->mapping_mode = mapping;
g_object_notify (G_OBJECT (device), "mapping-mode");
}
+
+gboolean
+clutter_input_device_is_grouped (ClutterInputDevice *device,
+ ClutterInputDevice *other_device)
+{
+ g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
+ g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (other_device), FALSE);
+
+ return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->is_grouped (device, other_device);
+}
diff --git a/clutter/clutter/clutter-input-device.h b/clutter/clutter/clutter-input-device.h
index f80a48ce1..3961b5027 100644
--- a/clutter/clutter/clutter-input-device.h
+++ b/clutter/clutter/clutter-input-device.h
@@ -168,6 +168,9 @@ ClutterInputDeviceMapping clutter_input_device_get_mapping_mode (ClutterInputDev
CLUTTER_AVAILABLE_IN_ALL
void clutter_input_device_set_mapping_mode (ClutterInputDevice *device,
ClutterInputDeviceMapping mapping);
+CLUTTER_AVAILABLE_IN_ALL
+gboolean clutter_input_device_is_grouped (ClutterInputDevice *device,
+ ClutterInputDevice *other_device);
G_END_DECLS
diff --git a/clutter/clutter/evdev/clutter-input-device-evdev.c b/clutter/clutter/evdev/clutter-input-device-evdev.c
index 0dc578dde..6019d05b4 100644
--- a/clutter/clutter/evdev/clutter-input-device-evdev.c
+++ b/clutter/clutter/evdev/clutter-input-device-evdev.c
@@ -193,6 +193,19 @@ clutter_input_device_evdev_get_group_n_modes (ClutterInputDevice *device,
return libinput_tablet_pad_mode_group_get_num_modes (mode_group);
}
+static gboolean
+clutter_input_device_evdev_is_grouped (ClutterInputDevice *device,
+ ClutterInputDevice *other_device)
+{
+ struct libinput_device *libinput_device, *other_libinput_device;
+
+ libinput_device = clutter_evdev_input_device_get_libinput_device (device);
+ other_libinput_device = clutter_evdev_input_device_get_libinput_device (other_device);
+
+ return libinput_device_get_device_group (libinput_device) ==
+ libinput_device_get_device_group (other_libinput_device);
+}
+
static void
clutter_input_device_evdev_class_init (ClutterInputDeviceEvdevClass *klass)
{
@@ -206,6 +219,7 @@ clutter_input_device_evdev_class_init (ClutterInputDeviceEvdevClass *klass)
klass->update_from_tool = clutter_input_device_evdev_update_from_tool;
klass->is_mode_switch_button = clutter_input_device_evdev_is_mode_switch_button;
klass->get_group_n_modes = clutter_input_device_evdev_get_group_n_modes;
+ klass->is_grouped = clutter_input_device_evdev_is_grouped;
obj_props[PROP_DEVICE_MATRIX] =
g_param_spec_boxed ("device-matrix",
diff --git a/clutter/clutter/x11/clutter-input-device-xi2.c b/clutter/clutter/x11/clutter-input-device-xi2.c
index d6bb87fdf..7fb0e05ad 100644
--- a/clutter/clutter/x11/clutter-input-device-xi2.c
+++ b/clutter/clutter/x11/clutter-input-device-xi2.c
@@ -80,6 +80,13 @@ clutter_input_device_xi2_keycode_to_evdev (ClutterInputDevice *device,
return TRUE;
}
+static gboolean
+clutter_input_device_xi2_is_grouped (ClutterInputDevice *device,
+ ClutterInputDevice *other_device)
+{
+ return FALSE;
+}
+
static void
clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass)
{
@@ -89,6 +96,7 @@ clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass)
gobject_class->constructed = clutter_input_device_xi2_constructed;
device_class->keycode_to_evdev = clutter_input_device_xi2_keycode_to_evdev;
+ device_class->is_grouped = clutter_input_device_xi2_is_grouped;
}
static void