mirror of
https://github.com/labwc/labwc.git
synced 2025-11-09 13:30:01 -05:00
xwayland: validate PID before activating unmanaged surface
Check that an unmanaged surface trying to grab focus is actually a child of the topmost mapped view.
This commit is contained in:
parent
64d62a91b6
commit
5744bba849
3 changed files with 18 additions and 3 deletions
|
|
@ -200,8 +200,8 @@ desktop_cycle_view(struct server *server, struct view *start_view,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct view *
|
||||
topmost_mapped_view(struct server *server)
|
||||
struct view *
|
||||
desktop_topmost_mapped_view(struct server *server)
|
||||
{
|
||||
struct view *view;
|
||||
struct wl_list *node_list;
|
||||
|
|
@ -242,7 +242,7 @@ desktop_focused_view(struct server *server)
|
|||
void
|
||||
desktop_focus_topmost_mapped_view(struct server *server)
|
||||
{
|
||||
struct view *view = topmost_mapped_view(server);
|
||||
struct view *view = desktop_topmost_mapped_view(server);
|
||||
desktop_focus_and_activate_view(&server->seat, view);
|
||||
if (view) {
|
||||
view_move_to_front(view);
|
||||
|
|
|
|||
|
|
@ -166,6 +166,20 @@ unmanaged_handle_request_activate(struct wl_listener *listener, void *data)
|
|||
struct xwayland_unmanaged *unmanaged = xsurface->data;
|
||||
struct server *server = unmanaged->server;
|
||||
struct seat *seat = &server->seat;
|
||||
|
||||
/*
|
||||
* Validate that the unmanaged surface trying to grab focus is actually
|
||||
* a child of the topmost mapped view before granting the request.
|
||||
*/
|
||||
struct view *view = desktop_topmost_mapped_view(server);
|
||||
if (view && view->type == LAB_XWAYLAND_VIEW) {
|
||||
struct wlr_xwayland_surface *surf =
|
||||
wlr_xwayland_surface_from_wlr_surface(view->surface);
|
||||
if (surf && surf->pid != xsurface->pid) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
seat_focus_surface(seat, xsurface->surface);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue