mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-31 22:25:21 -04:00
surface: add wlr_surface_role.precommit
This allows to emit the unmap event before the surface becomes actually unmapped for most shells.
This commit is contained in:
parent
4984ea49ee
commit
16d7e09d99
11 changed files with 70 additions and 13 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue