From 0d7b254fd98f02a40a2aabe46007fb9c86cd38cb Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Tue, 10 Sep 2024 00:25:36 +0100 Subject: [PATCH] core: queue update and redraw when wm tree becomes consistent When the wm tree is not consistent, there might be certain updates we can't do (e.g. refreshing window leaders). So once the wm tree becomes consistent we should retry. Signed-off-by: Yuxuan Shui --- src/picom.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/picom.c b/src/picom.c index aa1880cc13..2afb8be8cc 100644 --- a/src/picom.c +++ b/src/picom.c @@ -1448,6 +1448,8 @@ static void unredirect(session_t *ps) { /// keeps an internal queue of events, so we have to be 100% sure no events are /// left in that queue before we go to sleep. static void handle_x_events(struct session *ps) { + bool wm_was_consistent = wm_is_consistent(ps->wm); + if (ps->vblank_scheduler) { vblank_handle_x_events(ps->vblank_scheduler); } @@ -1478,6 +1480,12 @@ static void handle_x_events(struct session *ps) { log_fatal("X11 server connection broke (error %d)", err); exit(1); } + + if (wm_is_consistent(ps->wm) != wm_was_consistent && !wm_was_consistent) { + log_debug("Window tree has just become consistent, queueing redraw."); + ps->pending_updates = true; + queue_redraw(ps); + } } static void handle_x_events_ev(EV_P attr_unused, ev_prepare *w, int revents attr_unused) {