wmii

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

commit a1e41d15c1193468c4f2a708e0b8824b2886a519
parent 29825ad4c6f4a52b0242dab17b6de704a472f543
Author: Kris Maglione <jg@suckless.org>
Date:   Fri, 30 May 2008 20:04:02 -0400

Minur cleanup.

Diffstat:
cmd/wmii/bar.c | 1-
cmd/wmii/client.c | 28+++++++++++++---------------
cmd/wmii/dat.h | 8+-------
cmd/wmii/event.c | 13+++++++------
cmd/wmii/fns.h | 4++--
cmd/wmii/frame.c | 1-
cmd/wmii/geom.c | 43+++++++++++++++++++++++--------------------
cmd/wmii/key.c | 21++++++++++++++-------
cmd/wmii/map.c | 28++++++++++++++++++----------
cmd/wmii/view.c | 1+
cmd/wmii/x11.c | 22+++++++++++-----------
11 files changed, 90 insertions(+), 80 deletions(-)

diff --git a/cmd/wmii/bar.c b/cmd/wmii/bar.c @@ -171,7 +171,6 @@ bar_draw(WMScreen *s) { border(screen->ibuf, b->r, 1, b->col.border); } copyimage(s->barwin, r, screen->ibuf, ZP); - sync(); } Bar* diff --git a/cmd/wmii/client.c b/cmd/wmii/client.c @@ -262,27 +262,27 @@ client_destroy(Client *c) { hide = true; XGrabServer(display); - - /* In case the client is already unmapped */ + /* In case the client is already destroyed. */ handler = XSetErrorHandler(ignoreerrors); - none = nil; - client_setviews(c, &none); sethandler(&c->w, nil); - refree(&c->tagre); - refree(&c->tagvre); - free(c->retags); - if(hide) reparentwindow(&c->w, &scr.root, screen->r.max); else reparentwindow(&c->w, &scr.root, r.min); - destroywindow(c->framewin); sync(); XSetErrorHandler(handler); XUngrabServer(display); + none = nil; + client_setviews(c, &none); + refree(&c->tagre); + refree(&c->tagvre); + free(c->retags); + + destroywindow(c->framewin); + ewmh_destroyclient(c); group_remove(c); event("DestroyClient %C\n", c); @@ -472,11 +472,9 @@ focus(Client *c, bool user) { void client_focus(Client *c) { + /* Round trip. */ static long id; long _id; - flushevents(FocusChangeMask, true); - - _id = id++ % 99; if(c && c->group) c->group->client = c; @@ -484,9 +482,9 @@ client_focus(Client *c) { sync(); flushevents(FocusChangeMask, true); + _id = id++ % 99; Dprint(DFocus, "client_focus([%C]%s) %ld\n", c, clientname(c), _id); - Dprint(DFocus, "\t%02d [%C]%s\n\t=> [%C]%s\n", - _id, + Dprint(DFocus, "\t%02d [%C]%s\n\t=> [%C]%s\n", _id, screen->focus, clientname(screen->focus), c, clientname(c)); if(screen->focus != c) { @@ -513,7 +511,7 @@ client_resize(Client *c, Rectangle r) { f = c->sel; frame_resize(f, r); - if(f->area->view != screen->sel) { + if(f->view != screen->sel) { client_unmap(c, IconicState); unmap_frame(c); return; diff --git a/cmd/wmii/dat.h b/cmd/wmii/dat.h @@ -133,6 +133,7 @@ struct Area { bool floating; ushort id; int mode; + bool max; Rectangle r; Rectangle r_old; }; @@ -237,13 +238,6 @@ struct Map { uint nhash; }; -struct MapEnt { - ulong hash; - const char* key; - void* val; - MapEnt* next; -}; - struct Rule { Rule* next; Reprog* regex; diff --git a/cmd/wmii/event.c b/cmd/wmii/event.c @@ -32,19 +32,19 @@ findtime(Display *d, XEvent *e, XPointer v) { void xtime_kludge(void) { - Window *w; + /* Round trip. */ + static Window *w; WinAttr wa; XEvent e; long l; - w = createwindow(&scr.root, Rect(0, 0, 1, 1), 0, InputOnly, &wa, 0); - - XSelectInput(display, w->w, PropertyChangeMask); + if(w == nil) { + w = createwindow(&scr.root, Rect(0, 0, 1, 1), 0, InputOnly, &wa, 0); + selectinput(w, PropertyChangeMask); + } changeprop_long(w, "ATOM", "ATOM", &l, 0); sync(); XIfEvent(display, &e, findtime, (void*)w); - - destroywindow(w); } @@ -368,6 +368,7 @@ unmapnotify(XEvent *e) { ev = &e->xunmap; if((w = findwin(ev->window)) && (ev->event == w->parent->w)) { + w->mapped = false; if(ev->send_event || w->unmapped-- == 0) handle(w, unmap, ev); } diff --git a/cmd/wmii/fns.h b/cmd/wmii/fns.h @@ -175,9 +175,9 @@ void update_keys(void); void init_screen(WMScreen*); /* map.c */ -MapEnt* hash_get(Map*, const char*, int create); +void** hash_get(Map*, const char*, bool create); void* hash_rm(Map*, const char*); -MapEnt* map_get(Map*, ulong, int create); +void** map_get(Map*, ulong, bool create); void* map_rm(Map*, ulong); /* message.c */ diff --git a/cmd/wmii/frame.c b/cmd/wmii/frame.c @@ -513,7 +513,6 @@ frame_draw(Frame *f) { XSetWindowBackgroundPixmap(display, c->framewin->w, None); copyimage(c->framewin, fr, img, ZP); - sync(); } void diff --git a/cmd/wmii/geom.c b/cmd/wmii/geom.c @@ -7,7 +7,7 @@ bool rect_haspoint_p(Point pt, Rectangle r) { return (pt.x >= r.min.x) && (pt.x < r.max.x) - && (pt.y >= r.min.y) && (pt.y < r.max.y); + && (pt.y >= r.min.y) && (pt.y < r.max.y); } bool @@ -22,7 +22,7 @@ Rectangle rect_intersection(Rectangle r, Rectangle r2) { Rectangle ret; - /* canonrect(ret) != ret if not intersection */ + /* ret != canonrect(ret) ≡ no intersection. */ ret.min.x = max(r.min.x, r2.min.x); ret.max.x = min(r.max.x, r2.max.x); ret.min.y = max(r.min.y, r2.min.y); @@ -60,32 +60,35 @@ quadrant(Rectangle r, Point pt) { Cursor quad_cursor(Align align) { switch(align) { - case NEast: - return cursor[CurNECorner]; - case NWest: - return cursor[CurNWCorner]; - case SEast: - return cursor[CurSECorner]; - case SWest: - return cursor[CurSWCorner]; - default: - return cursor[CurMove]; + case NEast: return cursor[CurNECorner]; + case NWest: return cursor[CurNWCorner]; + case SEast: return cursor[CurSECorner]; + case SWest: return cursor[CurSWCorner]; + case South: + case North: return cursor[CurDVArrow]; + case East: + case West: return cursor[CurDHArrow]; + default: return cursor[CurMove]; } } Align get_sticky(Rectangle src, Rectangle dst) { - Align stickycorner = 0; + Align corner; - if(src.min.x != dst.min.x && src.max.x == dst.max.x) - stickycorner |= East; + corner = 0; + if(src.min.x != dst.min.x + && src.max.x == dst.max.x) + corner |= East; else - stickycorner |= West; - if(src.min.y != dst.min.y && src.max.y == dst.max.y) - stickycorner |= South; + corner |= West; + + if(src.min.y != dst.min.y + && src.max.y == dst.max.y) + corner |= South; else - stickycorner |= North; + corner |= North; - return stickycorner; + return corner; } diff --git a/cmd/wmii/key.c b/cmd/wmii/key.c @@ -54,16 +54,20 @@ str2modmask(const char *val) { } static void -grabkey(Key *k) { - XGrabKey(display, k->key, k->mod, scr.root.w, +_grab(XWindow w, int keycode, uint mod) { + XGrabKey(display, keycode, mod, w, true, GrabModeAsync, GrabModeAsync); +} + +static void +grabkey(Key *k) { + /* Round trip. */ + _grab(scr.root.w, k->key, k->mod); if(numlock_mask) { - XGrabKey(display, k->key, k->mod | numlock_mask, scr.root.w, - true, GrabModeAsync, GrabModeAsync); - XGrabKey(display, k->key, k->mod | numlock_mask | LockMask, scr.root.w, - true, GrabModeAsync, GrabModeAsync); + _grab(scr.root.w, k->key, k->mod | numlock_mask); + _grab(scr.root.w, k->key, k->mod | numlock_mask | LockMask); } - sync(); + /* sync(); */ } static void @@ -73,7 +77,9 @@ ungrabkey(Key *k) { XUngrabKey(display, k->key, k->mod | numlock_mask, scr.root.w); XUngrabKey(display, k->key, k->mod | numlock_mask | LockMask, scr.root.w); } + /* sync(); + */ } static Key * @@ -253,3 +259,4 @@ update_keys(void) { } sync(); } + diff --git a/cmd/wmii/map.c b/cmd/wmii/map.c @@ -5,6 +5,13 @@ /* Edit s/^([a-zA-Z].*)\n([a-z].*) {/\1 \2;/g x/^([^a-zA-Z]|static|$)/-+d s/ (\*map|val|*str)//g */ +struct MapEnt { + ulong hash; + const char* key; + void* val; + MapEnt* next; +}; + MapEnt *NM; /* By Dan Bernstein. Public domain. */ @@ -69,20 +76,20 @@ hash_getp(Map *map, const char *str, int create) { return e; } -MapEnt* -map_get(Map *map, ulong val, int create) { - MapEnt **e; +void** +map_get(Map *map, ulong val, bool create) { + MapEnt *e; - e = map_getp(map, val, create); - return *e; + e = *map_getp(map, val, create); + return e ? &e->val : nil; } -MapEnt* -hash_get(Map *map, const char *str, int create) { - MapEnt **e; +void** +hash_get(Map *map, const char *str, bool create) { + MapEnt *e; - e = hash_getp(map, str, create); - return *e; + e = *hash_getp(map, str, create); + return e ? &e->val : nil; } void* @@ -116,3 +123,4 @@ hash_rm(Map *map, const char *str) { } return ret; } + diff --git a/cmd/wmii/view.c b/cmd/wmii/view.c @@ -118,6 +118,7 @@ view_destroy(View *v) { assert(v != v->next); /* FIXME: Can do better */ + /* Detach frames held here by regex tags. */ for(a=v->area; a; a=an) { an = a->next; for(f=a->frame; f; f=fn) { diff --git a/cmd/wmii/x11.c b/cmd/wmii/x11.c @@ -366,7 +366,7 @@ lowerwin(Window *w) { Handlers* sethandler(Window *w, Handlers *new) { Handlers *old; - MapEnt *e; + void **e; assert(w->type == WWindow); assert((w->prev != nil && w->next != nil) || w->next == w->prev); @@ -374,8 +374,8 @@ sethandler(Window *w, Handlers *new) { if(new == nil) map_rm(&windowmap, (ulong)w->w); else { - e = map_get(&windowmap, (ulong)w->w, 1); - e->val = w; + e = map_get(&windowmap, (ulong)w->w, true); + *e = w; } old = w->handler; w->handler = new; @@ -384,11 +384,11 @@ sethandler(Window *w, Handlers *new) { Window* findwin(XWindow w) { - MapEnt *e; + void **e; - e = map_get(&windowmap, (ulong)w, 0); + e = map_get(&windowmap, (ulong)w, false); if(e) - return e->val; + return *e; return nil; } @@ -651,12 +651,12 @@ labelh(Font *font) { /* Misc */ Atom xatom(char *name) { - MapEnt *e; + void **e; - e = hash_get(&atommap, name, 1); - if(e->val == nil) - e->val = (void*)XInternAtom(display, name, false); - return (Atom)e->val; + e = hash_get(&atommap, name, true); + if(*e == nil) + *e = (void*)XInternAtom(display, name, false); + return (Atom)*e; } void