if (con->window && con->window->leader != XCB_NONE &&
(leader = con_by_window_id(con->window->leader)) != NULL) {
DLOG("Centering above leader\n");
- nc->rect.x = leader->rect.x + (leader->rect.width / 2) - (nc->rect.width / 2);
- nc->rect.y = leader->rect.y + (leader->rect.height / 2) - (nc->rect.height / 2);
+ floating_center(nc, leader->rect);
} else {
/* center the window on workspace as fallback */
- nc->rect.x = ws->rect.x + (ws->rect.width / 2) - (nc->rect.width / 2);
- nc->rect.y = ws->rect.y + (ws->rect.height / 2) - (nc->rect.height / 2);
+ floating_center(nc, ws->rect);
}
}
/* 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))
+ if (floating_maybe_reassign_ws(nc)) {
+ ipc_send_window_event("floating", con);
return;
+ }
/* Sanitize coordinates: Check if they are on any output */
- if (get_output_containing(nc->rect.x, nc->rect.y) != NULL)
+ if (get_output_containing(nc->rect.x, nc->rect.y) != NULL) {
+ ipc_send_window_event("floating", con);
return;
+ }
ELOG("No output found at destination coordinates, centering floating window on current ws\n");
- nc->rect.x = ws->rect.x + (ws->rect.width / 2) - (nc->rect.width / 2);
- nc->rect.y = ws->rect.y + (ws->rect.height / 2) - (nc->rect.height / 2);
+ floating_center(nc, ws->rect);
+
+ ipc_send_window_event("floating", con);
}
void floating_disable(Con *con, bool automatic) {
if (set_focus)
con_focus(con);
+
+ ipc_send_window_event("floating", con);
}
/*
return true;
}
+/*
+ * Centers a floating con above the specified rect.
+ *
+ */
+void floating_center(Con *con, Rect rect) {
+ con->rect.x = rect.x + (rect.width / 2) - (con->rect.width / 2);
+ con->rect.y = rect.y + (rect.height / 2) - (con->rect.height / 2);
+}
+
DRAGGING_CB(drag_window_callback) {
const struct xcb_button_press_event_t *event = extra;
dest_height = max(dest_height, (int)(dest_width / ratio));
}
- con->rect = (Rect) {dest_x, dest_y, dest_width, dest_height};
+ con->rect = (Rect){dest_x, dest_y, dest_width, dest_height};
/* Obey window size */
floating_check_size(con);