wmii

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

commit 53b9c7b33f71351316588d6207c3baf54eac0be8
parent c087c64dd2a3c600be882de415e457a6eb7620f6
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Mon, 10 Apr 2006 17:50:39 +0200

rearranged


Diffstat:
cmd/wm/Makefile | 2+-
cmd/wm/client.c | 4++--
cmd/wm/fs.c | 2+-
cmd/wm/view.c | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
cmd/wm/wm.h | 6++----
5 files changed, 59 insertions(+), 8 deletions(-)

diff --git a/cmd/wm/Makefile b/cmd/wm/Makefile @@ -9,7 +9,7 @@ LDFLAGS += -L../../liblitz -llitz -L../../libixp -lixp -L../../libcext -lcext - # Solaris # LDFLAGS += -lsocket -SRC = area.c bar.c fs.c frame.c wm.c kb.c client.c event.c mouse.c rule.c tag.c view.c +SRC = area.c bar.c fs.c frame.c wm.c kb.c client.c event.c mouse.c rule.c view.c OBJ = ${SRC:.c=.o} all: wmiiwm diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -336,7 +336,7 @@ manage_client(Client *c) match_tags(c, True); reparent_client(c, c->framewin, c->rect.x, c->rect.y); - update_tags(c); + update_views(c); } static int @@ -367,7 +367,7 @@ destroy_client(Client *c) XFreeGC(dpy, c->gc); XDestroyWindow(dpy, c->framewin); cext_vdetach(client2vector(&client), c); - update_tags(nil); + update_views(nil); free(c); XSync(dpy, False); diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -1210,7 +1210,7 @@ xwrite(IXPConn *c, Fcall *fcall) else cl = client.data[i1]; cext_strlcpy(cl->tags, buf, sizeof(cl->tags)); - update_tags(cl); + update_views(cl); draw_client(cl); break; case FsFgeom: diff --git a/cmd/wm/view.c b/cmd/wm/view.c @@ -292,3 +292,56 @@ arrange_view(View *v, Bool dirty) arrange_column(a, False); } } + +void +update_views(Client *c) +{ + unsigned int i; + + if(c) { + char buf[256]; + char *toks[16]; + unsigned int j, n; + Bool match; + + fprintf(stderr, "tags: %s\n", c->tags); + cext_strlcpy(buf, c->tags, sizeof(buf)); + n = cext_tokenize(toks, 16, buf, '+'); + + for(i = 0; i < n; i++) { + View *v = get_view(toks[i]); + if(!clientofview(v, c)) + attach_toview(v, c); + } + + for(i = 0; i < c->view.size; i++) { + View *v = c->view.data[i]; + match = False; + for(j = 0; j < n; j++) { + if(!strncmp(v->name, toks[j], sizeof(v->name))) + match = True; + } + if(!match) + detach_fromview(v, c); + } + } + + for(i = 0; i < view.size; i++) + if(!hasclient(view.data[i])) + destroy_view(view.data[i]); + + if(view.size) + focus_view(view.data[sel]); + else + update_bar_tags(); +} + +void +retag() +{ + unsigned int i; + for(i = 0; i < client.size; i++) { + match_tags(client.data[i], False); + update_views(client.data[i]); + } +} diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -261,10 +261,6 @@ void ungrab_mouse(Window w, unsigned long mod, unsigned int button); void update_rules(); void match_tags(Client *c, Bool newclient); -/* tag.c */ -void update_tags(Client *c); -void retag(); - /* view.c */ Vector *view2vector(ViewVector *vv); void arrange_view(View *v, Bool dirty); @@ -283,6 +279,8 @@ Bool hasclient(View *v); View *name2view(char *name); void destroy_view(View *v); View *get_view(char *name); +void update_views(Client *c); +void retag(); /* wm.c */ void scan_wins();