From: Fernando Tarlá Cardoso Lemos Date: Sun, 29 Jan 2012 18:22:43 +0000 (-0200) Subject: Fix the coords of floating cons when moving workspaces. X-Git-Tag: 4.2~75 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=36a1a8282f99bbfd905d97b44a091a37f768bf88;p=i3%2Fi3 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. --- diff --git a/src/commands.c b/src/commands.c index f570d6d8..da8bccba 100644 --- a/src/commands.c +++ b/src/commands.c @@ -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. */