]> git.sur5r.net Git - i3/i3/blobdiff - src/floating.c
Merge branch 'master' into next
[i3/i3] / src / floating.c
index 2abb223d787d119d7aa7dc9091223dafedec425f..13c84e47890116a3749d0d5046403757c50bf117 100644 (file)
 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");
@@ -146,8 +151,8 @@ void floating_enable(Con *con, bool automatic) {
              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;
     }
@@ -174,7 +179,6 @@ void floating_enable(Con *con, bool automatic) {
     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);
 
@@ -286,7 +290,7 @@ bool floating_maybe_reassign_ws(Con *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;
 }