stacker: addressing wintitleactions (awesomebar hidden clients) compatibility issue ref. #94
This commit is contained in:
		| @@ -12,8 +12,13 @@ focusstack(const Arg *arg) | |||||||
| 		return; | 		return; | ||||||
| 	#endif // ALWAYSFULLSCREEN_PATCH | 	#endif // ALWAYSFULLSCREEN_PATCH | ||||||
|  |  | ||||||
|  | 	#if BAR_WINTITLEACTIONS_PATCH | ||||||
|  | 	for (p = NULL, c = selmon->clients; c && (i || !ISVISIBLE(c) || HIDDEN(c)); | ||||||
|  | 		i -= (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), p = c, c = c->next); | ||||||
|  | 	#else | ||||||
| 	for (p = NULL, c = selmon->clients; c && (i || !ISVISIBLE(c)); | 	for (p = NULL, c = selmon->clients; c && (i || !ISVISIBLE(c)); | ||||||
| 	    i -= ISVISIBLE(c) ? 1 : 0, p = c, c = c->next); | 		i -= (ISVISIBLE(c) ? 1 : 0), p = c, c = c->next); | ||||||
|  | 	#endif // BAR_WINTITLEACTIONS_PATCH | ||||||
| 	focus(c ? c : p); | 	focus(c ? c : p); | ||||||
| 	restack(selmon); | 	restack(selmon); | ||||||
| } | } | ||||||
| @@ -32,7 +37,11 @@ pushstack(const Arg *arg) | |||||||
| 	} | 	} | ||||||
| 	else { | 	else { | ||||||
| 		for (p = NULL, c = selmon->clients; c; p = c, c = c->next) | 		for (p = NULL, c = selmon->clients; c; p = c, c = c->next) | ||||||
|  | 			#if BAR_WINTITLEACTIONS_PATCH | ||||||
|  | 			if (!(i -= (ISVISIBLE(c) && !HIDDEN(c) && c != sel))) | ||||||
|  | 			#else | ||||||
| 			if (!(i -= (ISVISIBLE(c) && c != sel))) | 			if (!(i -= (ISVISIBLE(c) && c != sel))) | ||||||
|  | 			#endif // BAR_WINTITLEACTIONS_PATCH | ||||||
| 				break; | 				break; | ||||||
| 		c = c ? c : p; | 		c = c ? c : p; | ||||||
| 		detach(sel); | 		detach(sel); | ||||||
| @@ -51,24 +60,47 @@ stackpos(const Arg *arg) | |||||||
| 	if (!selmon->clients) | 	if (!selmon->clients) | ||||||
| 		return -1; | 		return -1; | ||||||
|  |  | ||||||
|  | 	#if BAR_WINTITLEACTIONS_PATCH | ||||||
| 	if (arg->i == PREVSEL) { | 	if (arg->i == PREVSEL) { | ||||||
| 		for (l = selmon->stack; l && (!ISVISIBLE(l) || l == selmon->sel); l = l->snext); | 		for (l = selmon->stack; l && (!ISVISIBLE(l) || HIDDEN(l) || l == selmon->sel); l = l->snext); | ||||||
| 		if (!l) | 		if (!l) | ||||||
| 			return -1; | 			return -1; | ||||||
| 		for (i = 0, c = selmon->clients; c != l; i += ISVISIBLE(c) ? 1 : 0, c = c->next); | 		for (i = 0, c = selmon->clients; c != l; i += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); | ||||||
| 		return i; | 		return i; | ||||||
| 	} | 	} | ||||||
| 	else if (ISINC(arg->i)) { | 	else if (ISINC(arg->i)) { | ||||||
| 		if (!selmon->sel) | 		if (!selmon->sel) | ||||||
| 			return -1; | 			return -1; | ||||||
| 		for (i = 0, c = selmon->clients; c != selmon->sel; i += ISVISIBLE(c) ? 1 : 0, c = c->next); | 		for (i = 0, c = selmon->clients; c != selmon->sel; i += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); | ||||||
| 		for (n = i; c; n += ISVISIBLE(c) ? 1 : 0, c = c->next); | 		for (n = i; c; n += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); | ||||||
| 		return MOD(i + GETINC(arg->i), n); | 		return MOD(i + GETINC(arg->i), n); | ||||||
| 	} | 	} | ||||||
| 	else if (arg->i < 0) { | 	else if (arg->i < 0) { | ||||||
| 		for (i = 0, c = selmon->clients; c; i += ISVISIBLE(c) ? 1 : 0, c = c->next); | 		for (i = 0, c = selmon->clients; c; i += (ISVISIBLE(c) && !HIDDEN(c) ? 1 : 0), c = c->next); | ||||||
| 		return MAX(i + arg->i, 0); | 		return MAX(i + arg->i, 0); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 		return arg->i; | 		return arg->i; | ||||||
|  | 	#else // !BAR_WINTITLEACTIONS_PATCH | ||||||
|  | 	if (arg->i == PREVSEL) { | ||||||
|  | 		for (l = selmon->stack; l && (!ISVISIBLE(l) || l == selmon->sel); l = l->snext); | ||||||
|  | 		if (!l) | ||||||
|  | 			return -1; | ||||||
|  | 		for (i = 0, c = selmon->clients; c != l; i += (ISVISIBLE(c) ? 1 : 0), c = c->next); | ||||||
|  | 		return i; | ||||||
|  | 	} | ||||||
|  | 	else if (ISINC(arg->i)) { | ||||||
|  | 		if (!selmon->sel) | ||||||
|  | 			return -1; | ||||||
|  | 		for (i = 0, c = selmon->clients; c != selmon->sel; i += (ISVISIBLE(c) ? 1 : 0), c = c->next); | ||||||
|  | 		for (n = i; c; n += (ISVISIBLE(c) ? 1 : 0), c = c->next); | ||||||
|  | 		return MOD(i + GETINC(arg->i), n); | ||||||
|  | 	} | ||||||
|  | 	else if (arg->i < 0) { | ||||||
|  | 		for (i = 0, c = selmon->clients; c; i += (ISVISIBLE(c) ? 1 : 0), c = c->next); | ||||||
|  | 		return MAX(i + arg->i, 0); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 		return arg->i; | ||||||
|  | 	#endif // BAR_WINTITLEACTIONS_PATCH | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user