diff --git a/libweston/compositor.c b/libweston/compositor.c index cf7134544..f4bd0b5bc 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -4917,8 +4917,24 @@ weston_output_schedule_repaint(struct weston_output *output) return; if (output->backend->deferred) { - output->repaint_status = REPAINT_DEFERRED; - return; + bool any_active = false; + struct weston_output *out; + + wl_list_for_each(out, &compositor->output_list, link) { + if (out->backend != output->backend) + continue; + if (out->repaint_status == REPAINT_BEGIN_FROM_IDLE || + out->repaint_status == REPAINT_SCHEDULED || + out->repaint_status == REPAINT_AWAITING_COMPLETION) { + any_active = true; + break; + } + } + + if (any_active) { + output->repaint_status = REPAINT_DEFERRED; + return; + } } output->repaint_status = REPAINT_BEGIN_FROM_IDLE;