]> git.sur5r.net Git - i3/i3/commitdiff
Focus the relevant workspace when clicking any container.
authorDeiz <silverwraithii@gmail.com>
Sun, 30 Sep 2012 09:26:38 +0000 (05:26 -0400)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 2 Oct 2012 22:15:55 +0000 (00:15 +0200)
src/click.c

index a1da00ac90296758e4deafa32ca8be1bc0467da5..13f51acf398ba3f9929721b1111960ba3d363446 100644 (file)
@@ -179,6 +179,22 @@ static int route_click(Con *con, xcb_button_press_event_t *event, const bool mod
     DLOG("--> OUTCOME = %p\n", con);
     DLOG("type = %d, name = %s\n", con->type, con->name);
 
+    /* Any click in a workspace should focus that workspace. If the
+     * workspace is on another output we need to do a workspace_show in
+     * order for i3bar (and others) to notice the change in workspace. */
+    Con *ws = con_get_workspace(con);
+    Con *focused_workspace = con_get_workspace(focused);
+
+    if (!ws) {
+        ws = TAILQ_FIRST(&(output_get_content(con_get_output(con))->focus_head));
+        if (!ws)
+            goto done;
+    }
+
+    if (ws != focused_workspace)
+        workspace_show(ws);
+    focused_id = XCB_NONE;
+
     /* don’t handle dockarea cons, they must not be focused */
     if (con->parent->type == CT_DOCKAREA)
         goto done;
@@ -207,15 +223,7 @@ static int route_click(Con *con, xcb_button_press_event_t *event, const bool mod
         goto done;
     }
 
-    /* 2: focus this con. If the workspace is on another output we need to
-     * do a workspace_show in order for i3bar (and others) to notice the
-     * change in workspace. */
-    Con *ws = con_get_workspace(con);
-    Con *focused_workspace = con_get_workspace(focused);
-
-    if (ws != focused_workspace)
-        workspace_show(ws);
-    focused_id = XCB_NONE;
+    /* 2: focus this con. */
     con_focus(con);
 
     /* 3: For floating containers, we also want to raise them on click.