diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt index 2b412040ea..a2b5fc0d11 100644 --- a/docs/reference/gdk/gdk3-sections.txt +++ b/docs/reference/gdk/gdk3-sections.txt @@ -766,10 +766,12 @@ gdk_event_get_state gdk_event_get_axis gdk_event_get_coords gdk_event_get_root_coords +gdk_event_get_touch_id gdk_event_request_motions gdk_events_get_angle gdk_events_get_center gdk_events_get_distance +gdk_event_get_touch_id gdk_event_handler_set diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols index b159b1ce32..b4478e0226 100644 --- a/gdk/gdk.symbols +++ b/gdk/gdk.symbols @@ -163,6 +163,7 @@ gdk_event_get_screen gdk_event_get_source_device gdk_event_get_state gdk_event_get_time +gdk_event_get_touch_id gdk_event_get_type G_GNUC_CONST gdk_event_handler_set gdk_event_mask_get_type G_GNUC_CONST diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index 9067e25689..53c83a5d5f 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -1482,6 +1482,45 @@ gdk_event_get_screen (const GdkEvent *event) return NULL; } +/** + * gdk_event_get_touch_id: + * @event: a #GdkEvent + * @touch_id: return location of the touch ID of a touch event + * + * If @event if of type %GDK_TOUCH_MOTION, %GDK_TOUCH_PRESS or + * %GDK_TOUCH_RELEASE, fills in @touch_id and returns %TRUE, + * else it returns %FALSE. + * + * Returns: %TRUE if the touch ID can be extracted from @event. + **/ +gboolean +gdk_event_get_touch_id (const GdkEvent *event, + guint *touch_id) +{ + if (!event) + return FALSE; + + if (event->type == GDK_TOUCH_MOTION) + { + if (touch_id) + *touch_id = event->motion.touch_id; + return TRUE; + } + else if (event->type == GDK_TOUCH_PRESS || + event->type == GDK_TOUCH_RELEASE) + { + if (touch_id) + *touch_id = event->button.touch_id; + return TRUE; + } + else + { + if (touch_id) + *touch_id = 0; + return FALSE; + } +} + /** * gdk_set_show_events: * @show_events: %TRUE to output event debugging information. diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h index 15a1322db3..d03e4f07d0 100644 --- a/gdk/gdkevents.h +++ b/gdk/gdkevents.h @@ -1098,6 +1098,9 @@ void gdk_event_set_screen (GdkEvent *event, GdkScreen *screen); GdkScreen *gdk_event_get_screen (const GdkEvent *event); +gboolean gdk_event_get_touch_id (const GdkEvent *event, + guint *touch_id); + void gdk_set_show_events (gboolean show_events); gboolean gdk_get_show_events (void);