X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcon.c;h=21d2f097af4d667c7ccd0b94afa7d25b209e1cb7;hb=64c493ef1fb10a42652a836122e1a34ade17bc02;hp=a620a57106db4866bebaa0219707e404006d4d9c;hpb=18f705a978c2a5fe8999023173049753a5a2f677;p=i3%2Fi3 diff --git a/src/con.c b/src/con.c index a620a571..21d2f097 100644 --- a/src/con.c +++ b/src/con.c @@ -312,7 +312,7 @@ bool con_has_managed_window(Con *con) { return (con != NULL && con->window != NULL && con->window->id != XCB_WINDOW_NONE && con_get_workspace(con) != NULL); } -/** +/* * Returns true if this node has regular or floating children. * */ @@ -526,7 +526,7 @@ Con *con_get_fullscreen_covering_ws(Con *ws) { return fs; } -/** +/* * Returns true if the container is internal, such as __i3_scratch * */ @@ -896,7 +896,7 @@ int con_num_children(Con *con) { return children; } -/** +/* * Returns the number of visible non-floating children of this container. * For example, if the container contains a hsplit which has two children, * this will return 2 instead of 1. @@ -936,6 +936,10 @@ int con_num_windows(Con *con) { num += con_num_windows(current); } + TAILQ_FOREACH(current, &(con->floating_head), floating_windows) { + num += con_num_windows(current); + } + return num; } @@ -1230,14 +1234,12 @@ static bool _con_move_to_con(Con *con, Con *target, bool behind_focused, bool fi Con *old_focus = focused; con_activate(con_descend_focused(con)); - /* Restore focus if the output's focused workspace has changed. */ - if (con_get_workspace(focused) != old_focus_ws) { - con_focus(old_focus); - } - - /* Restore focus to the currently focused container. */ if (old_focus_ws == current_ws && old_focus->type != CT_WORKSPACE) { + /* Restore focus to the currently focused container. */ con_activate(old_focus); + } else if (con_get_workspace(focused) != old_focus_ws) { + /* Restore focus if the output's focused workspace has changed. */ + con_focus(con_descend_focused(old_focus_ws)); } }