diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c index 1d8ddd383..60df63529 100644 --- a/src/wayland/meta-wayland-pointer.c +++ b/src/wayland/meta-wayland-pointer.c @@ -416,11 +416,13 @@ default_grab_focus (MetaWaylandPointerGrab *grab, MetaWaylandSurface *surface) { MetaWaylandPointer *pointer = grab->pointer; + MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer); if (pointer->button_count > 0) return; - meta_wayland_pointer_set_focus (pointer, surface); + if (meta_wayland_seat_has_pointer (seat)) + meta_wayland_pointer_set_focus (pointer, surface); } static void @@ -794,10 +796,6 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer, MetaWaylandSurface *surface) { MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (pointer); - MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer); - - if (!meta_wayland_seat_has_pointer (seat)) - return; if (pointer->focus_surface == surface) return; diff --git a/src/wayland/meta-wayland-popup.c b/src/wayland/meta-wayland-popup.c index c89b878d7..f9141dd06 100644 --- a/src/wayland/meta-wayland-popup.c +++ b/src/wayland/meta-wayland-popup.c @@ -101,6 +101,16 @@ popup_grab_focus (MetaWaylandPointerGrab *grab, MetaWaylandSurface *surface) { MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)grab; + MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (grab->pointer); + + /* + * We rely on having a pointer grab even when the seat doesn't have + * the pointer capability. In this case, we shouldn't update any pointer focus + * since there is no such thing when the seat doesn't have the pointer + * capability. + */ + if (!meta_wayland_seat_has_pointer (seat)) + return; /* Popup grabs are in owner-events mode (ie, events for the same client are reported as normal) */