wmii

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

commit 268260d225a562bc001b75fb10869401e44b796e
parent 80433fe8386977bc6c9193f43b8d00c53038f582
Author: Kris Maglione <jg@suckless.org>
Date:   Wed, 27 Jun 2007 21:47:55 -0400

Fix MWM hints. Fix ConfigureRequest botch.

Diffstat:
cmd/wmii/client.c | 42+++++++++++++++++++++---------------------
cmd/wmii/utf.c | 1+
cmd/wmii/x11.c | 12++++++++----
3 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/cmd/wmii/client.c b/cmd/wmii/client.c @@ -222,10 +222,10 @@ gravclient(Client *c, Rectangle rd) { r = c->sel->r; else r = c->sel->revert; - r = gravitate(c->w.r, r, h->grav); + r = gravitate(r, c->r, h->grav); if(h->gravstatic) r = rectaddpt(r, sp); - return r; + return frame2client(c->sel, r); }else { r = client2frame(nil, rd); r = gravitate(r, rd, h->grav); @@ -528,35 +528,35 @@ updatemwm(Client *c) { All = 0x1, Border = 0x2, Title = 0x8, + FlagDecor = 0x2, + Flags = 0, + Decor = 2, }; Rectangle r; - ulong *ret, decor; + ulong *ret; Atom real; int n; n = getproperty(&c->w, "_MOTIF_WM_HINTS", "_MOTIF_WM_HINTS", &real, - 2L, (void*)&ret, 1L); + 0L, (void*)&ret, 3L); - if(n == 0) { + if(c->sel) + r = frame2client(c->sel, c->sel->r); + if(n >= 3 && (ret[Flags]&FlagDecor)) { + if(ret[Decor]&All) + ret[Decor] ^= ~0; + c->borderless = ((ret[Decor]&Border)==0); + c->titleless = ((ret[Decor]&Title)==0); + }else { c->borderless = 0; c->titleless = 0; - }else { - decor = *ret; - free(ret); - - if(c->sel) - r = frame2client(c->sel, c->sel->r); - - if(decor&All) - decor ^= ~0; - c->borderless = ((decor&Border)==0); - c->titleless = ((decor&Title)==0); + } + free(ret); - if(c->sel) { - r = client2frame(c->sel, c->sel->r); - resize_client(c, &r); - draw_frame(c->sel); - } + if(c->sel) { + r = client2frame(c->sel, r); + resize_client(c, &r); + draw_frame(c->sel); } } diff --git a/cmd/wmii/utf.c b/cmd/wmii/utf.c @@ -320,6 +320,7 @@ utfutf(char *s1, char *s2) return 0; } +/* This iconv crud is not by Ken or Rob. It is in the Public Domain. */ char* toutf8n(char *str, size_t nstr) { static iconv_t cd; diff --git a/cmd/wmii/x11.c b/cmd/wmii/x11.c @@ -575,17 +575,21 @@ getproperty(Window *w, char *prop, char *type, Atom *actual, ulong offset, uchar Atom typea; ulong n, extra; int status, format; - + typea = (type ? xatom(type) : 0L); status = XGetWindowProperty(display, w->w, xatom(prop), offset, length, False /* delete */, typea, actual, &format, &n, &extra, ret); - if(status != Success) + if(status != Success) { + *ret = nil; return 0; - if(n == 0) + } + if(n == 0) { free(*ret); + *ret = nil; + } return n; } @@ -801,5 +805,5 @@ gravitate(Rectangle rc, Rectangle rf, Point grav) { d = divpt(d, Pt(2, 2)); d = mulpt(d, grav); - return rectaddpt(rc, d); + return rectsubpt(rc, d); }