xwayland-unmanaged: prepare for handling more events

Sway handles some xwayland events that labwc still does not. This commit
just starts to rig up some handlers for these with log messages if they
are caught.

  - set_geometry: try to handle, but cannot find an application that uses
    it, so is untested.
  - request_activate - just log caught event
  - override_redirect - just log caught event
This commit is contained in:
Johan Malm 2022-06-04 13:20:40 +01:00
parent fcd2425de3
commit 9dcabbcfdd
2 changed files with 49 additions and 0 deletions

View file

@ -22,6 +22,21 @@ unmanaged_handle_commit(struct wl_listener *listener, void *data)
unmanaged->ly = xsurface->y;
}
static void
unmanaged_handle_set_geometry(struct wl_listener *listener, void *data)
{
wlr_log(WLR_INFO, "handling set_geometry");
struct xwayland_unmanaged *unmanaged =
wl_container_of(listener, unmanaged, commit);
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
if (xsurface->x != unmanaged->lx || xsurface->y != unmanaged->ly) {
wlr_log(WLR_DEBUG, "xwayland-unmanaged surface has moved");
unmanaged->lx = xsurface->x;
unmanaged->ly = xsurface->y;
}
}
void
unmanaged_handle_map(struct wl_listener *listener, void *data)
{
@ -35,6 +50,9 @@ unmanaged_handle_map(struct wl_listener *listener, void *data)
wl_signal_add(&xsurface->surface->events.commit, &unmanaged->commit);
unmanaged->commit.notify = unmanaged_handle_commit;
wl_signal_add(&xsurface->events.set_geometry, &unmanaged->set_geometry);
unmanaged->set_geometry.notify = unmanaged_handle_set_geometry;
unmanaged->lx = xsurface->x;
unmanaged->ly = xsurface->y;
if (wlr_xwayland_or_surface_wants_focus(xsurface)) {
@ -55,6 +73,7 @@ unmanaged_handle_unmap(struct wl_listener *listener, void *data)
wl_container_of(listener, unmanaged, unmap);
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
wl_list_remove(&unmanaged->link);
wl_list_remove(&unmanaged->set_geometry.link);
wl_list_remove(&unmanaged->commit.link);
struct seat *seat = &unmanaged->server->seat;
@ -94,6 +113,18 @@ unmanaged_handle_destroy(struct wl_listener *listener, void *data)
free(unmanaged);
}
static void
unmanaged_handle_override_redirect(struct wl_listener *listener, void *data)
{
wlr_log(WLR_INFO(stderr, "override_redirect not handled\n");
}
static void
unmanaged_handle_request_activate(struct wl_listener *listener, void *data)
{
wlr_log(WLR_INFO(stderr, "request_activate not handled\n");
}
struct xwayland_unmanaged *
xwayland_unmanaged_create(struct server *server,
struct wlr_xwayland_surface *xsurface)
@ -112,5 +143,14 @@ xwayland_unmanaged_create(struct server *server,
unmanaged->unmap.notify = unmanaged_handle_unmap;
wl_signal_add(&xsurface->events.destroy, &unmanaged->destroy);
unmanaged->destroy.notify = unmanaged_handle_destroy;
wl_signal_add(&xsurface->events.set_override_redirect,
&unmanaged->override_redirect);
unmanaged->override_redirect.notify = unmanaged_handle_override_redirect;
wl_signal_add(&xsurface->events.request_activate,
&unmanaged->request_activate);
unmanaged->request_activate.notify = unmanaged_handle_request_activate;
return unmanaged;
}