From ec4df3c512927244611d719d5ea4441c955a8aaa Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Tue, 26 Mar 2024 18:51:57 +0000 Subject: [PATCH] win: make sure to skip fading before freeing struct win Fix leaks of animatable user data. Signed-off-by: Yuxuan Shui --- src/event.c | 6 ++++++ src/win.c | 1 + 2 files changed, 7 insertions(+) diff --git a/src/event.c b/src/event.c index df6c981a..072f833b 100644 --- a/src/event.c +++ b/src/event.c @@ -309,6 +309,9 @@ static inline void ev_destroy_notify(session_t *ps, xcb_destroy_notify_event_t * if (!w->managed || !win_as_managed(w)->to_paint) { // If the window wasn't managed, or was already not rendered, // we don't need to fade it out. + if (w->managed) { + win_skip_fading(win_as_managed(w)); + } destroy_win_finish(ps, w); } return; @@ -439,6 +442,9 @@ static inline void ev_reparent_notify(session_t *ps, xcb_reparent_notify_event_t } } destroy_win_start(ps, old_w); + if (old_w->managed) { + win_skip_fading(win_as_managed(old_w)); + } destroy_win_finish(ps, old_w); } diff --git a/src/win.c b/src/win.c index 2dc40706..28911f0f 100644 --- a/src/win.c +++ b/src/win.c @@ -903,6 +903,7 @@ static void unmap_win_finish(session_t *ps, struct managed_win *w) { // Try again at binding images when the window is mapped next time win_clear_flags(w, WIN_FLAGS_IMAGE_ERROR); + assert(w->number_of_animations == 0); } struct window_transition_data {