Fix the coords of floating cons when moving workspaces.

Fixes floating containers seemingly showing up in the wrong
workspace after moving workspaces containing floating containers.

We must *always* fix the coordinates of floating containers when
moving workspaces across outputs. That's because the coordinates
of floating containers are *not* relative to the workspaces.
This commit is contained in:
Fernando Tarlá Cardoso Lemos 2012-01-29 16:22:43 -02:00 committed by Michael Stapelberg
parent 6d0dcf06ef
commit 36a1a8282f
1 changed files with 7 additions and 0 deletions

View File

@ -822,6 +822,7 @@ char *cmd_move_workspace_to_output(Match *current_match, char *name) {
ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"init\"}");
}
/* detach from the old output and attach to the new output */
bool workspace_was_visible = workspace_is_visible(ws);
Con *old_content = ws->parent;
con_detach(ws);
@ -833,6 +834,12 @@ char *cmd_move_workspace_to_output(Match *current_match, char *name) {
workspace_show(focus_ws);
}
con_attach(ws, content, false);
/* fix the coordinates of the floating containers */
Con *floating_con;
TAILQ_FOREACH(floating_con, &(ws->floating_head), floating_windows)
floating_fix_coordinates(floating_con, &(old_content->rect), &(content->rect));
ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"move\"}");
if (workspace_was_visible) {
/* Focus the moved workspace on the destination output. */