diff --git a/src/config.c b/src/config.c index 79617ac..d0ef085 100644 --- a/src/config.c +++ b/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; diff --git a/src/mouse.c b/src/mouse.c index 57c881d..9792261 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -53,7 +53,6 @@ void mouse_move_tile_client(Client **c) { Client *sc; - Window w; int d; diff --git a/src/tag.c b/src/tag.c index 9ef9017..c6b9132 100644 --- a/src/tag.c +++ b/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; +} + diff --git a/src/wmfs.h b/src/wmfs.h index 33922ab..507f786 100644 --- a/src/wmfs.h +++ b/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 */