[mutter] events: Ensure touchpad gesture events go through clutter
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] events: Ensure touchpad gesture events go through clutter
- Date: Mon, 20 Jul 2015 20:02:06 +0000 (UTC)
commit e648f2c244dbdf2b65122ce0754ab7be71de7e42
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Jul 1 15:49:33 2015 +0200
events: Ensure touchpad gesture events go through clutter
They otherwise fall through paths that enable bypass_clutter, this
is necessary so they can be picked by captured-event handlers
along the actor hierarchy.
https://bugzilla.gnome.org/show_bug.cgi?id=752248
src/core/events.c | 28 +++++++++++++++++++---------
1 files changed, 19 insertions(+), 9 deletions(-)
---
diff --git a/src/core/events.c b/src/core/events.c
index 5cd88b5..4c6d334 100644
--- a/src/core/events.c
+++ b/src/core/events.c
@@ -40,6 +40,13 @@
#endif
#include "meta-surface-actor.h"
+#define IS_GESTURE_EVENT(e) ((e)->type == CLUTTER_TOUCHPAD_SWIPE || \
+ (e)->type == CLUTTER_TOUCHPAD_PINCH || \
+ (e)->type == CLUTTER_TOUCH_BEGIN || \
+ (e)->type == CLUTTER_TOUCH_UPDATE || \
+ (e)->type == CLUTTER_TOUCH_END || \
+ (e)->type == CLUTTER_TOUCH_CANCEL)
+
static MetaWindow *
get_window_for_event (MetaDisplay *display,
const ClutterEvent *event)
@@ -265,15 +272,18 @@ meta_display_handle_event (MetaDisplay *display,
if (window)
{
- if (!clutter_event_get_event_sequence (event))
- {
- /* Swallow all non-touch events on windows that come our way.
- * Touch events that reach here aren't yet in an accepted state,
- * so Clutter must see them to maybe trigger gestures into
- * recognition.
- */
- bypass_clutter = TRUE;
- }
+ /* Events that are likely to trigger compositor gestures should
+ * be known to clutter so they can propagate along the hierarchy.
+ * Gesture-wise, there's two groups of events we should be getting
+ * here:
+ * - CLUTTER_TOUCH_* with a touch sequence that's not yet accepted
+ * by the gesture tracker, these might trigger gesture actions
+ * into recognition. Already accepted touch sequences are handled
+ * directly by meta_gesture_tracker_handle_event().
+ * - CLUTTER_TOUCHPAD_* events over windows. These can likewise
+ * trigger ::captured-event handlers along the way.
+ */
+ bypass_clutter = !IS_GESTURE_EVENT (event);
meta_window_handle_ungrabbed_event (window, event);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]