backend/wayland: flush remote display

It turns out wl_event_source_check is not enough to guarantee that the
remote wl_display will be flushed after we queue requests. We need to
explicitly flush, just like we do in our X11 code.

References: https://gitlab.freedesktop.org/wayland/wayland/-/issues/187
This commit is contained in:
Simon Ser 2021-01-29 10:06:16 +01:00
parent a39dc1f7a8
commit 8e27418dd3
2 changed files with 6 additions and 0 deletions

View file

@ -324,6 +324,7 @@ static void backend_destroy(struct wlr_backend *backend) {
xdg_wm_base_destroy(wl->xdg_wm_base); xdg_wm_base_destroy(wl->xdg_wm_base);
wl_compositor_destroy(wl->compositor); wl_compositor_destroy(wl->compositor);
wl_registry_destroy(wl->registry); wl_registry_destroy(wl->registry);
wl_display_flush(wl->remote_display);
wl_display_disconnect(wl->remote_display); wl_display_disconnect(wl->remote_display);
free(wl); free(wl);
} }

View file

@ -360,6 +360,8 @@ static bool output_commit(struct wlr_output *wlr_output) {
} }
} }
wl_display_flush(output->backend->remote_display);
return true; return true;
} }
@ -460,6 +462,7 @@ static bool output_set_cursor(struct wlr_output *wlr_output,
} }
update_wl_output_cursor(output); update_wl_output_cursor(output);
wl_display_flush(backend->remote_display);
return true; return true;
} }
@ -494,6 +497,7 @@ static void output_destroy(struct wlr_output *wlr_output) {
xdg_toplevel_destroy(output->xdg_toplevel); xdg_toplevel_destroy(output->xdg_toplevel);
xdg_surface_destroy(output->xdg_surface); xdg_surface_destroy(output->xdg_surface);
wl_surface_destroy(output->surface); wl_surface_destroy(output->surface);
wl_display_flush(output->backend->remote_display);
free(output); free(output);
} }
@ -679,6 +683,7 @@ void wlr_wl_output_set_title(struct wlr_output *output, const char *title) {
} }
xdg_toplevel_set_title(wl_output->xdg_toplevel, title); xdg_toplevel_set_title(wl_output->xdg_toplevel, title);
wl_display_flush(wl_output->backend->remote_display);
} }
struct wl_surface *wlr_wl_output_get_surface(struct wlr_output *output) { struct wl_surface *wlr_wl_output_get_surface(struct wlr_output *output) {