Add uicb screen move client next/prev

This commit is contained in:
Paul Fariello 2012-01-19 14:55:48 +01:00
parent 3e684a5916
commit 4da3889b86
3 changed files with 41 additions and 0 deletions

View File

@ -82,6 +82,8 @@ static const struct { char *name; void (*func)(Uicb cmd); } uicb_list[] =
/* Screen */ /* Screen */
{ "screen_next", uicb_screen_next }, { "screen_next", uicb_screen_next },
{ "screen_prev", uicb_screen_prev }, { "screen_prev", uicb_screen_prev },
{ "screen_move_client_next", uicb_screen_move_client_next },
{ "screen_move_client_prev", uicb_screen_move_client_prev },
{ NULL, NULL } { NULL, NULL }
}; };

View File

@ -126,6 +126,43 @@ uicb_screen_prev(Uicb cmd)
screen_select(SLIST_FIRST(&W->h.screen)); screen_select(SLIST_FIRST(&W->h.screen));
} }
static void
screen_move_client(struct client *c, struct screen *s)
{
if (c && s) {
c->screen = s;
tag_client(s->seltag, c);
}
}
void
uicb_screen_move_client_next(Uicb cmd)
{
struct screen *s;
(void)cmd;
if(!(s = SLIST_NEXT(W->screen, next)))
s = SLIST_FIRST(&W->h.screen);
screen_move_client(W->client, s);
}
void
uicb_screen_move_client_prev(Uicb cmd)
{
struct screen *s;
(void)cmd;
SLIST_FOREACH(s, &W->h.screen, next)
if(SLIST_NEXT(W->screen, next) == s)
{
screen_move_client(W->client, s);
return;
}
screen_move_client(W->client, SLIST_FIRST(&W->h.screen));
}
void void
screen_free(void) screen_free(void)
{ {

View File

@ -45,6 +45,8 @@ struct screen* screen_update_sel(void);
void screen_free(void); void screen_free(void);
void uicb_screen_next(Uicb cmd); void uicb_screen_next(Uicb cmd);
void uicb_screen_prev(Uicb cmd); void uicb_screen_prev(Uicb cmd);
void uicb_screen_move_client_next(Uicb cmd);
void uicb_screen_move_client_prev(Uicb cmd);
#endif /* SCREEN_H */ #endif /* SCREEN_H */