mirror of
https://github.com/swaywm/sway.git
synced 2024-12-28 07:56:31 +01:00
xwayland: listen to request_activate
event
When REAPER submenu is closed `XCB_CLIENT_MESSAGE` with type `NET_ACTIVE_WINDOW` is sent to set focus to parent menu. Closes: https://github.com/swaywm/sway/issues/6324
This commit is contained in:
parent
518e18a54b
commit
69b430201c
2 changed files with 18 additions and 0 deletions
|
@ -169,6 +169,7 @@ struct sway_xwayland_unmanaged {
|
||||||
|
|
||||||
int lx, ly;
|
int lx, ly;
|
||||||
|
|
||||||
|
struct wl_listener request_activate;
|
||||||
struct wl_listener request_configure;
|
struct wl_listener request_configure;
|
||||||
struct wl_listener request_fullscreen;
|
struct wl_listener request_fullscreen;
|
||||||
struct wl_listener commit;
|
struct wl_listener commit;
|
||||||
|
|
|
@ -121,6 +121,20 @@ static void unmanaged_handle_unmap(struct wl_listener *listener, void *data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void unmanaged_handle_request_activate(struct wl_listener *listener, void *data) {
|
||||||
|
struct wlr_xwayland_surface *xsurface = data;
|
||||||
|
if (!xsurface->mapped) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
struct sway_seat *seat = input_manager_current_seat();
|
||||||
|
struct sway_container *focus = seat_get_focused_container(seat);
|
||||||
|
if (focus && focus->view && focus->view->pid != xsurface->pid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
seat_set_focus_surface(seat, xsurface->surface, false);
|
||||||
|
}
|
||||||
|
|
||||||
static void unmanaged_handle_destroy(struct wl_listener *listener, void *data) {
|
static void unmanaged_handle_destroy(struct wl_listener *listener, void *data) {
|
||||||
struct sway_xwayland_unmanaged *surface =
|
struct sway_xwayland_unmanaged *surface =
|
||||||
wl_container_of(listener, surface, destroy);
|
wl_container_of(listener, surface, destroy);
|
||||||
|
@ -129,6 +143,7 @@ static void unmanaged_handle_destroy(struct wl_listener *listener, void *data) {
|
||||||
wl_list_remove(&surface->unmap.link);
|
wl_list_remove(&surface->unmap.link);
|
||||||
wl_list_remove(&surface->destroy.link);
|
wl_list_remove(&surface->destroy.link);
|
||||||
wl_list_remove(&surface->override_redirect.link);
|
wl_list_remove(&surface->override_redirect.link);
|
||||||
|
wl_list_remove(&surface->request_activate.link);
|
||||||
free(surface);
|
free(surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,6 +191,8 @@ static struct sway_xwayland_unmanaged *create_unmanaged(
|
||||||
surface->destroy.notify = unmanaged_handle_destroy;
|
surface->destroy.notify = unmanaged_handle_destroy;
|
||||||
wl_signal_add(&xsurface->events.set_override_redirect, &surface->override_redirect);
|
wl_signal_add(&xsurface->events.set_override_redirect, &surface->override_redirect);
|
||||||
surface->override_redirect.notify = unmanaged_handle_override_redirect;
|
surface->override_redirect.notify = unmanaged_handle_override_redirect;
|
||||||
|
wl_signal_add(&xsurface->events.request_activate, &surface->request_activate);
|
||||||
|
surface->request_activate.notify = unmanaged_handle_request_activate;
|
||||||
|
|
||||||
return surface;
|
return surface;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue