From c606d93630c46a030a7f0046319dd649e7cffe57 Mon Sep 17 00:00:00 2001 From: Cedric Staub Date: Fri, 15 Jan 2010 16:30:28 +0100 Subject: [PATCH] Feature: Cycle through workspaces On command pw/nw, cycle through all workspaces (starting from previous/next one) until we reach the current one again. --- src/commands.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/commands.c b/src/commands.c index 92b4aa8c..8205d224 100644 --- a/src/commands.c +++ b/src/commands.c @@ -768,7 +768,15 @@ static void next_previous_workspace(xcb_connection_t *conn, int direction) { Workspace *ws = c_ws; if (direction == 'n') { - while ((ws = TAILQ_NEXT(ws, workspaces)) != TAILQ_END(workspaces_head)) { + while (1) { + ws = TAILQ_NEXT(ws, workspaces); + + if (ws == TAILQ_END(workspaces)) + ws = TAILQ_FIRST(workspaces); + + if (ws == c_ws) + return; + if (ws->screen == NULL) continue; @@ -776,7 +784,15 @@ static void next_previous_workspace(xcb_connection_t *conn, int direction) { return; } } else if (direction == 'p') { - while ((ws = TAILQ_PREV(ws, workspaces_head, workspaces)) != TAILQ_END(workspaces)) { + while (1) { + ws = TAILQ_PREV(ws, workspaces_head, workspaces); + + if (ws == TAILQ_END(workspaces)) + ws = TAILQ_LAST(workspaces, workspaces_head); + + if (ws == c_ws) + return; + if (ws->screen == NULL) continue; -- 2.39.5