fix-bug-515: always adjust floating position when moving to another output

Floating con position needs to be adjusted when moving to another
output, regardless of whether or not the target workspace is visible.
This commit is contained in:
Peter Bui 2011-09-11 20:14:20 -04:00 committed by Michael Stapelberg
parent 1fbe070f03
commit a5012f6021
1 changed files with 16 additions and 15 deletions

View File

@ -608,29 +608,30 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
next = ws;
}
/* If moving to a visible workspace, call show so it can be considered
* focused. Must do before attaching because workspace_show checks to see
* if focused container is in its area. */
if (source_output != dest_output &&
workspace_is_visible(workspace)) {
workspace_show(workspace->name);
if (source_output != dest_output) {
/* Take the relative coordinates of the current output, then add them
* to the coordinate space of the correct output */
if (fix_coordinates && con->type == CT_FLOATING_CON) {
DLOG("Floating window, fixing coordinates\n");
/* Take the relative coordinates of the current output, then add them
* to the coordinate space of the correct output */
uint32_t rel_x = (con->rect.x - source_output->rect.x);
uint32_t rel_y = (con->rect.y - source_output->rect.y);
con->rect.x = dest_output->rect.x + rel_x;
con->rect.y = dest_output->rect.y + rel_y;
} else DLOG("Not fixing coordinates, fix_coordinates flag = %d\n", fix_coordinates);
/* Dont warp if told so (when dragging floating windows with the
* mouse for example) */
if (dont_warp)
x_set_warp_to(NULL);
else
x_set_warp_to(&(con->rect));
/* If moving to a visible workspace, call show so it can be considered
* focused. Must do before attaching because workspace_show checks to see
* if focused container is in its area. */
if (workspace_is_visible(workspace)) {
workspace_show(workspace->name);
/* Dont warp if told so (when dragging floating windows with the
* mouse for example) */
if (dont_warp)
x_set_warp_to(NULL);
else
x_set_warp_to(&(con->rect));
}
}
DLOG("Re-attaching container to %p / %s\n", next, next->name);