return;
}
+ const bool set_focus = (con == focused);
+
Con *ws = con_get_workspace(con);
/* 1: detach from parent container */
con_attach(con, con->parent, false);
con_fix_percent(con->parent);
- // TODO: don’t influence focus handling when Con was not focused before.
- con_focus(con);
+
+ if (set_focus)
+ con_focus(con);
}
/*
/* Check if we cross workspace boundaries while moving */
if (!floating_maybe_reassign_ws(con))
return;
+ /* Ensure not to warp the pointer while dragging */
+ x_set_warp_to(NULL);
tree_render();
}
/* Drag the window */
drag_pointer(con, event, XCB_NONE, BORDER_TOP /* irrelevant */, XCURSOR_CURSOR_MOVE, drag_window_callback, event);
+
+ /* If this is a scratchpad window, don't auto center it from now on. */
+ if (con->scratchpad_state == SCRATCHPAD_FRESH)
+ con->scratchpad_state = SCRATCHPAD_CHANGED;
+
tree_render();
}
struct resize_window_callback_params params = { corner, proportional, event };
drag_pointer(con, event, XCB_NONE, BORDER_TOP /* irrelevant */, cursor, resize_window_callback, ¶ms);
+
+ /* If this is a scratchpad window, don't auto center it from now on. */
+ if (con->scratchpad_state == SCRATCHPAD_FRESH)
+ con->scratchpad_state = SCRATCHPAD_CHANGED;
}
/*
void floating_reposition(Con *con, Rect newrect) {
/* Sanity check: Are the new coordinates on any output? If not, we
* ignore that request. */
- Output *output = get_output_containing(
- newrect.x + (newrect.width / 2),
- newrect.y + (newrect.height / 2));
-
- if (!output) {
+ if (!contained_by_output(newrect)) {
ELOG("No output found at destination coordinates. Not repositioning.\n");
return;
}
con->rect = newrect;
floating_maybe_reassign_ws(con);
+
+ /* If this is a scratchpad window, don't auto center it from now on. */
+ if (con->scratchpad_state == SCRATCHPAD_FRESH)
+ con->scratchpad_state = SCRATCHPAD_CHANGED;
+
tree_render();
}