diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2010-07-02 13:40:08 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2010-07-02 13:43:47 +0200 |
commit | d5dda9a2f09ed2133fb1cd8c61ebf33f6127a924 (patch) | |
tree | 64469414f51164b49a7cd8887df33f0ddfa9b9e6 /gdk/gdkevents.c | |
parent | ab8242c522fa80387538c32ec1d3f2a4397b4b49 (diff) | |
download | gtk+-d5dda9a2f09ed2133fb1cd8c61ebf33f6127a924.tar.gz |
Add gdk_event_[gs]et_source_device().xi2-playground
This function may be used to know the hardware device that triggered
an event, it could resort to the master device in the few cases there's
not a direct hardware device to relate to the event (i.e.: crossing events
due to grabs)
Diffstat (limited to 'gdk/gdkevents.c')
-rw-r--r-- | gdk/gdkevents.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index 470c9e9fe4..78eae5ef4e 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -1054,6 +1054,66 @@ gdk_event_get_device (const GdkEvent *event) } /** + * gdk_event_set_source_device: + * @event: a #GdkEvent + * @device: a #GdkDevice + * + * Sets the slave device for @event to @device. The event + * must have been allocated by GTK+, for instance, by + * gdk_event_copy(). + * + * Since: 3.0 + **/ +void +gdk_event_set_source_device (GdkEvent *event, + GdkDevice *device) +{ + GdkEventPrivate *private; + + g_return_if_fail (gdk_event_is_allocated (event)); + g_return_if_fail (GDK_IS_DEVICE (device)); + + private = (GdkEventPrivate *) event; + + private->source_device = device; +} + +/** + * gdk_event_get_source_device: + * @event: a #GdkEvent + * + * This function returns the hardware (slave) #GdkDevice that has triggered the event, + * falling back to the virtual (master) device (as in gdk_event_get_device()) if the + * event wasn't caused by interaction with a hardware device. This may happen for + * example in synthesized crossing events after a #GdkWindow updates its geometry or + * a grab is acquired/released. + * + * If the event does not contain device field, this function will return %NULL. + * + * Returns: a #GdkDevice, or %NULL. + * + * Since: 3.0 + **/ +GdkDevice * +gdk_event_get_source_device (const GdkEvent *event) +{ + GdkEventPrivate *private; + + g_return_val_if_fail (event != NULL, NULL); + + if (!gdk_event_is_allocated (event)) + return NULL; + + private = (GdkEventPrivate *) event; + + if (private->source_device) + return private->source_device; + + /* Fallback to event device */ + return gdk_event_get_device (event); +} + +/** * gdk_event_request_motions: * @event: a valid #GdkEvent * |