extern xcb_connection_t *conn;
void floating_enable(Con *con, bool automatic) {
- bool set_focus = true;
+ bool set_focus = (con == focused);
+
+ if (con->parent && con->parent->type == CT_DOCKAREA) {
+ LOG("Container is a dock window, not enabling floating mode.\n");
+ return;
+ }
if (con_is_floating(con)) {
LOG("Container is already in floating mode, not doing anything.\n");
nc->rect.x, nc->rect.y);
/* Take the relative coordinates of the current output, then add them
* to the coordinate space of the correct output */
- uint32_t rel_x = (nc->rect.x - current_output->con->rect.x);
- uint32_t rel_y = (nc->rect.y - current_output->con->rect.y);
+ uint32_t rel_x = (nc->rect.x - (current_output ? current_output->con->rect.x : 0));
+ uint32_t rel_y = (nc->rect.y - (current_output ? current_output->con->rect.y : 0));
nc->rect.x = correct_output->rect.x + rel_x;
nc->rect.y = correct_output->rect.y + rel_y;
}
render_con(nc, false);
render_con(con, false);
- // TODO: don’t influence focus handling when Con was not focused before.
if (set_focus)
con_focus(con);
Con *content = output_get_content(output->con);
Con *ws = TAILQ_FIRST(&(content->focus_head));
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, false, true);
con_focus(con_descend_focused(con));
return true;
}