aboutsummaryrefslogtreecommitdiff
path: root/dwl.c
diff options
context:
space:
mode:
Diffstat (limited to 'dwl.c')
-rw-r--r--dwl.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/dwl.c b/dwl.c
index b5478a7..67d909a 100644
--- a/dwl.c
+++ b/dwl.c
@@ -1640,28 +1640,31 @@ xytomon(double x, double y)
void
zoom(const Arg *arg)
{
- unsigned int n = 0;
Client *c, *sel = selclient();
if (!sel || !selmon->lt[selmon->sellt]->arrange || sel->isfloating)
return;
+ /* Search for the first tiled window that is not sel, marking sel as
+ * NULL if we pass it along the way */
wl_list_for_each(c, &clients, link)
if (VISIBLEON(c, selmon) && !c->isfloating) {
- if (++n == 1 && c == sel)
- sel = NULL;
- else if (n == 2) {
- if (!sel)
- sel = c;
+ if (c != sel)
break;
- }
+ sel = NULL;
}
- if (n == 1)
+ /* Return if no other tiled window was found */
+ if (&c->link == &clients)
return;
+ /* If we passed sel, move c to the front; otherwise, move sel to the
+ * front */
+ if (!sel)
+ sel = c;
wl_list_remove(&sel->link);
wl_list_insert(&clients, &sel->link);
+
focusclient(sel, NULL, 1);
arrange(selmon);
}