diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-03-26 10:25:09 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2014-05-23 19:54:24 +0200 |
commit | 8e1d5f98de2312b241fb81838d667eeec1d0bd02 (patch) | |
tree | 434f489f6275cb83d19f80eafcd4411ae4aa1474 /gtk/gtkgesture.c | |
parent | c49ac32393587f034068fda8cd4fde625624ad42 (diff) | |
download | gtk+-8e1d5f98de2312b241fb81838d667eeec1d0bd02.tar.gz |
widget: Improve button press emulation on sequence denied
Ensure that state being set on pointer emulating touches actually
gets propagated properly on widgets with gestures that only handle
pointer events.
Diffstat (limited to 'gtk/gtkgesture.c')
-rw-r--r-- | gtk/gtkgesture.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c index 0f0fb9a84e..c6bd6583c2 100644 --- a/gtk/gtkgesture.c +++ b/gtk/gtkgesture.c @@ -1161,3 +1161,40 @@ _gtk_gesture_handled_sequence_press (GtkGesture *gesture, return data->press_handled; } + +gboolean +_gtk_gesture_get_pointer_emulating_sequence (GtkGesture *gesture, + GdkEventSequence **sequence) +{ + GtkGesturePrivate *priv; + GdkEventSequence *seq; + GHashTableIter iter; + PointData *data; + + g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE); + + priv = gtk_gesture_get_instance_private (gesture); + g_hash_table_iter_init (&iter, priv->points); + + while (g_hash_table_iter_next (&iter, (gpointer*) &seq, (gpointer*) &data)) + { + switch (data->event->type) + { + case GDK_TOUCH_BEGIN: + case GDK_TOUCH_UPDATE: + case GDK_TOUCH_END: + if (!data->event->touch.emulating_pointer) + continue; + /* Fall through */ + case GDK_BUTTON_PRESS: + case GDK_BUTTON_RELEASE: + case GDK_MOTION_NOTIFY: + *sequence = seq; + return TRUE; + default: + break; + } + } + + return FALSE; +} |