summaryrefslogtreecommitdiff
path: root/src/core/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/display.c')
-rw-r--r--src/core/display.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/core/display.c b/src/core/display.c
index acd26c68c..de675578d 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1418,6 +1418,20 @@ meta_grab_op_is_moving (MetaGrabOp op)
}
}
+static gboolean
+grab_op_should_block_mouse_events (MetaGrabOp op)
+{
+ switch (op)
+ {
+ case META_GRAB_OP_WAYLAND_CLIENT:
+ case META_GRAB_OP_COMPOSITOR:
+ return TRUE;
+
+ default:
+ return FALSE;
+ }
+}
+
/**
* meta_display_xserver_time_is_before:
* @display: a #MetaDisplay
@@ -2054,7 +2068,7 @@ meta_display_handle_event (MetaDisplay *display,
switch (event->type)
{
case CLUTTER_BUTTON_PRESS:
- if (display->grab_op == META_GRAB_OP_COMPOSITOR)
+ if (grab_op_should_block_mouse_events (display->grab_op))
break;
display->overlay_key_only_pressed = FALSE;
@@ -2226,7 +2240,7 @@ meta_display_handle_event (MetaDisplay *display,
}
break;
case CLUTTER_BUTTON_RELEASE:
- if (display->grab_op == META_GRAB_OP_COMPOSITOR)
+ if (grab_op_should_block_mouse_events (display->grab_op))
break;
display->overlay_key_only_pressed = FALSE;
@@ -2240,7 +2254,7 @@ meta_display_handle_event (MetaDisplay *display,
}
break;
case CLUTTER_MOTION:
- if (display->grab_op == META_GRAB_OP_COMPOSITOR)
+ if (grab_op_should_block_mouse_events (display->grab_op))
break;
if (display->grab_window == window &&
@@ -2274,6 +2288,10 @@ meta_display_handle_event (MetaDisplay *display,
if (display->grab_op == META_GRAB_OP_COMPOSITOR)
bypass_wayland = TRUE;
+ /* If a Wayland client has a grab, don't pass that through to Clutter */
+ if (display->grab_op == META_GRAB_OP_WAYLAND_CLIENT)
+ bypass_clutter = TRUE;
+
if (compositor && !bypass_wayland)
{
if (meta_wayland_compositor_handle_event (compositor, event))