From 84134aa78e4e33d80be6d9cd2cde042ddef4bb6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 13 Oct 2016 23:03:36 +0800 Subject: [PATCH] wayland/pointer: Don't set focus while during compositor grab Teach the default grab about compositor grabs (i.e. display->event_route) so that it can avoid setting a pointer focus when after the compositor grab actively unset the pointer focus. https://bugzilla.gnome.org/show_bug.cgi?id=772914 --- src/wayland/meta-wayland-pointer.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c index 7122d098f..9c5ddd3fc 100644 --- a/src/wayland/meta-wayland-pointer.c +++ b/src/wayland/meta-wayland-pointer.c @@ -425,10 +425,24 @@ default_grab_focus (MetaWaylandPointerGrab *grab, { MetaWaylandPointer *pointer = grab->pointer; MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer); + MetaDisplay *display = meta_get_display (); if (pointer->button_count > 0) return; + switch (display->event_route) + { + case META_EVENT_ROUTE_WINDOW_OP: + case META_EVENT_ROUTE_COMPOSITOR_GRAB: + case META_EVENT_ROUTE_FRAME_BUTTON: + return; + break; + + case META_EVENT_ROUTE_NORMAL: + case META_EVENT_ROUTE_WAYLAND_POPUP: + break; + } + if (meta_wayland_seat_has_pointer (seat)) meta_wayland_pointer_set_focus (pointer, surface); }