summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2019-03-07 14:28:17 +0000
committerokan <okan>2019-03-07 14:28:17 +0000
commit7c45b87622c069a176359df3c632086540a7fe3f (patch)
tree9b515d87072ce60074e2ab985383acc3f8f28fae
parent01be5b4e4a04e5f454d0e685c71c8023c7c0b731 (diff)
downloadcwm-7c45b87622c069a176359df3c632086540a7fe3f.tar.gz
cwm-7c45b87622c069a176359df3c632086540a7fe3f.tar.xz
cwm-7c45b87622c069a176359df3c632086540a7fe3f.zip
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().
-rw-r--r--calmwm.h2
-rw-r--r--client.c17
-rw-r--r--kbfunc.c2
-rw-r--r--xevents.c10
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);