Implements next-previous workspace

This commit is contained in:
Bapt 2009-07-21 21:32:29 +02:00 committed by Michael Stapelberg
parent ffcc8bbc3a
commit 3e262913e8
1 changed files with 32 additions and 0 deletions

View File

@ -845,6 +845,31 @@ static char **append_argument(char **original, char *argument) {
return result; return result;
} }
/*
* switch to next or previous existing workspace
*/
static void next_previous_workspace(xcb_connection_t *conn, int direction) {
Workspace *t_ws;
int i;
if (direction == 'n') {
if (c_ws->num == 9)
return;
for ( i = c_ws->num + 1; i <= 9; i++) {
t_ws = &(workspaces[i]);
if (t_ws->screen != NULL) break;
}
} else if (direction == 'p' ) {
if (c_ws->num == 0)
return;
for (i = c_ws->num - 1; i >= 0 ; i--) {
t_ws = &(workspaces[i]);
if (t_ws->screen != NULL) break;
}
}
if (t_ws->screen != NULL)
show_workspace(conn,i+1);
}
/* /*
* Parses a command, see file CMDMODE for more information * Parses a command, see file CMDMODE for more information
@ -982,7 +1007,14 @@ void parse_command(xcb_connection_t *conn, const char *command) {
return; return;
} }
/* Is it 'n' for next workspace (nw) */
if (command[0] == 'n' && command[1] == 'w') {
next_previous_workspace(conn, command[0]);
}
if (command[0] == 'p' && command[1] == 'w') {
next_previous_workspace(conn, command[0]);
}
/* Its a normal <cmd> */ /* Its a normal <cmd> */
char *rest = NULL; char *rest = NULL;
enum { ACTION_FOCUS, ACTION_MOVE, ACTION_SNAP } action = ACTION_FOCUS; enum { ACTION_FOCUS, ACTION_MOVE, ACTION_SNAP } action = ACTION_FOCUS;