[gtk+/wip/wayland-tablet: 533/555] gdkdevice: Add GdkDevice::tool-changed signal
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/wayland-tablet: 533/555] gdkdevice: Add GdkDevice::tool-changed signal
- Date: Tue, 29 Mar 2016 18:20:15 +0000 (UTC)
commit 08ca4b162ba06236f27aa5793d3e3c05eff2cc97
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Jan 6 14:44:15 2015 +0100
gdkdevice: Add GdkDevice::tool-changed signal
On the devices and backends that support it, this signal will be emitted
on slave/floating devices whenever the tool they are interacting with
changes. These notifications may also work as a sort of proximity events,
as the tool will be unset when the pen moves too far.
For backends, gdk_device_update_tool() has been included, all that should
be done on their side is just calling this whenever any tool might have
changed.
gdk/gdkdevice.c | 33 +++++++++++++++++++++++++++++++++
gdk/gdkdeviceprivate.h | 3 +++
2 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c
index e6c93c4..0f49369 100644
--- a/gdk/gdkdevice.c
+++ b/gdk/gdkdevice.c
@@ -57,6 +57,7 @@ struct _GdkAxisInfo
enum {
CHANGED,
+ TOOL_CHANGED,
LAST_SIGNAL
};
@@ -341,6 +342,24 @@ gdk_device_class_init (GdkDeviceClass *klass)
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ /**
+ * GdkDevice::tool-changed:
+ * @device: the #GdkDevice that changed.
+ * @tool: The new current tool
+ *
+ * The ::tool-changed signal is emitted on pen/eraser
+ * #GdkDevice<!-- -->s whenever tools enter or leave proximity.
+ *
+ * Since: 3.22
+ */
+ signals[TOOL_CHANGED] =
+ g_signal_new (g_intern_static_string ("tool-changed"),
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE, 1, GDK_TYPE_DEVICE_TOOL);
}
static void
@@ -2034,6 +2053,20 @@ gdk_device_tool_new (guint64 serial)
return tool;
}
+void
+gdk_device_update_tool (GdkDevice *device,
+ GdkDeviceTool *tool)
+{
+ g_return_if_fail (GDK_IS_DEVICE (device));
+ g_return_if_fail (gdk_device_get_device_type (device) != GDK_DEVICE_TYPE_MASTER);
+
+ if (device->last_tool == tool)
+ return;
+
+ device->last_tool = tool;
+ g_signal_emit (device, signals[TOOL_CHANGED], 0, tool);
+}
+
/**
* gdk_device_tool_get_serial:
* @tool: a #GdkDeviceTool
diff --git a/gdk/gdkdeviceprivate.h b/gdk/gdkdeviceprivate.h
index 747369a..be9a358 100644
--- a/gdk/gdkdeviceprivate.h
+++ b/gdk/gdkdeviceprivate.h
@@ -70,6 +70,7 @@ struct _GdkDevice
gchar *product_id;
GdkSeat *seat;
+ GdkDeviceTool *last_tool;
};
struct _GdkDeviceClass
@@ -194,6 +195,8 @@ void gdk_device_set_seat (GdkDevice *device,
GdkDeviceTool *gdk_device_tool_new (guint64 serial);
GdkDeviceTool *gdk_device_tool_ref (GdkDeviceTool *tool);
void gdk_device_tool_unref (GdkDeviceTool *tool);
+void gdk_device_update_tool (GdkDevice *device,
+ GdkDeviceTool *tool);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]