[mutter] events: No UI frame button press events for Wayland
- From: Olivier Fourdan <ofourdan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] events: No UI frame button press events for Wayland
- Date: Mon, 19 Aug 2019 07:53:03 +0000 (UTC)
commit f37a172dc78cf4a473defa3dc20effc6d1558aa6
Author: Olivier Fourdan <ofourdan redhat com>
Date: Thu Jul 25 09:39:07 2019 +0200
events: No UI frame button press events for Wayland
When double clicking to un-maximize an X11 window under Wayland, there
is a race between X11 and Wayland protocols and the X11 XConfigureWindow
may be processed by Xwayland before the button press event is forwarded
via the Wayland protocol.
As a result, the second click may reach another X11 window placed right
underneath in the X11 stack.
Make sure we do not forward the button press event to Wayland if it was
handled by the frame UI.
https://gitlab.gnome.org/GNOME/mutter/issues/88
src/core/events.c | 16 +++++++++++++++-
src/core/window.c | 3 ---
2 files changed, 15 insertions(+), 4 deletions(-)
---
diff --git a/src/core/events.c b/src/core/events.c
index 699b5b4b7..8a046b398 100644
--- a/src/core/events.c
+++ b/src/core/events.c
@@ -352,7 +352,21 @@ meta_display_handle_event (MetaDisplay *display,
*/
bypass_clutter = !IS_GESTURE_EVENT (event);
- meta_window_handle_ungrabbed_event (window, event);
+ /* When double clicking to un-maximize an X11 window under Wayland,
+ * there is a race between X11 and Wayland protocols and the X11
+ * XConfigureWindow may be processed by Xwayland before the button
+ * press event is forwarded via the Wayland protocol.
+ * As a result, the second click may reach another X11 window placed
+ * immediately underneath in the X11 stack.
+ * The following is to make sure we do not forward the button press
+ * event to Wayland if it was handled by the frame UI.
+ * See: https://gitlab.gnome.org/GNOME/mutter/issues/88
+ */
+ if (meta_window_handle_ui_frame_event (window, event))
+ bypass_wayland = (event->type == CLUTTER_BUTTON_PRESS ||
+ event->type == CLUTTER_TOUCH_BEGIN);
+ else
+ meta_window_handle_ungrabbed_event (window, event);
/* This might start a grab op. If it does, then filter out the
* event, and if it doesn't, replay the event to release our
diff --git a/src/core/window.c b/src/core/window.c
index 80588c7e9..caf447fbf 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -8266,9 +8266,6 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
gfloat x, y;
guint button;
- if (meta_window_handle_ui_frame_event (window, event))
- return;
-
if (event->type != CLUTTER_BUTTON_PRESS &&
event->type != CLUTTER_TOUCH_BEGIN)
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]