Merge pull request #3184 from orestisf1993/issue-1341
floating_enable & floating_maybe_reassign_ws changes
This commit is contained in:
@ -284,10 +284,7 @@ void floating_enable(Con *con, bool automatic) {
|
||||
|
||||
/* Sanity check: Are the coordinates on the appropriate output? If not, we
|
||||
* need to change them */
|
||||
Output *current_output = get_output_containing(nc->rect.x +
|
||||
(nc->rect.width / 2),
|
||||
nc->rect.y + (nc->rect.height / 2));
|
||||
|
||||
Output *current_output = get_output_from_rect(nc->rect);
|
||||
Con *correct_output = con_get_output(ws);
|
||||
if (!current_output || current_output->con != correct_output) {
|
||||
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
|
||||
* 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);
|
||||
else {
|
||||
nc->rect.x = correct_output->rect.x;
|
||||
nc->rect.y = correct_output->rect.y;
|
||||
/* Make sure that the result is in the correct output. */
|
||||
current_output = get_output_from_rect(nc->rect);
|
||||
}
|
||||
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)
|
||||
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);
|
||||
ipc_send_window_event("floating", con);
|
||||
}
|
||||
@ -429,9 +413,7 @@ void floating_raise_con(Con *con) {
|
||||
*
|
||||
*/
|
||||
bool floating_maybe_reassign_ws(Con *con) {
|
||||
Output *output = get_output_containing(
|
||||
con->rect.x + (con->rect.width / 2),
|
||||
con->rect.y + (con->rect.height / 2));
|
||||
Output *output = get_output_from_rect(con->rect);
|
||||
|
||||
if (!output) {
|
||||
ELOG("No output found at destination coordinates?\n");
|
||||
@ -867,7 +849,7 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
|
||||
bool floating_reposition(Con *con, Rect newrect) {
|
||||
/* Sanity check: Are the new coordinates on any output? If not, we
|
||||
* ignore that request. */
|
||||
if (!contained_by_output(newrect)) {
|
||||
if (!output_containing_rect(newrect)) {
|
||||
ELOG("No output found at destination coordinates. Not repositioning.\n");
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user