]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Don’t invoke resizing when clicking on the decoration in a > 1 child split...
authorMichael Stapelberg <michael@stapelberg.de>
Thu, 27 Oct 2011 19:36:55 +0000 (20:36 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Thu, 27 Oct 2011 19:36:55 +0000 (20:36 +0100)
Fixes: #534
src/click.c

index 04f5b871db5cc62966e66b763b41c012d21e6829..8121e160cd73261da8ca99c329580255f47defa9 100644 (file)
@@ -121,8 +121,30 @@ static bool tiling_resize(Con *con, xcb_button_press_event_t *event, click_desti
     DLOG("BORDER x = %d, y = %d for con %p, window 0x%08x\n",
             event->event_x, event->event_y, con, event->event);
     DLOG("checks for right >= %d\n", con->window_rect.x + con->window_rect.width);
-    if (dest == CLICK_DECORATION)
+    if (dest == CLICK_DECORATION) {
+        /* The user clicked on a window decoration. We ignore the following case:
+         * The container is a h-split, tabbed or stacked container with > 1
+         * window. Decorations will end up next to each other and the user
+         * expects to switch to a window by clicking on its decoration. */
+
+        /* To make the check actually work in case of a h-split container, we
+         * need to find the resize con in this function (as opposed to in
+         * tiling_resize_for_border()). The con which was passed is the actualy
+         * child window, not the split container. */
+        while (con->type != CT_WORKSPACE &&
+               con->type != CT_FLOATING_CON &&
+               con->parent->orientation != VERT)
+            con = con->parent;
+
+        if ((con->layout == L_STACKED ||
+             con->layout == L_TABBED ||
+             con->orientation == HORIZ) &&
+            con_num_children(con) > 1) {
+            DLOG("Not handling this resize, this container has > 1 child.\n");
+            return false;
+        }
         return tiling_resize_for_border(con, BORDER_TOP, event);
+    }
 
     if (event->event_x >= 0 && event->event_x <= bsr.x &&
         event->event_y >= bsr.y && event->event_y <= con->rect.height + bsr.height)