From 16d7e09d996f7fd211e3a6ff8960a15217ca3710 Mon Sep 17 00:00:00 2001 From: emersion Date: Mon, 9 Jul 2018 23:02:03 +0100 Subject: surface: add wlr_surface_role.precommit This allows to emit the unmap event before the surface becomes actually unmapped for most shells. --- xwayland/xwm.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'xwayland/xwm.c') diff --git a/xwayland/xwm.c b/xwayland/xwm.c index bee3a005..54cb88d0 100644 --- a/xwayland/xwm.c +++ b/xwayland/xwm.c @@ -652,9 +652,27 @@ static void xwayland_surface_role_commit(struct wlr_surface *wlr_surface) { } } +static void xwayland_surface_role_precommit(struct wlr_surface *wlr_surface) { + assert(wlr_surface->role == &xwayland_surface_role); + struct wlr_xwayland_surface *surface = wlr_surface->role_data; + if (surface == NULL) { + return; + } + + if (wlr_surface->pending.committed & WLR_SURFACE_STATE_BUFFER && + wlr_surface->pending.buffer_resource == NULL) { + // This is a NULL commit + if (surface->mapped) { + wlr_signal_emit_safe(&surface->events.unmap, surface); + surface->mapped = false; + } + } +} + static const struct wlr_surface_role xwayland_surface_role = { .name = "wlr_xwayland_surface", .commit = xwayland_surface_role_commit, + .precommit = xwayland_surface_role_precommit, }; static void handle_surface_destroy(struct wl_listener *listener, void *data) { -- cgit v1.2.3