diff options
author | okan <okan> | 2015-08-21 15:52:49 +0000 |
---|---|---|
committer | okan <okan> | 2015-08-21 15:52:49 +0000 |
commit | 871c9f24ba413a7c528ddff2d5c4c8f1601364f3 (patch) | |
tree | 8a9d22031c8ccf85297376e52df5abc2c1945f61 | |
parent | 54bbd88e5108cc44822763038bb9bebb4cf4dcbb (diff) | |
download | cwm-871c9f24ba413a7c528ddff2d5c4c8f1601364f3.tar.gz cwm-871c9f24ba413a7c528ddff2d5c4c8f1601364f3.tar.xz cwm-871c9f24ba413a7c528ddff2d5c4c8f1601364f3.zip |
Bring group and client cycle closer together.
-rw-r--r-- | client.c | 22 | ||||
-rw-r--r-- | group.c | 54 |
2 files changed, 45 insertions, 31 deletions
diff --git a/client.c b/client.c index cbf2cb2..f75a804 100644 --- a/client.c +++ b/client.c @@ -647,7 +647,7 @@ match: void client_cycle(struct screen_ctx *sc, int flags) { - struct client_ctx *oldcc, *newcc; + struct client_ctx *newcc, *oldcc; int again = 1; if (TAILQ_EMPTY(&sc->clientq)) @@ -655,16 +655,16 @@ client_cycle(struct screen_ctx *sc, int flags) oldcc = client_current(); if (oldcc == NULL) - oldcc = ((flags & CWM_RCYCLE) ? + oldcc = (flags & CWM_RCYCLE) ? TAILQ_LAST(&sc->clientq, client_ctx_q) : - TAILQ_FIRST(&sc->clientq)); + TAILQ_FIRST(&sc->clientq); newcc = oldcc; while (again) { again = 0; - newcc = ((flags & CWM_RCYCLE) ? client_prev(newcc) : - client_next(newcc)); + newcc = (flags & CWM_RCYCLE) ? client_prev(newcc) : + client_next(newcc); /* Only cycle visible and non-ignored windows. */ if ((newcc->flags & (CLIENT_HIDDEN|CLIENT_IGNORE)) @@ -705,20 +705,20 @@ static struct client_ctx * client_next(struct client_ctx *cc) { struct screen_ctx *sc = cc->sc; - struct client_ctx *ccc; + struct client_ctx *newcc; - return(((ccc = TAILQ_NEXT(cc, entry)) != NULL) ? - ccc : TAILQ_FIRST(&sc->clientq)); + return(((newcc = TAILQ_NEXT(cc, entry)) != NULL) ? + newcc : TAILQ_FIRST(&sc->clientq)); } static struct client_ctx * client_prev(struct client_ctx *cc) { struct screen_ctx *sc = cc->sc; - struct client_ctx *ccc; + struct client_ctx *newcc; - return(((ccc = TAILQ_PREV(cc, client_ctx_q, entry)) != NULL) ? - ccc : TAILQ_LAST(&sc->clientq, client_ctx_q)); + return(((newcc = TAILQ_PREV(cc, client_ctx_q, entry)) != NULL) ? + newcc : TAILQ_LAST(&sc->clientq, client_ctx_q)); } static void diff --git a/group.c b/group.c index 1bf2fd7..bbcd6cf 100644 --- a/group.c +++ b/group.c @@ -32,6 +32,8 @@ #include "calmwm.h" +static struct group_ctx *group_next(struct group_ctx *); +static struct group_ctx *group_prev(struct group_ctx *); static void group_assign(struct group_ctx *, struct client_ctx *); static void group_restack(struct group_ctx *); static void group_setactive(struct group_ctx *); @@ -255,36 +257,28 @@ group_only(struct screen_ctx *sc, int idx) } } -/* - * Cycle through active groups. If none exist, then just stay put. - */ void group_cycle(struct screen_ctx *sc, int flags) { - struct group_ctx *gc, *showgroup = NULL; + struct group_ctx *newgc, *oldgc, *showgroup = NULL; - if (((gc = sc->group_active)) == NULL) - errx(1, "group_cycle: no active group"); + oldgc = sc->group_active; + newgc = oldgc; for (;;) { - gc = (flags & CWM_RCYCLE) ? TAILQ_PREV(gc, group_ctx_q, - entry) : TAILQ_NEXT(gc, entry); - if (gc == NULL) - gc = (flags & CWM_RCYCLE) ? TAILQ_LAST(&sc->groupq, - group_ctx_q) : TAILQ_FIRST(&sc->groupq); - if (gc == sc->group_active) + newgc = (flags & CWM_RCYCLE) ? group_prev(newgc) : + group_next(newgc); + + if (newgc == oldgc) break; - if (!group_holds_only_sticky(gc) && showgroup == NULL) - showgroup = gc; - else if (!group_holds_only_hidden(gc)) - group_hide(gc); + if (!group_holds_only_sticky(newgc) && showgroup == NULL) + showgroup = newgc; + else if (!group_holds_only_hidden(newgc)) + group_hide(newgc); } - if (showgroup == NULL) - return; - - group_hide(sc->group_active); + group_hide(oldgc); if (group_holds_only_hidden(showgroup)) group_show(showgroup); @@ -292,6 +286,26 @@ group_cycle(struct screen_ctx *sc, int flags) group_setactive(showgroup); } +static struct group_ctx * +group_next(struct group_ctx *gc) +{ + struct screen_ctx *sc = gc->sc; + struct group_ctx *newgc; + + return(((newgc = TAILQ_NEXT(gc, entry)) != NULL) ? + newgc : TAILQ_FIRST(&sc->groupq)); +} + +static struct group_ctx * +group_prev(struct group_ctx *gc) +{ + struct screen_ctx *sc = gc->sc; + struct group_ctx *newgc; + + return(((newgc = TAILQ_PREV(gc, group_ctx_q, entry)) != NULL) ? + newgc : TAILQ_LAST(&sc->groupq, group_ctx_q)); +} + void group_alltoggle(struct screen_ctx *sc) { |