From 1454d4e7f7a2127bfbeb19f003e37966e35c3061 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sun, 14 Dec 2008 19:27:57 +0100 Subject: [PATCH] tag: Add tag_set & tag_transfert with a int parametre (for event use and make easier the uicb tag function) --- src/event.c | 21 ++++------ src/tag.c | 116 ++++++++++++++++++++++++++++++---------------------- src/wmfs.h | 2 + 3 files changed, 77 insertions(+), 62 deletions(-) diff --git a/src/event.c b/src/event.c index fa55993..b72a548 100644 --- a/src/event.c +++ b/src/event.c @@ -40,7 +40,6 @@ buttonpress(XButtonEvent *ev) { Client *c; int i; - char s[6]; screen_get_sel(); @@ -74,17 +73,16 @@ buttonpress(XButtonEvent *ev) /* Tag */ for(i = 1; i < conf.ntag[selscreen] + 1; ++i) { - ITOA(s, i); if(ev->window == infobar[selscreen].tags[i]->win) { if(ev->button == Button1) - uicb_tag(s); + tag_set(i); if(ev->button == Button3) - uicb_tagtransfert(s); + tag_transfert(sel, i); if(ev->button == Button4) - uicb_tag("+1"); + tag_set(seltag[selscreen] + 1); if (ev->button == Button5) - uicb_tag("-1"); + tag_set(seltag[selscreen] - 1); } } @@ -109,7 +107,6 @@ void clientmessageevent(XClientMessageEvent *ev) { Client *c; - char tmp[3]; int i, mess_t = 0; if(ev->format != 32) @@ -122,14 +119,12 @@ clientmessageevent(XClientMessageEvent *ev) { /* Manage _NET_CURRENT_DESKTOP */ if(mess_t == net_current_desktop - && ev->data.l[0] >= 1 + && ev->data.l[0] >= 0 && ev->data.l[0] < conf.ntag[selscreen]) - { - ITOA(tmp, (int)(ev->data.l[0] + 1)); - uicb_tag(tmp); - } + tag_set((int)(ev->data.l[0] + 1)); + /* Manage _NET_ACTIVE_WINDOW */ - if(mess_t == net_active_window) + else if(mess_t == net_active_window) if((c = client_gb_win(ev->data.l[0]))) client_focus(c); } diff --git a/src/tag.c b/src/tag.c index 9a2c661..4f800c1 100644 --- a/src/tag.c +++ b/src/tag.c @@ -33,7 +33,66 @@ #include "wmfs.h" -/** Set a tag +/* Set the tag + * \param tag The tag number +*/ +void +tag_set(int tag) +{ + screen_get_sel(); + + if(!tag) + tag = 1; + + if(conf.tag_round) + { + if(tag < 1) + seltag[selscreen] = conf.ntag[selscreen]; + else if(tag > conf.ntag[selscreen]) + seltag[selscreen] = 1; + else + seltag[selscreen] = tag; + } + else + { + if(tag == seltag[selscreen] + || tag > conf.ntag[selscreen]) + return; + seltag[selscreen] = tag; + } + ewmh_get_current_desktop(); + arrange(); + client_focus(NULL); + + return; +} + +/* Transfert a client to a tag + * \param c Client pointer + * \param tag Tag +*/ +void +tag_transfert(Client *c, int tag) +{ + screen_get_sel(); + + if(!c || c->tag == tag) + return; + + if(!tag) + tag = 1; + + c->tag = tag; + + arrange(); + + if(c == sel) + client_focus(NULL); + + return; +} + +/** Uicb Set a tag * \param cmd Tag number or '+' / '-', uicb_t type */ void @@ -41,41 +100,10 @@ uicb_tag(uicb_t cmd) { int tmp = atoi(cmd); - screen_get_sel(); - - if(!tmp) - tmp = 1; - - if(conf.tag_round) - { - if(tmp + seltag[selscreen] < 1) - seltag[selscreen] = conf.ntag[selscreen]; - else if (tmp + seltag[selscreen] > conf.ntag[selscreen]) - seltag[selscreen] = 1; - else - seltag[selscreen] += tmp; - } + if(cmd[0] == '+' || cmd[0] == '-') + tag_set(seltag[selscreen] + tmp); else - { - if(cmd[0] == '+' || cmd[0] == '-') - { - if(tmp + seltag[selscreen] < 1 - || tmp + seltag[selscreen] > conf.ntag[selscreen]) - return; - seltag[selscreen] += tmp; - } - else - { - if(tmp == seltag[selscreen] - || tmp > conf.ntag[selscreen]) - return; - seltag[selscreen] = tmp; - } - } - ewmh_get_current_desktop(); - - arrange(); - client_focus(NULL); + tag_set(tmp); return; } @@ -86,7 +114,7 @@ uicb_tag(uicb_t cmd) void uicb_tag_next(uicb_t cmd) { - uicb_tag("+1"); + tag_set(seltag[selscreen] + 1); return; } @@ -97,7 +125,7 @@ uicb_tag_next(uicb_t cmd) void uicb_tag_prev(uicb_t cmd) { - uicb_tag("-1"); + tag_set(seltag[selscreen] - 1); return; } @@ -109,19 +137,9 @@ uicb_tag_prev(uicb_t cmd) void uicb_tagtransfert(uicb_t cmd) { - int n = atoi(cmd); + CHECK(sel); - screen_get_sel(); - - if(!sel || n == seltag[selscreen]) - return; - - if(!n) - n = 1; - - sel->tag = n; - - arrange(); + tag_transfert(sel, atoi(cmd)); return; } diff --git a/src/wmfs.h b/src/wmfs.h index f22af09..19652fa 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -202,6 +202,8 @@ char* alias_to_str(char *conf_choice); void uicb_spawn(uicb_t); /* tag.c */ +void tag_set(int tag); +void tag_transfert(Client *c, int tag); void uicb_tag(uicb_t); void uicb_tag_next(uicb_t); void uicb_tag_prev(uicb_t);