libweston-desktop: Prevent spurious focus change signals
This should prevent extra focus signal emission the similarly to how default_grab_pointer_focus() does, though we don't have the surface jumping logic here. This stops xdg pings from being sent every output repaint during a grab when the pointer isn't in any windows belonging to the grab parent. An example would be running weston-terminal, bringing up the right click pop-up, and moving the mouse onto the desktop while another client causes repaints. Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
parent
58de1aac5c
commit
ef4d2955f0
@ -99,9 +99,16 @@ weston_desktop_seat_popup_grab_pointer_focus(struct weston_pointer_grab *grab)
|
|||||||
view = weston_compositor_pick_view(pointer->seat->compositor,
|
view = weston_compositor_pick_view(pointer->seat->compositor,
|
||||||
pointer->x, pointer->y);
|
pointer->x, pointer->y);
|
||||||
|
|
||||||
|
/* Ignore views that don't belong to the grabbing client */
|
||||||
if (view != NULL &&
|
if (view != NULL &&
|
||||||
view->surface->resource != NULL &&
|
view->surface->resource != NULL &&
|
||||||
wl_resource_get_client(view->surface->resource) == seat->popup_grab.client)
|
wl_resource_get_client(view->surface->resource) != seat->popup_grab.client)
|
||||||
|
view = NULL;
|
||||||
|
|
||||||
|
if (pointer->focus == view)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (view)
|
||||||
weston_pointer_set_focus(pointer, view);
|
weston_pointer_set_focus(pointer, view);
|
||||||
else
|
else
|
||||||
weston_pointer_clear_focus(pointer);
|
weston_pointer_clear_focus(pointer);
|
||||||
|
Loading…
Reference in New Issue
Block a user