From: Michael Stapelberg Date: Sun, 6 Mar 2011 20:49:17 +0000 (+0100) Subject: rendering: bugfix: stack child windows of stacked/tabbed cons according to their... X-Git-Tag: tree-pr2~6 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b0b195318c9c264e1b053f286e61df3ef854cff0;p=i3%2Fi3 rendering: bugfix: stack child windows of stacked/tabbed cons according to their focus fixes focusing the wrong window after closing a con --- 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); } } }