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().
This commit is contained in:
okan 2019-03-07 14:28:17 +00:00
parent 01be5b4e4a
commit 7c45b87622
4 changed files with 19 additions and 12 deletions

View File

@ -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 *);

View File

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

View File

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

View File

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