floating_enable: change reassign logic
This allows the floating container's top left corner to be mapped outside any output as long as they are contained partially by one. This, for example, will allow: mpv --geometry +1+1 video.mp4 For windows mapped to (0, 0) see comment in floating.c:270-273: /* Some clients (like GIMP’s color picker window) get mapped * to (0, 0), so we push them to a reasonable position * (centered over their leader) */ The floating_reassign_ws call is removed since we try to place the new floating container in the current output: /* Sanity check: Are the coordinates on the appropriate output? If not, we * need to change them */ Fixes #1341
This commit is contained in:
parent
8a3ef3a81b
commit
128122e766
|
@ -284,10 +284,7 @@ void floating_enable(Con *con, bool automatic) {
|
||||||
|
|
||||||
/* Sanity check: Are the coordinates on the appropriate output? If not, we
|
/* Sanity check: Are the coordinates on the appropriate output? If not, we
|
||||||
* need to change them */
|
* need to change them */
|
||||||
Output *current_output = get_output_containing(nc->rect.x +
|
Output *current_output = get_output_from_rect(nc->rect);
|
||||||
(nc->rect.width / 2),
|
|
||||||
nc->rect.y + (nc->rect.height / 2));
|
|
||||||
|
|
||||||
Con *correct_output = con_get_output(ws);
|
Con *correct_output = con_get_output(ws);
|
||||||
if (!current_output || current_output->con != correct_output) {
|
if (!current_output || current_output->con != correct_output) {
|
||||||
DLOG("This floating window is on the wrong output, fixing coordinates (currently (%d, %d))\n",
|
DLOG("This floating window is on the wrong output, fixing coordinates (currently (%d, %d))\n",
|
||||||
|
@ -295,11 +292,13 @@ void floating_enable(Con *con, bool automatic) {
|
||||||
|
|
||||||
/* If moving from one output to another, keep the relative position
|
/* If moving from one output to another, keep the relative position
|
||||||
* consistent (e.g. a centered dialog will remain centered). */
|
* consistent (e.g. a centered dialog will remain centered). */
|
||||||
if (current_output)
|
if (current_output) {
|
||||||
floating_fix_coordinates(nc, ¤t_output->con->rect, &correct_output->rect);
|
floating_fix_coordinates(nc, ¤t_output->con->rect, &correct_output->rect);
|
||||||
else {
|
/* Make sure that the result is in the correct output. */
|
||||||
nc->rect.x = correct_output->rect.x;
|
current_output = get_output_from_rect(nc->rect);
|
||||||
nc->rect.y = correct_output->rect.y;
|
}
|
||||||
|
if (!current_output || current_output->con != correct_output) {
|
||||||
|
floating_center(nc, ws->rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,21 +319,6 @@ void floating_enable(Con *con, bool automatic) {
|
||||||
if (set_focus)
|
if (set_focus)
|
||||||
con_activate(con);
|
con_activate(con);
|
||||||
|
|
||||||
/* 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)) {
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sanitize coordinates: Check if they are on any output */
|
|
||||||
if (get_output_containing(nc->rect.x, nc->rect.y) != NULL) {
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
ELOG("No output found at destination coordinates, centering floating window on current ws\n");
|
|
||||||
floating_center(nc, ws->rect);
|
|
||||||
|
|
||||||
done:
|
|
||||||
floating_set_hint_atom(nc, true);
|
floating_set_hint_atom(nc, true);
|
||||||
ipc_send_window_event("floating", con);
|
ipc_send_window_event("floating", con);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue