Add META_GRAB_OP_WAYLAND_CLIENT

Which is used for Wayland popup grabs.

The issue here is that we don't want the code that raises or focuses
windows based on mouse ops to run while a client has a grab.

We still keep the "old" grab infrastructure in place for now, but
ideally we'd replace it eventually with a better grab-op infrastructure.
This commit is contained in:
Jasper St. Pierre
2014-03-10 15:00:59 -04:00
parent dd8d8e436d
commit 81eb7d9537
3 changed files with 46 additions and 5 deletions

View File

@ -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))