From 74a07e98a76678714e28c1085f0068d7abe7b9db 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 | 4 ++-- client.c | 19 +++++++++++++------ kbfunc.c | 4 ++-- xevents.c | 12 ++++++------ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/calmwm.h b/calmwm.h index ef622a7..864f4f4 100644 --- a/calmwm.h +++ b/calmwm.h @@ -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: calmwm.h,v 1.370 2019/03/07 13:14:41 okan Exp $ + * $OpenBSD: calmwm.h,v 1.371 2019/03/07 14:28:17 okan Exp $ */ #ifndef _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 0c4bd3d..8c381e5 100644 --- a/client.c +++ b/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.254 2019/03/07 13:24:44 okan Exp $ + * $OpenBSD: client.c,v 1.255 2019/03/07 14:28:17 okan Exp $ */ #include @@ -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 9ae59f1..57f2180 100644 --- a/kbfunc.c +++ b/kbfunc.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: kbfunc.c,v 1.164 2019/03/07 12:54:21 okan Exp $ + * $OpenBSD: kbfunc.c,v 1.165 2019/03/07 14:28:17 okan Exp $ */ #include @@ -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 fa2d4c1..4a452b9 100644 --- a/xevents.c +++ b/xevents.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: xevents.c,v 1.138 2019/03/06 13:32:19 okan Exp $ + * $OpenBSD: xevents.c,v 1.139 2019/03/07 14:28:17 okan Exp $ */ /* @@ -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 v1.2.3-2-gb3c3