Parcourir la source

Tag: Add tag_prev_sel function request by Erus (Feature #29)

Martin Duquesnoy il y a 14 ans
Parent
commit
7e44e4b314
4 fichiers modifiés avec 24 ajouts et 7 suppressions
  1. 5 3
      src/config.c
  2. 0 1
      src/mouse.c
  3. 17 3
      src/tag.c
  4. 2 0
      src/wmfs.h

+ 5 - 3
src/config.c

@@ -53,6 +53,7 @@ func_name_list_t tmp_func_list[] =
      {"tag",                     uicb_tag },
      {"tag_next",                uicb_tag_next },
      {"tag_prev",                uicb_tag_prev },
+     {"tag_prev_sel",            uicb_tag_prev_sel },
      {"tag_transfert",           uicb_tagtransfert },
      {"set_mwfact",              uicb_set_mwfact },
      {"set_nmaster",             uicb_set_nmaster },
@@ -394,9 +395,10 @@ conf_tag_section(char *src)
      sc = screen_count();
 
      /* Alloc all */
-     conf.ntag = emalloc(sc, sizeof(int));
-     tags      = emalloc(sc, sizeof(Tag*));
-     seltag    = emalloc(sc, sizeof(int));
+     conf.ntag  = emalloc(sc, sizeof(int));
+     tags       = emalloc(sc, sizeof(Tag*));
+     seltag     = emalloc(sc, sizeof(int));
+     prevseltag = emalloc(sc, sizeof(int));
 
      for(i = 0; i < sc; ++i)
           seltag[i] = 1;

+ 0 - 1
src/mouse.c

@@ -53,7 +53,6 @@ void
 mouse_move_tile_client(Client **c)
 {
      Client *sc;
-
      Window w;
      int d;
 

+ 17 - 3
src/tag.c

@@ -38,12 +38,11 @@
 void
 tag_set(int tag)
 {
-     int otag;
      Client *c;
 
      screen_get_sel();
 
-     otag = seltag[selscreen];
+     prevseltag[selscreen] = seltag[selscreen];
 
      if(conf.tag_round)
      {
@@ -59,13 +58,14 @@ tag_set(int tag)
           if(!tag || tag == seltag[selscreen]
              || tag > conf.ntag[selscreen])
                return;
+
           seltag[selscreen] = tag;
      }
 
      ewmh_update_current_tag_prop();
 
      /* Arrange infobar position */
-     if(tags[selscreen][otag].barpos != tags[selscreen][seltag[selscreen]].barpos)
+     if(tags[selscreen][prevseltag[selscreen]].barpos != tags[selscreen][seltag[selscreen]].barpos)
           infobar_set_position(tags[selscreen][seltag[selscreen]].barpos);
 
      arrange(selscreen, False);
@@ -170,3 +170,17 @@ uicb_tagtransfert(uicb_t cmd)
 
      return;
 }
+
+/** Set the previous selected tag
+  * \param cmd uicb_t type unused
+  */
+void
+uicb_tag_prev_sel(uicb_t cmd)
+{
+     screen_get_sel();
+
+     tag_set(prevseltag[selscreen]);
+
+     return;
+}
+

+ 2 - 0
src/wmfs.h

@@ -268,6 +268,7 @@ void uicb_tag(uicb_t);
 void uicb_tag_next(uicb_t);
 void uicb_tag_prev(uicb_t);
 void uicb_tagtransfert(uicb_t);
+void uicb_tag_prev_sel(uicb_t cmd);
 
 /* screen.c */
 int screen_count(void);
@@ -377,6 +378,7 @@ Atom *net_atom;
 InfoBar *infobar;
 Tag **tags;
 int *seltag;
+int *prevseltag;
 Menu menulayout;
 
 /* Important Client */