diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2016-01-29 13:06:02 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2016-04-06 15:43:29 +0200 |
commit | 6824dd7b8afffc4affcc21f8a7c1700c7de66c91 (patch) | |
tree | 9badf179602592f337ce049e31b5f77b15ff6c93 /gdk/gdkseat.c | |
parent | d5f141a9b7e85272b6042d2be6a6bcd09a825bd3 (diff) | |
download | gtk+-6824dd7b8afffc4affcc21f8a7c1700c7de66c91.tar.gz |
gdk: Add GdkSeat::tool-added/removed signals
And a helper function to lookup a tool from the seat. Those are
tracker per-seat, and may be shared across devices.
Diffstat (limited to 'gdk/gdkseat.c')
-rw-r--r-- | gdk/gdkseat.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gdk/gdkseat.c b/gdk/gdkseat.c index 9e54ed56ff..a507d451bd 100644 --- a/gdk/gdkseat.c +++ b/gdk/gdkseat.c @@ -46,6 +46,8 @@ struct _GdkSeatPrivate enum { DEVICE_ADDED, DEVICE_REMOVED, + TOOL_ADDED, + TOOL_REMOVED, N_SIGNALS }; @@ -147,6 +149,48 @@ gdk_seat_class_init (GdkSeatClass *klass) GDK_TYPE_DEVICE); /** + * GdkSeat::tool-added: + * @seat: the object on which the signal is emitted + * @tool: the new #GdkDeviceTool known to the seat + * + * The ::tool-added signal is emitted whenever a new tool + * is made known to the seat. The tool may later be assigned + * to a device (i.e. on proximity with a tablet). The device + * will emit the #GdkDevice::tool-changed signal accordingly. + * + * A same tool may be used by several devices. + * + * Since: 3.22 + */ + signals [TOOL_ADDED] = + g_signal_new (g_intern_static_string ("tool-added"), + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__BOXED, + G_TYPE_NONE, 1, + GDK_TYPE_DEVICE_TOOL); + + /** + * GdkSeat::tool-removed: + * @seat: the object on which the signal is emitted + * @tool: the just removed #GdkDeviceTool + * + * This signal is emitted whenever a tool is no longer known + * to this @seat. + * + * Since: 3.22 + */ + signals [TOOL_REMOVED] = + g_signal_new (g_intern_static_string ("tool-removed"), + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__BOXED, + G_TYPE_NONE, 1, + GDK_TYPE_DEVICE_TOOL); + + /** * GdkSeat:display: * * #GdkDisplay of this seat. @@ -388,3 +432,29 @@ gdk_seat_get_display (GdkSeat *seat) return priv->display; } + +void +gdk_seat_tool_added (GdkSeat *seat, + GdkDeviceTool *tool) +{ + g_signal_emit (seat, signals[TOOL_ADDED], 0, tool); +} + +void +gdk_seat_tool_removed (GdkSeat *seat, + GdkDeviceTool *tool) +{ + g_signal_emit (seat, signals[TOOL_REMOVED], 0, tool); +} + +GdkDeviceTool * +gdk_seat_get_tool (GdkSeat *seat, + guint64 serial) +{ + GdkSeatClass *seat_class; + + g_return_val_if_fail (GDK_IS_SEAT (seat), NULL); + + seat_class = GDK_SEAT_GET_CLASS (seat); + return seat_class->get_tool (seat, serial); +} |