From 8be379db4d0336a3019422844fcabebbf7f76846 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Fri, 4 Dec 2020 04:16:50 +0000 Subject: [PATCH] win: fix fading always skipped by unmap_win_start Fading skip needs to be based on the original value of w->ever_damaged. Signed-off-by: Yuxuan Shui --- src/win.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/win.c b/src/win.c index 2d54173..e7d6672 100644 --- a/src/win.c +++ b/src/win.c @@ -2233,6 +2233,7 @@ void unmap_win_start(session_t *ps, struct managed_win *w) { assert(false); } + bool was_damaged = w->ever_damaged; w->ever_damaged = false; if (unlikely(w->state == WSTATE_UNMAPPING || w->state == WSTATE_UNMAPPED)) { @@ -2263,13 +2264,11 @@ void unmap_win_start(session_t *ps, struct managed_win *w) { } #endif - if (!ps->redirected || !w->ever_damaged) { + if (!ps->redirected || !was_damaged) { // If we are not redirected, we skip fading because we aren't rendering // anything anyway. - // If the window isn't ever damaged, it won't be painted either (see - // paint_preprocess), so we can skip fading. This is different from - // mapping, because a mapped window could receive damage while it's fading - // in, but an unmapped window couldn't while it's fading out. + // If the window wasn't ever damaged, it shouldn't be painted either. But + // a fading out window is always painted, so we have to skip fading here. CHECK(!win_skip_fading(ps, w)); } }