[gtk+/wip/wayland-tablet: 39/61] gdkdevice: Add GdkDevice::tool-changed signal
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/wayland-tablet: 39/61] gdkdevice: Add GdkDevice::tool-changed signal
- Date: Fri, 29 Jan 2016 13:49:59 +0000 (UTC)
commit af3c9f09050e2d28e491ae89e3bdc9bf94a53bbf
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 e70661f..5ce3637 100644
--- a/gdk/gdkdevice.c
+++ b/gdk/gdkdevice.c
@@ -57,6 +57,7 @@ struct _GdkAxisInfo
enum {
CHANGED,
+ TOOL_CHANGED,
LAST_SIGNAL
};
@@ -323,6 +324,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.18
+ */
+ 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
@@ -2011,6 +2030,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 8031ff1..65cdf50 100644
--- a/gdk/gdkdeviceprivate.h
+++ b/gdk/gdkdeviceprivate.h
@@ -69,6 +69,7 @@ struct _GdkDevice
gchar *product_id;
GdkSeat *seat;
+ GdkDeviceTool *last_tool;
};
struct _GdkDeviceClass
@@ -193,6 +194,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]