Bugfix: Correctly warp floating windows when using the 'move' command

This commit is contained in:
Michael Stapelberg 2011-08-24 22:59:46 +02:00
parent cd2d7ef484
commit 698d97cd02
4 changed files with 15 additions and 7 deletions

View File

@ -131,10 +131,14 @@ void con_toggle_fullscreen(Con *con, int fullscreen_mode);
/** /**
* Moves the given container to the currently focused container on the given * Moves the given container to the currently focused container on the given
* workspace. * workspace.
*
* The dont_warp flag disables pointer warping and will be set when this
* function is called while dragging a floating window.
*
* TODO: is there a better place for this function? * TODO: is there a better place for this function?
* *
*/ */
void con_move_to_workspace(Con *con, Con *workspace); void con_move_to_workspace(Con *con, Con *workspace, bool dont_warp);
/** /**
* Returns the orientation of the given container (for stacked containers, * Returns the orientation of the given container (for stacked containers,

View File

@ -699,7 +699,7 @@ move:
TAILQ_FOREACH(current, &owindows, owindows) { TAILQ_FOREACH(current, &owindows, owindows) {
printf("matching: %p / %s\n", current->con, current->con->name); printf("matching: %p / %s\n", current->con, current->con->name);
con_move_to_workspace(current->con, ws); con_move_to_workspace(current->con, ws, false);
} }
tree_render(); tree_render();

View File

@ -540,10 +540,14 @@ update_netwm_state:
/* /*
* Moves the given container to the currently focused container on the given * Moves the given container to the currently focused container on the given
* workspace. * workspace.
*
* The dont_warp flag disables pointer warping and will be set when this
* function is called while dragging a floating window.
*
* TODO: is there a better place for this function? * TODO: is there a better place for this function?
* *
*/ */
void con_move_to_workspace(Con *con, Con *workspace) { void con_move_to_workspace(Con *con, Con *workspace, bool dont_warp) {
if (con->type == CT_WORKSPACE) { if (con->type == CT_WORKSPACE) {
DLOG("Moving workspaces is not yet implemented.\n"); DLOG("Moving workspaces is not yet implemented.\n");
return; return;
@ -602,9 +606,9 @@ void con_move_to_workspace(Con *con, Con *workspace) {
con->rect.y = dest_output->rect.y + rel_y; con->rect.y = dest_output->rect.y + rel_y;
} }
/* Unset warp_to if target con is floating. Otherwise, set warp_to to /* Dont warp if told so (when dragging floating windows with the
* current target container. */ * mouse for example) */
if (con->type == CT_FLOATING_CON) if (dont_warp)
x_set_warp_to(NULL); x_set_warp_to(NULL);
else else
x_set_warp_to(&(con->rect)); x_set_warp_to(&(con->rect));

View File

@ -282,7 +282,7 @@ bool floating_maybe_reassign_ws(Con *con) {
Con *content = output_get_content(output->con); Con *content = output_get_content(output->con);
Con *ws = TAILQ_FIRST(&(content->focus_head)); Con *ws = TAILQ_FIRST(&(content->focus_head));
DLOG("Moving con %p / %s to workspace %p / %s\n", con, con->name, ws, ws->name); DLOG("Moving con %p / %s to workspace %p / %s\n", con, con->name, ws, ws->name);
con_move_to_workspace(con, ws); con_move_to_workspace(con, ws, true);
con_focus(con_descend_focused(con)); con_focus(con_descend_focused(con));
return true; return true;
} }