backend/wayland: don't ack a configure event too early

Postpone sending xdg_surface.ack_configure until the guest compositor
commits a buffer, if at all.

Also see
https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/128.
This commit is contained in:
Kirill Primak 2024-02-11 10:37:12 +03:00
parent 94e7165e85
commit baf1e4f674
2 changed files with 10 additions and 1 deletions

View File

@ -588,6 +588,11 @@ static bool output_commit(struct wlr_output *wlr_output,
output->surface); output->surface);
} }
if (output->has_configure_serial) {
xdg_surface_ack_configure(output->xdg_surface, output->configure_serial);
output->has_configure_serial = false;
}
wl_surface_commit(output->surface); wl_surface_commit(output->surface);
if (wp_feedback != NULL) { if (wp_feedback != NULL) {
@ -742,7 +747,8 @@ static void xdg_surface_handle_configure(void *data,
assert(output && output->xdg_surface == xdg_surface); assert(output && output->xdg_surface == xdg_surface);
output->configured = true; output->configured = true;
xdg_surface_ack_configure(xdg_surface, serial); output->has_configure_serial = true;
output->configure_serial = serial;
int32_t req_width = output->wlr_output.width; int32_t req_width = output->wlr_output.width;
int32_t req_height = output->wlr_output.height; int32_t req_height = output->wlr_output.height;

View File

@ -95,7 +95,10 @@ struct wlr_wl_output {
// 0 if not requested // 0 if not requested
int32_t requested_width, requested_height; int32_t requested_width, requested_height;
uint32_t configure_serial;
bool has_configure_serial;
bool configured; bool configured;
uint32_t enter_serial; uint32_t enter_serial;
struct { struct {