From b0b195318c9c264e1b053f286e61df3ef854cff0 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sun, 6 Mar 2011 21:49:17 +0100 Subject: [PATCH] rendering: bugfix: stack child windows of stacked/tabbed cons according to their focus fixes focusing the wrong window after closing a con --- src/render.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/render.c b/src/render.c index 499c62a3..37ee6e47 100644 --- a/src/render.c +++ b/src/render.c @@ -323,13 +323,17 @@ void render_con(Con *con, bool render_fullscreen) { /* in a stacking or tabbed container, we ensure the focused client is raised */ if (con->layout == L_STACKED || con->layout == L_TABBED) { - Con *foc = TAILQ_FIRST(&(con->focus_head)); - if (foc != TAILQ_END(&(con->focus_head))) { - DLOG("con %p is stacking, raising %p\n", con, foc); - x_raise_con(foc); - /* by rendering the stacked container again, we handle the case - * that we have a non-leaf-container inside the stack. */ - render_con(foc, false); + DLOG("stacked/tabbed, raising focused reverse\n"); + TAILQ_FOREACH_REVERSE(child, &(con->focus_head), focus_head, focused) + x_raise_con(child); + DLOG("done\n"); + if ((child = TAILQ_FIRST(&(con->focus_head)))) { + DLOG("con %p is stacking, raising %p\n", con, child); + /* By rendering the stacked container again, we handle the case + * that we have a non-leaf-container inside the stack. In that + * case, the children of the non-leaf-container need to be raised + * aswell. */ + render_con(child, false); } } } -- 2.39.5