This fixes a regression introduced in
6d983b5. Consider 2 outputs:
fake-0: workspace '1'
fake-1: workspaces '2','3'
Workspace 1 focused, workspace 2 visible.
Open a floating window in 1 and move it to 3. Now, the floating window
appears in workspace 2 and disappears once focus is switched to
that workspace.
Instead of focusing 'old_focus' which might refer to a container in a
different output, we should restore focus by focusing the previously
focused workspace of the output.
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));
}
}