events: Add gdk_event_[gs]et_device_tool()
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 6 Jan 2015 13:52:42 +0000 (14:52 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 6 Apr 2016 13:43:29 +0000 (15:43 +0200)
This getter/setter will manage the tool pointer in GdkEventPrivate. The
setter should be most notably used by backends.

docs/reference/gdk/gdk3-sections.txt
gdk/gdkevents.c
gdk/gdkevents.h
gdk/gdkinternals.h

index 5f5136a836ae16416bb305aff728bb7c69763422..a2757c7ab24d9a0cb95888afbfde2aec6a9b0fc0 100644 (file)
@@ -888,6 +888,8 @@ gdk_event_get_device
 gdk_event_set_device
 gdk_event_get_source_device
 gdk_event_set_source_device
+gdk_event_get_device_tool
+gdk_event_set_device_tool
 
 <SUBSECTION>
 gdk_setting_get
index 2eb249e7760e3030829b9ce8fc322593ed0ba4eb..4a051f25efeee9ad889d50384b4632019273e102 100644 (file)
@@ -650,6 +650,7 @@ gdk_event_copy (const GdkEvent *event)
       new_private->device = private->device ? g_object_ref (private->device) : NULL;
       new_private->source_device = private->source_device ? g_object_ref (private->source_device) : NULL;
       new_private->seat = private->seat;
+      new_private->tool = private->tool;
     }
 
   switch (event->any.type)
@@ -2412,3 +2413,54 @@ gdk_event_set_seat (GdkEvent *event,
       priv->seat = seat;
     }
 }
+
+/**
+ * gdk_event_get_device_tool:
+ * @event: a #GdkEvent
+ *
+ * If the event was generated by a device that supports
+ * different tools (eg. a tablet), this function will
+ * return a #GdkDeviceTool representing the tool that
+ * caused the event. Otherwise, %NULL will be returned.
+ *
+ * Note: the #GdkDeviceTool<!-- -->s will be constant during
+ * the application lifetime, if settings must be stored
+ * persistently across runs, see gdk_device_tool_get_serial()
+ *
+ * Returns: (transfer none): The current device tool, or %NULL
+ *
+ * Since: 3.22
+ **/
+GdkDeviceTool *
+gdk_event_get_device_tool (const GdkEvent *event)
+{
+  GdkEventPrivate *private;
+
+  if (!gdk_event_is_allocated (event))
+    return NULL;
+
+  private = (GdkEventPrivate *) event;
+  return private->tool;
+}
+
+/**
+ * gdk_event_set_device_tool:
+ * @event: a #GdkEvent
+ * @tool: (nullable): tool to set on the event, or %NULL
+ *
+ * Sets the device tool for this event, should be rarely used.
+ *
+ * Since: 3.22
+ **/
+void
+gdk_event_set_device_tool (GdkEvent      *event,
+                           GdkDeviceTool *tool)
+{
+  GdkEventPrivate *private;
+
+  if (!gdk_event_is_allocated (event))
+    return;
+
+  private = (GdkEventPrivate *) event;
+  private->tool = tool;
+}
index a502b2743fbc52b144f250ff1f6cba1350e2da3e..25880951bda611f5c8d0f165a4aada8c45d1411a 100644 (file)
@@ -1443,6 +1443,13 @@ GDK_AVAILABLE_IN_ALL
 gboolean gdk_setting_get                (const gchar    *name,
                                          GValue         *value);
 
+GDK_AVAILABLE_IN_3_16
+GdkDeviceTool *gdk_event_get_device_tool (const GdkEvent *event);
+
+GDK_AVAILABLE_IN_3_16
+void           gdk_event_set_device_tool (GdkEvent       *event,
+                                          GdkDeviceTool  *tool);
+
 G_END_DECLS
 
 #endif /* __GDK_EVENTS_H__ */
index 2edc20472fc16579577bec327eab9e79ca5d918e..f68cd99700bc3c876d488e73e0b20c09c23b9b17 100644 (file)
@@ -189,6 +189,7 @@ struct _GdkEventPrivate
   GdkDevice *device;
   GdkDevice *source_device;
   GdkSeat   *seat;
+  GdkDeviceTool *tool;
 };
 
 typedef struct _GdkWindowPaint GdkWindowPaint;