From 40f75e74be35605d1b77fc81e560b8f9e20e2311 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 4 Aug 2016 18:49:13 +0200 Subject: [PATCH] gdk: Add a getter for the hardware id of a GdkDeviceTool Although scarcely used, this information may be useful to retrieve from the windowing systems that offer this information. https://bugzilla.gnome.org/show_bug.cgi?id=770026 --- gdk/gdkdevicetool.c | 39 +++++++++++++++++++++++++++++++++++++++ gdk/gdkdevicetool.h | 3 +++ 2 files changed, 42 insertions(+) diff --git a/gdk/gdkdevicetool.c b/gdk/gdkdevicetool.c index 3f0781128a..d632504fa4 100644 --- a/gdk/gdkdevicetool.c +++ b/gdk/gdkdevicetool.c @@ -31,6 +31,7 @@ enum { TOOL_PROP_SERIAL, TOOL_PROP_TOOL_TYPE, TOOL_PROP_AXES, + TOOL_PROP_HARDWARE_ID, N_TOOL_PROPS }; @@ -55,6 +56,9 @@ gdk_device_tool_set_property (GObject *object, case TOOL_PROP_AXES: tool->tool_axes = g_value_get_flags (value); break; + case TOOL_PROP_HARDWARE_ID: + tool->hw_id = g_value_get_uint64 (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -80,6 +84,9 @@ gdk_device_tool_get_property (GObject *object, case TOOL_PROP_AXES: g_value_set_flags (value, tool->tool_axes); break; + case TOOL_PROP_HARDWARE_ID: + g_value_set_uint64 (value, tool->hw_id); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -113,6 +120,12 @@ gdk_device_tool_class_init (GdkDeviceToolClass *klass) GDK_TYPE_AXIS_FLAGS, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + tool_props[TOOL_PROP_HARDWARE_ID] = g_param_spec_uint64 ("hardware-id", + "Hardware ID", + "Hardware ID", + 0, G_MAXUINT64, 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, N_TOOL_PROPS, tool_props); } @@ -153,6 +166,32 @@ gdk_device_tool_get_serial (GdkDeviceTool *tool) return tool->serial; } +/** + * gdk_device_tool_get_hardware_id: + * @tool: a #GdkDeviceTool + * + * Gets the hardware ID of this tool, or 0 if it's not known. When + * non-zero, the identificator is unique for the given tool model, + * meaning that two identical tools will share the same @hardware_id, + * but will have different serial numbers (see gdk_device_tool_get_serial()). + * + * This is a more concrete (and device specific) method to identify + * a #GdkDeviceTool than gdk_device_tool_get_tool_type(), as a tablet + * may support multiple devices with the same #GdkDeviceToolType, + * but having different hardware identificators. + * + * Returns: The hardware identificator of this tool. + * + * Since: 3.22 + **/ +guint64 +gdk_device_tool_get_hardware_id (GdkDeviceTool *tool) +{ + g_return_val_if_fail (tool != NULL, 0); + + return tool->hw_id; +} + /** * gdk_device_tool_get_tool_type: * @tool: a #GdkDeviceTool diff --git a/gdk/gdkdevicetool.h b/gdk/gdkdevicetool.h index 5486e7e4eb..34a3200db8 100644 --- a/gdk/gdkdevicetool.h +++ b/gdk/gdkdevicetool.h @@ -67,6 +67,9 @@ GType gdk_device_tool_get_type (void) G_GNUC_CONST; GDK_AVAILABLE_IN_3_22 guint64 gdk_device_tool_get_serial (GdkDeviceTool *tool); +GDK_AVAILABLE_IN_3_22 +guint64 gdk_device_tool_get_hardware_id (GdkDeviceTool *tool); + GDK_AVAILABLE_IN_3_22 GdkDeviceToolType gdk_device_tool_get_tool_type (GdkDeviceTool *tool);