From 3d5af35fa45b9d160b37f7a56c00222d56febf18 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Mon, 18 Apr 2011 19:36:10 +0200 Subject: [PATCH] Bugfix: Center floating windows with invalid coordinates on current ws --- src/floating.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/floating.c b/src/floating.c index 78804c8e..1d08ec9e 100644 --- a/src/floating.c +++ b/src/floating.c @@ -157,7 +157,19 @@ void floating_enable(Con *con, bool automatic) { if (set_focus) con_focus(con); - floating_maybe_reassign_ws(nc); + /* Check if we need to re-assign it to a different workspace because of its + * coordinates and exit if that was done successfully. */ + if (floating_maybe_reassign_ws(nc)) + return; + + /* Sanitize coordinates: Check if they are on any output */ + if (get_output_containing(nc->rect.x, nc->rect.y) != NULL) + return; + + ELOG("No output found at destination coordinates, centering floating window on current ws\n"); + Con *ws = nc->parent; + nc->rect.x = ws->rect.x + (ws->rect.width / 2) - (nc->rect.width / 2); + nc->rect.y = ws->rect.y + (ws->rect.height / 2) - (nc->rect.height / 2); } void floating_disable(Con *con, bool automatic) {