From 60532a90e7f575f5d941eca1076282b78b3510db Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Mon, 18 Apr 2011 18:44:39 +0200 Subject: [PATCH] Bugfix: Assign floating cons to correct workspace when moving between monitors (Thanks dothebart) Fixes: #371 --- src/floating.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/floating.c b/src/floating.c index 6cc9a168..0f653430 100644 --- a/src/floating.c +++ b/src/floating.c @@ -235,6 +235,30 @@ DRAGGING_CB(drag_window_callback) { render_con(con, false); x_push_node(con, true); xcb_flush(conn); + + /* Check if we cross workspace boundaries while moving */ + Output *output = get_output_containing( + con->rect.x + (con->rect.width / 2), + con->rect.y + (con->rect.height / 2)); + + if (!output) { + ELOG("No output found at destination coordinates?\n"); + return; + } + + if (con_get_output(con) == output->con) { + DLOG("still the same ws\n"); + return; + } + + DLOG("Need to re-assign!\n"); + + Con *content = output_get_content(output->con); + Con *ws = TAILQ_FIRST(&(content->nodes_head)); + DLOG("Moving con %p / %s to workspace %p / %s\n", con, con->name, ws, ws->name); + con_move_to_workspace(con, ws); + con_focus(con_descend_focused(con)); + tree_render(); } /* -- 2.39.5