From: Ingo Bürk Date: Fri, 23 Mar 2018 18:17:12 +0000 (+0100) Subject: Merge pull request #3184 from orestisf1993/issue-1341 X-Git-Tag: 4.16~120 X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=commitdiff_plain;h=83ac1c0e72f314152e559d33f062677dc89cd99e;hp=-c Merge pull request #3184 from orestisf1993/issue-1341 floating_enable & floating_maybe_reassign_ws changes --- 83ac1c0e72f314152e559d33f062677dc89cd99e diff --combined src/floating.c index 2130d673,13b30f16..fc68df8e --- a/src/floating.c +++ b/src/floating.c @@@ -284,10 -284,7 +284,7 @@@ void floating_enable(Con *con, bool aut /* 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 +292,13 @@@ /* 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 +319,6 @@@ 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 +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"); @@@ -864,12 -846,12 +846,12 @@@ drag_result_t drag_pointer(Con *con, co * outputs. * */ -void floating_reposition(Con *con, Rect newrect) { +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; + return false; } con->rect = newrect; @@@ -881,7 -863,6 +863,7 @@@ con->scratchpad_state = SCRATCHPAD_CHANGED; tree_render(); + return true; } /*