diff options
-rw-r--r-- | client.c | 24 | ||||
-rw-r--r-- | group.c | 56 |
2 files changed, 47 insertions, 33 deletions
@@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: client.c,v 1.198 2015/07/01 14:36:42 okan Exp $ + * $OpenBSD: client.c,v 1.199 2015/08/21 15:52:49 okan Exp $ */ #include <sys/types.h> @@ -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 @@ -16,7 +16,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: group.c,v 1.112 2015/06/28 19:50:46 okan Exp $ + * $OpenBSD: group.c,v 1.113 2015/08/21 15:52:49 okan Exp $ */ #include <sys/types.h> @@ -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) { |