Bring group and client cycle closer together.

This commit is contained in:
okan 2015-08-21 15:52:49 +00:00
parent 54bbd88e51
commit 871c9f24ba
2 changed files with 45 additions and 31 deletions

View File

@ -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

54
group.c
View File

@ -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)
{