randr_disable_output: Always restore focus

con_detach and con_attach modify the focus stack.

This will make sure that the currently focused workspace will remain
focused after disabling an output.
This commit is contained in:
Orestis Floros 2018-09-11 20:09:16 +03:00
parent 4d21f4cfc2
commit db3b9e4187
No known key found for this signature in database
GPG Key ID: E9AD9F32E401E38F
1 changed files with 6 additions and 14 deletions

View File

@ -942,13 +942,8 @@ void randr_disable_output(Output *output) {
if (output->con != NULL) { if (output->con != NULL) {
/* We need to move the workspaces from the disappearing output to the first output */ /* We need to move the workspaces from the disappearing output to the first output */
/* 1: Get the con to focus next, if the disappearing ws is focused */ /* 1: Get the con to focus next */
Con *next = NULL; Con *next = focused;
if (TAILQ_FIRST(&(croot->focus_head)) == output->con) {
DLOG("This output (%p) was focused! Getting next\n", output->con);
next = focused;
DLOG("next = %p\n", next);
}
/* 2: iterate through workspaces and re-assign them, fixing the coordinates /* 2: iterate through workspaces and re-assign them, fixing the coordinates
* of floating containers as we go */ * of floating containers as we go */
@ -971,15 +966,12 @@ void randr_disable_output(Output *output) {
TAILQ_FOREACH(floating_con, &(current->floating_head), floating_windows) { TAILQ_FOREACH(floating_con, &(current->floating_head), floating_windows) {
floating_fix_coordinates(floating_con, &(output->con->rect), &(first->con->rect)); floating_fix_coordinates(floating_con, &(output->con->rect), &(first->con->rect));
} }
DLOG("Done, next\n");
} }
DLOG("re-attached all workspaces\n");
if (next) { /* Restore focus after con_detach / con_attach */
DLOG("now focusing next = %p\n", next); DLOG("now focusing next = %p\n", next);
con_activate(next); con_focus(next);
workspace_show(con_get_workspace(next)); workspace_show(con_get_workspace(next));
}
/* 3: move the dock clients to the first output */ /* 3: move the dock clients to the first output */
Con *child; Con *child;