From b0fee56974fe9304cee4f6350ba8a301a047b583 Mon Sep 17 00:00:00 2001 From: Tadeo Kondrak Date: Thu, 30 Dec 2021 22:49:48 -0700 Subject: [PATCH] input_method_v2: improve mapping detection Detect NULL commits before the surface is actually committed, allowing the surface to be properly damaged on unmap. (cherry picked from commit 5091118bed82394de5a151d658e895bb44059b61) --- types/wlr_input_method_v2.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/types/wlr_input_method_v2.c b/types/wlr_input_method_v2.c index 7ccd31ee0..f28eb1912 100644 --- a/types/wlr_input_method_v2.c +++ b/types/wlr_input_method_v2.c @@ -157,9 +157,22 @@ static void popup_surface_surface_role_commit(struct wlr_surface *surface) { && popup_surface->input_method->client_active); } +static void popup_surface_surface_role_precommit(struct wlr_surface *surface) { + struct wlr_input_popup_surface_v2 *popup_surface = surface->role_data; + if (popup_surface == NULL) { + return; + } + if (surface->pending.committed & WLR_SURFACE_STATE_BUFFER && + surface->pending.buffer == NULL) { + // This is a NULL commit + popup_surface_set_mapped(popup_surface, false); + } +} + static const struct wlr_surface_role input_popup_surface_v2_role = { .name = "zwp_input_popup_surface_v2", .commit = popup_surface_surface_role_commit, + .precommit = popup_surface_surface_role_precommit, }; bool wlr_surface_is_input_popup_surface_v2(struct wlr_surface *surface) {