Browse Source

Add uicb screen move client next/prev

Paul Fariello 12 years ago
parent
commit
4da3889b86
3 changed files with 41 additions and 0 deletions
  1. 2 0
      src/config.h
  2. 37 0
      src/screen.c
  3. 2 0
      src/screen.h

+ 2 - 0
src/config.h

@@ -82,6 +82,8 @@ static const struct { char *name; void (*func)(Uicb cmd); } uicb_list[] =
      /* Screen */
      { "screen_next", uicb_screen_next },
      { "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 }
 };

+ 37 - 0
src/screen.c

@@ -126,6 +126,43 @@ uicb_screen_prev(Uicb cmd)
      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
 screen_free(void)
 {

+ 2 - 0
src/screen.h

@@ -45,6 +45,8 @@ struct screen* screen_update_sel(void);
 void screen_free(void);
 void uicb_screen_next(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 */