From 36a1a8282f99bbfd905d97b44a091a37f768bf88 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fernando=20Tarl=C3=A1=20Cardoso=20Lemos?= Date: Sun, 29 Jan 2012 16:22:43 -0200 Subject: [PATCH] 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. --- src/commands.c | 7 +++++++ 1 file changed, 7 insertions(+) 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. */ -- 2.39.5