wayland/pointer: Check pointer presence at set focus call site

Make the caller of focus setting check whether there is a pointer to
update the focus state of. It makes it more obvious what to expect, as
the call would be a no-op in when no pointer is present.

Grabbing is still allowed without the presence of a pointer because it
is used by popups even on touch-only systems.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
This commit is contained in:
Jonas Ådahl 2016-09-21 13:41:11 +08:00
parent d3cff9a962
commit d5d5084151
2 changed files with 13 additions and 5 deletions

View File

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

View File

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