wmii

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

commit 6d48434538f14861b8e5672cb7dd2648647dfb65
parent bf9a872c4df751e22c8a2e322301658f37a49049
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Wed,  8 Mar 2006 12:17:18 +0100

fixed several issues, now seems much more stable


Diffstat:
cmd/wm/fs.c | 55+------------------------------------------------------
cmd/wm/tag.c | 49++++++++++++++++++++++++-------------------------
cmd/wm/wm.h | 1-
3 files changed, 25 insertions(+), 80 deletions(-)

diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -65,8 +65,6 @@ static char Enocommand[] = "command not supported"; * /ws/1/1/tags FsFtags tag of client * /ws/1/1/geom FsFgeom geometry of client * /ws/1/1/ctl FsFctl command interface (client) - * /cache/ FsDcache cache of existing ws'es - * /cache/foo FsDws cache of existing ws'es */ Qid root_qid; @@ -155,7 +153,6 @@ qid2name(Qid *qid) case FsDdef: return "def"; break; case FsDkeys: return "keys"; break; case FsDtags: return "tags"; break; - case FsDcache: return "cache"; break; case FsDclients: return "clients"; break; case FsDbar: return "bar"; break; case FsDws: @@ -269,8 +266,6 @@ name2type(char *name, unsigned char dir_type) case FsDclient: return FsFtags; break; } } - if(!strncmp(name, "cache", 6)) - return FsDcache; if(!strncmp(name, "clients", 8)) return FsDclients; if(!strncmp(name, "ws", 3) && (dir_type == FsDroot)) @@ -315,18 +310,12 @@ name2type(char *name, unsigned char dir_type) return FsFkey; if(!strncmp(name, "sel", 4)) goto dyndir; - if(dir_type == FsDcache) { - for(i = 0; i < ntag; i++) - if(!strncmp(name, tag[i]->name, strlen(tag[i]->name))) - goto dyndir; - } i = (unsigned short) cext_strtonum(name, 0, 0xffff, &err); if(err) return -1; dyndir: /*fprintf(stderr, "nametotype: dir_type = %d\n", dir_type);*/ switch(dir_type) { - case FsDcache: return FsDws; break; case FsDbar: return FsDlabel; break; case FsDws: return FsDarea; break; case FsDclients: return FsDGclient; break; @@ -354,7 +343,6 @@ mkqid(Qid *dir, char *wname, Qid *new, Bool iswalk) case FsDdef: case FsDkeys: case FsDtags: - case FsDcache: case FsDclients: case FsDbar: if(dir_type != FsDroot) @@ -364,18 +352,7 @@ mkqid(Qid *dir, char *wname, Qid *new, Bool iswalk) break; case FsDws: new->type = IXP_QTDIR; - if(!strncmp(wname, "ws", 3) && dir_type == FsDroot) - new->path = mkqpath(FsDws, ntag ? tag[sel]->id : 0, 0, 0); - else if(dir_type == FsDcache) { - for(i = 0; i < ntag; i++) - if(!strncmp(wname, tag[i]->name, strlen(tag[i]->name))) - break; - if(i >= ntag) - return -1; - new->path = mkqpath(FsDws, tag[i]->id, 0, 0); - } - else - return -1; + new->path = mkqpath(FsDws, ntag ? tag[sel]->id : 0, 0, 0); break; case FsDlabel: if(dir_type != FsDbar) @@ -625,7 +602,6 @@ type2stat(Stat *stat, char *wname, Qid *dir) case FsDdef: case FsDkeys: case FsDtags: - case FsDcache: case FsDclients: case FsDbar: case FsDlabel: @@ -786,24 +762,6 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); } break; - case FsDcache: - /* jump to offset */ - len = 0; - for(i = 0; i < ntag; i++) { - len += type2stat(&stat, tag[i]->name, &m->qid); - if(len <= fcall->offset) - continue; - break; - } - /* offset found, proceeding */ - for(; i < ntag; i++) { - len = type2stat(&stat, tag[i]->name, &m->qid); - if(fcall->count + len > fcall->iounit) - break; - fcall->count += len; - p = ixp_enc_stat(p, &stat); - } - break; case FsDtags: /* jump to offset */ len = 0; @@ -943,8 +901,6 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "clients", &m->qid); p = ixp_enc_stat(p, &stat); - fcall->count += type2stat(&stat, "cache", &m->qid); - p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "ws", &m->qid); p = ixp_enc_stat(p, &stat); break; @@ -967,15 +923,6 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); } break; - case FsDcache: - for(i = 0; i < ntag; i++) { - len = type2stat(&stat, tag[i]->name, &m->qid); - if(fcall->count + len > fcall->iounit) - break; - fcall->count += len; - p = ixp_enc_stat(p, &stat); - } - break; case FsDtags: for(i = 0; i < nctag; i++) { len = type2stat(&stat, ctag[i], &m->qid); diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c @@ -136,7 +136,7 @@ tid2index(unsigned short id) Tag * get_tag(char *name) { - unsigned int i; + unsigned int i, n = 0; Tag *t; if(!has_ctag(name)) @@ -147,9 +147,15 @@ get_tag(char *name) return t; } + for(i = 0; i < nclient; i++) + if(strstr(client[i]->tags, name)) + n++; + if(!n) + return nil; + t = alloc_tag(name); for(i = 0; i < nclient; i++) - if(!clientoftag(t, client[i]) && strstr(client[i]->tags, name)) + if(strstr(client[i]->tags, name)) attach_totag(t, client[i]); return t; } @@ -157,11 +163,23 @@ get_tag(char *name) void select_tag(char *arg) { + int i, j, n; Client *c; Tag *t = get_tag(arg); if(!t) return; focus_tag(t); + + for(i = 0; i < ntag; i++) { + n = 0; + for(j = 0; j < tag[i]->narea; j++) + n += tag[i]->area[j]->nframe; + if(!n) { + destroy_tag(tag[i]); + i--; + } + } + if((c = sel_client_of_tag(t))) focus_client(c); } @@ -195,19 +213,6 @@ update_ctags() fprintf(stderr, "%s", "update_ctags\n"); for(i = 0; i < nctag; i++) { -#if 0 - Bool exists = False; - for(j = 0; j < nclient; j++) - if(strstr(client[j]->tags, ctag[i])) - exists = True; - if(!exists) { - for(j = 0; j < ntag; j++) - if(!strncmp(tag[j]->name, ctag[i], strlen(tag[j]->name))) { - destroy_tag(tag[j]); - j--; - } - } -#endif free(ctag[i]); ctag[i] = nil; } @@ -241,22 +246,16 @@ update_ctags() void detach_fromtag(Tag *t, Client *c, Bool unmap) { - int i, n = 0; + int i; + Client *cl; for(i = 0; i < t->narea; i++) { if(clientofarea(t->area[i], c)) { detach_fromarea(t->area[i], c); XMoveWindow(dpy, c->framewin, 2 * rect.width, 0); } } - for(i = 0; i < t->narea; i++) - n += t->area[i]->nframe; - if(!n) - destroy_tag(t); - if(ntag) { - Client *c = sel_client_of_tag(tag[sel]); - focus_tag(tag[sel]); - focus_client(c); - } + if((cl = sel_client_of_tag(t))) + focus_client(cl); } void diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -46,7 +46,6 @@ enum { FsDroot, FsDdef, FsDws, - FsDcache, FsDarea, FsDclients, FsDclient,