input_method_v2: improve mapping detection

Detect NULL commits before the surface is actually committed, allowing
the surface to be properly damaged on unmap.
This commit is contained in:
Tadeo Kondrak 2021-12-30 22:49:48 -07:00
parent 89dc9a4496
commit 5091118bed

View file

@ -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,
const struct wlr_surface_state *state) {
struct wlr_input_popup_surface_v2 *popup_surface = surface->role_data;
if (popup_surface == NULL) {
return;
}
if (state->committed & WLR_SURFACE_STATE_BUFFER && state->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) {