wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 17a12e5c5d00cfde8b487143b12f93b273060886
parent 19d6272285ca027bbae993b11082c90e90911f3c
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Mon,  6 Mar 2006 16:35:07 +0100

changed default tag, allowing writing /def/tag


Diffstat:
cmd/wm/area.c | 7+++++--
cmd/wm/client.c | 2+-
cmd/wm/fs.c | 33++++++++++++++++++++++-----------
cmd/wm/tag.c | 8+++-----
cmd/wm/wm.c | 1+
cmd/wm/wm.h | 20+++++++++++---------
rc/wmiirc | 2+-
7 files changed, 44 insertions(+), 29 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -114,8 +114,11 @@ void attach_toarea(Area *a, Client *c) { static unsigned short id = 1; - Frame *f = cext_emallocz(sizeof(Frame)); - + Frame *f; + + if(is_clientof(a->tag, c)) + return; + f = cext_emallocz(sizeof(Frame)); f->id = id++; f->area = a; f->client = c; diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -332,7 +332,7 @@ attach_client(Client *c) { Tag *t; if(!ntag) - t = alloc_tag("nil"); + t = alloc_tag(def.tag); else t = tag[sel]; diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -38,6 +38,7 @@ static char Enocommand[] = "command not supported"; * /def/font FsFfont xlib font name * /def/selcolors FsFselcolors sel color * /def/normcolors FsFnormcolors normal colors + * /def/tag FsFtag default tag * /keys/ FsDkeys * /keys/foo FsFkey * /tags/ FsDtags @@ -279,10 +280,12 @@ name2type(char *name, unsigned char dir_type) return FsFdata; if(!strncmp(name, "mode", 5)) return FsFmode; + if(!strncmp(name, "tag", 4)) + return FsFtag; if(name2key(name)) return FsFkey; if(has_ctag(name)) - return FsFtags; + return FsFtag; if(!strncmp(name, "sel", 4)) goto dyndir; i = (unsigned short) cext_strtonum(name, 0, 0xffff, &err); @@ -585,16 +588,14 @@ type2stat(Stat *stat, char *wname, Qid *dir) return mkstat(stat, dir, wname, strlen(f->client->name), DMREAD); break; case FsFtags: - switch(dir_type) { - case FsDclient: - f = tag[dir_i1]->area[dir_i2]->frame[dir_i3]; - return mkstat(stat, dir, wname, strlen(f->client->tags), DMREAD | DMWRITE); - break; - case FsDtags: - return mkstat(stat, dir, wname, 0, 0); - break; - } - break; + f = tag[dir_i1]->area[dir_i2]->frame[dir_i3]; + return mkstat(stat, dir, wname, strlen(f->client->tags), DMREAD | DMWRITE); + break; + case FsFtag: + if(dir_type == FsDdef) + return mkstat(stat, dir, wname, strlen(def.tag), DMREAD | DMWRITE); + return mkstat(stat, dir, wname, 0, 0); + break; case FsFkey: return mkstat(stat, dir, wname, 0, DMWRITE); break; @@ -872,6 +873,8 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "font", &m->qid); p = ixp_enc_stat(p, &stat); + fcall->count += type2stat(&stat, "tag", &m->qid); + p = ixp_enc_stat(p, &stat); break; case FsDws: fcall->count = type2stat(&stat, "ctl", &m->qid); @@ -966,6 +969,10 @@ xread(IXPConn *c, Fcall *fcall) if((fcall->count = strlen(label[i1]->colstr))) memcpy(p, label[i1]->colstr, fcall->count); break; + case FsFtag: + if((fcall->count = strlen(def.tag))) + memcpy(p, def.tag, fcall->count); + break; case FsFselcolors: if((fcall->count = strlen(def.selcolor))) memcpy(p, def.selcolor, fcall->count); @@ -1143,6 +1150,10 @@ xwrite(IXPConn *c, Fcall *fcall) blitz_loadcolor(dpy, screen, label[i1]->colstr, &label[i1]->color); draw_bar(); break; + case FsFtag: + memcpy(def.tag, fcall->data, fcall->count); + def.tag[fcall->count] = 0; + break; case FsFselcolors: if((fcall->count != 23) || (fcall->data[0] != '#') || (fcall->data[8] != '#') diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c @@ -75,8 +75,8 @@ focus_tag(Tag *t) sel = pi; px = sel * rect.width; - /* gives all(!) clients proper geometry (for use of different tagrs) */ - for(i = 0; i < nclient; i++) { + /* gives all(!) clients proper geometry (for use of different tags) */ + for(i = 0; i < nclient; i++) if(client[i]->frame) { Frame *f = client[i]->frame; pi = tag2index(f->area->tag); @@ -84,7 +84,6 @@ focus_tag(Tag *t) if(f->area->tag == t) draw_client(client[i]); } - } snprintf(buf, sizeof(buf), "WS %s\n", t->name); write_event(buf); XChangeProperty(dpy, root, net_atom[NetSelWS], XA_CARDINAL, @@ -148,7 +147,7 @@ get_tag(char *name) t = alloc_tag(name); for(i = 0; i < nclient; i++) - if(strstr(client[i]->tags, name)) + if(!is_clientof(t, client[i]) && strstr(client[i]->tags, name)) attach_totag(t, client[i]); return t; } @@ -195,7 +194,6 @@ update_ctags() char buf[256]; char *tags[128]; - return; for(i = 0; i < nctag; i++) { Bool exists = False; for(j = 0; j < nclient; j++) diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -324,6 +324,7 @@ main(int argc, char *argv[]) def.font = strdup(BLITZ_FONT); def.border = DEF_BORDER; def.snap = DEF_SNAP; + cext_strlcpy(def.tag, "1", sizeof(def.tag)); cext_strlcpy(def.selcolor, BLITZ_SELCOLORS, sizeof(def.selcolor)); blitz_loadcolor(dpy, screen, def.selcolor, &def.sel); cext_strlcpy(def.normcolor, BLITZ_NORMCOLORS, sizeof(def.normcolor)); diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -75,6 +75,7 @@ enum { FsFctl, FsFname, FsFtags, + FsFtag, FsFmode }; @@ -90,6 +91,15 @@ typedef struct Area Area; typedef struct Frame Frame; typedef struct Client Client; +struct Tag { + char name[256]; + unsigned short id; + Area **area; + unsigned int areasz; + unsigned int narea; + unsigned int sel; +}; + struct Area { unsigned short id; Frame **frame; @@ -101,15 +111,6 @@ struct Area { XRectangle rect; }; -struct Tag { - char name[256]; - unsigned short id; - Area **area; - unsigned int areasz; - unsigned int narea; - unsigned int sel; -}; - struct Frame { Area *area; unsigned short id; @@ -154,6 +155,7 @@ typedef struct { typedef struct { char selcolor[24]; char normcolor[24]; + char tag[256]; char *font; Color sel; Color norm; diff --git a/rc/wmiirc b/rc/wmiirc @@ -40,7 +40,7 @@ do done xwrite /bar/new/colors $WMII_NORMCOLORS xwrite /bar/new/colors $WMII_SELCOLORS -xwrite /bar/0/data nil +xwrite /bar/0/data 1 xwrite /bar/expand 1 # MISC