summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOkan Demirmen <okan@cvs.openbsd.org>2015-08-21 15:52:50 +0000
committerOkan Demirmen <okan@cvs.openbsd.org>2015-08-21 15:52:50 +0000
commit3fc9d10a3e177a15a4df06fd7ba9be6ee5fb2fc7 (patch)
tree0b773a92a063f31fc4767b66f713cc2cdc3befe4
parent4e4d1594c02c734e7c4cd4678a4f2413dc198fc3 (diff)
Bring group and client cycle closer together.
-rw-r--r--app/cwm/client.c24
-rw-r--r--app/cwm/group.c56
2 files changed, 47 insertions, 33 deletions
diff --git a/app/cwm/client.c b/app/cwm/client.c
index 45f65b2ae..3506d4a23 100644
--- a/app/cwm/client.c
+++ b/app/cwm/client.c
@@ -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
diff --git a/app/cwm/group.c b/app/cwm/group.c
index d2c0bf88d..dbaf98273 100644
--- a/app/cwm/group.c
+++ b/app/cwm/group.c
@@ -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)
{