From 7c45b87622c069a176359df3c632086540a7fe3f Mon Sep 17 00:00:00 2001 From: okan Date: Thu, 7 Mar 2019 14:28:17 +0000 Subject: Teach client_current() to use a screen to find the current client instead of iterating over all (fallback if no screen provided for now). Initially convert trivial uses of client_current(). --- calmwm.h | 2 +- client.c | 17 ++++++++++++----- kbfunc.c | 2 +- xevents.c | 10 +++++----- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/calmwm.h b/calmwm.h index 089a9a2..00f42be 100644 --- a/calmwm.h +++ b/calmwm.h @@ -394,7 +394,7 @@ __dead void usage(void); void client_applysizehints(struct client_ctx *); void client_config(struct client_ctx *); -struct client_ctx *client_current(void); +struct client_ctx *client_current(struct screen_ctx *); void client_cycle(struct screen_ctx *, int); void client_remove(struct client_ctx *); void client_draw_border(struct client_ctx *); diff --git a/client.c b/client.c index 94f295a..0187f4e 100644 --- a/client.c +++ b/client.c @@ -218,7 +218,7 @@ client_setactive(struct client_ctx *cc) if (cc->flags & CLIENT_WM_TAKE_FOCUS) client_msg(cc, cwmh[WM_TAKE_FOCUS], Last_Event_Time); - if ((oldcc = client_current()) != NULL) { + if ((oldcc = client_current(sc)) != NULL) { oldcc->flags &= ~CLIENT_ACTIVE; client_draw_border(oldcc); } @@ -235,16 +235,23 @@ client_setactive(struct client_ctx *cc) } struct client_ctx * -client_current(void) +client_current(struct screen_ctx *sc) { - struct screen_ctx *sc; + struct screen_ctx *_sc; struct client_ctx *cc; - TAILQ_FOREACH(sc, &Screenq, entry) { + if (sc) { TAILQ_FOREACH(cc, &sc->clientq, entry) { if (cc->flags & CLIENT_ACTIVE) return(cc); } + } else { + TAILQ_FOREACH(_sc, &Screenq, entry) { + TAILQ_FOREACH(cc, &_sc->clientq, entry) { + if (cc->flags & CLIENT_ACTIVE) + return(cc); + } + } } return(NULL); } @@ -679,7 +686,7 @@ client_cycle(struct screen_ctx *sc, int flags) return; prevcc = TAILQ_FIRST(&sc->clientq); - oldcc = client_current(); + oldcc = client_current(sc); if (oldcc == NULL) oldcc = (flags & CWM_CYCLE_REVERSE) ? TAILQ_LAST(&sc->clientq, client_q) : diff --git a/kbfunc.c b/kbfunc.c index 5f6d54e..03a5d79 100644 --- a/kbfunc.c +++ b/kbfunc.c @@ -470,7 +470,7 @@ kbfunc_menu_client(void *ctx, struct cargs *cargs) if (cargs->xev == CWM_XEV_BTN) mflags |= CWM_MENU_LIST; - old_cc = client_current(); + old_cc = client_current(sc); TAILQ_INIT(&menuq); TAILQ_FOREACH(cc, &sc->clientq, entry) { diff --git a/xevents.c b/xevents.c index 6c73b62..8bbd525 100644 --- a/xevents.c +++ b/xevents.c @@ -79,7 +79,7 @@ xev_handle_maprequest(XEvent *ee) LOG_DEBUG3("window: 0x%lx", e->window); - if ((old_cc = client_current()) != NULL) + if ((old_cc = client_current(NULL)) != NULL) client_ptrsave(old_cc); if ((cc = client_find(e->window)) == NULL) @@ -249,7 +249,7 @@ xev_handle_buttonpress(XEvent *ee) switch (mb->context) { case CWM_CONTEXT_CC: if (((cc = client_find(e->window)) == NULL) && - (cc = client_current()) == NULL) + (cc = client_current(NULL)) == NULL) return; (*mb->callback)(cc, mb->cargs); break; @@ -318,7 +318,7 @@ xev_handle_keypress(XEvent *ee) switch (kb->context) { case CWM_CONTEXT_CC: if (((cc = client_find(e->window)) == NULL) && - (cc = client_current()) == NULL) + (cc = client_current(NULL)) == NULL) return; (*kb->callback)(cc, kb->cargs); break; @@ -353,7 +353,7 @@ xev_handle_keyrelease(XEvent *ee) keysym = XkbKeycodeToKeysym(X_Dpy, e->keycode, 0, 0); for (i = 0; i < nitems(modkeys); i++) { if (keysym == modkeys[i]) { - if ((cc = client_current()) != NULL) { + if ((cc = client_current(NULL)) != NULL) { if (sc->cycling) { sc->cycling = 0; client_mtf(cc); @@ -389,7 +389,7 @@ xev_handle_clientmessage(XEvent *ee) } } else if (e->message_type == ewmh[_NET_ACTIVE_WINDOW]) { if ((cc = client_find(e->window)) != NULL) { - if ((old_cc = client_current()) != NULL) + if ((old_cc = client_current(NULL)) != NULL) client_ptrsave(old_cc); client_show(cc); client_ptrwarp(cc); -- cgit 1.4.1