Undecided about this.. I like the auto-raising but not so keen on the
pointer snapping around.
On 2012/02/12 14:18, Alexander Polakov wrote:
> diff --git a/calmwm.h b/calmwm.h
> index b365983..9ac93b0 100644
> --- a/calmwm.h
> +++ b/calmwm.h
> @@ -319,6 +319,7 @@ void client_map(struct client_ctx
> *);
> void client_maximize(struct client_ctx *);
> void client_move(struct client_ctx *);
> void client_mtf(struct client_ctx *);
> +struct client_ctx *client_mrusearch(struct screen_ctx *, struct group_ctx
> *);
> struct client_ctx *client_new(Window, struct screen_ctx *, int);
> void client_ptrsave(struct client_ctx *);
> void client_ptrwarp(struct client_ctx *);
> diff --git a/client.c b/client.c
> index 2cb0b1e..a53ccb0 100644
> --- a/client.c
> +++ b/client.c
> @@ -643,6 +643,32 @@ client_cycle(struct screen_ctx *sc, int flags)
> client_ptrwarp(newcc);
> }
>
> +struct client_ctx *
> +client_mrusearch(struct screen_ctx *sc, struct group_ctx *gc)
> +{
> + int again = 1;
> + struct client_ctx *cc;
> +
> + if (TAILQ_EMPTY(&sc->mruq))
> + return NULL;
> +
> + cc = TAILQ_FIRST(&sc->mruq);
> + while (again) {
> + again = 0;
> +
> + /* Only cycle visible and non-ignored windows. */
> + if ((cc->flags & (CLIENT_HIDDEN|CLIENT_IGNORE))
> + && cc->group != gc)
> + again = 1;
> + else
> + break;
> + cc = client_mrunext(cc);
> + if (cc == TAILQ_FIRST(&sc->mruq))
> + return NULL;
> + }
> + return cc;
> +}
> +
> static struct client_ctx *
> client_mrunext(struct client_ctx *cc)
> {
> diff --git a/group.c b/group.c
> index f698cc7..f03e4a3 100644
> --- a/group.c
> +++ b/group.c
> @@ -303,16 +303,22 @@ void
> group_only(struct screen_ctx *sc, int idx)
> {
> int i;
> + struct group_ctx *gc;
> + struct client_ctx *cc;
>
> if (idx < 0 || idx >= CALMWM_NGROUPS)
> err(1, "group_only: index out of range (%d)", idx);
>
> + gc = &sc->groups[idx];
> +
> for (i = 0; i < CALMWM_NGROUPS; i++) {
> if (i == idx)
> group_show(sc, &sc->groups[i]);
> else
> group_hide(sc, &sc->groups[i]);
> }
> + if ((cc = client_mrusearch(sc, gc)) != NULL)
> + client_ptrwarp(cc);
> }
>
> /*
> --
> 1.7.6