wmii

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

commit c8a5beaf868d11b045c4546fdc6db2823ac153d7
parent f754b18164161ee6d795a33a3c1e7d9c50bc5efc
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Wed, 10 May 2006 13:38:01 +0200

improved UTF8-usage due to X_HAVE_UTF8_STRING checks


Diffstat:
cmd/wm/client.c | 11+++++++++--
cmd/wm/wm.c | 5+++++
cmd/wm/wm.h | 8++++++++
liblitz/draw.c | 4++++
liblitz/font.c | 4++++
5 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -26,14 +26,21 @@ update_client_name(Client *c) name.nitems = 0; c->name[0] = 0; - XGetWMName(dpy, c->win, &name); + XGetTextProperty(dpy, c->win, &name, net_atom[NetWMName]); + if(!name.nitems) + XGetWMName(dpy, c->win, &name); if(!name.nitems) return; if(name.encoding == XA_STRING) cext_strlcpy(c->name, (char *)name.value, sizeof(c->name)); else { +#ifdef X_HAVE_UTF8_STRING + if(Xutf8TextPropertyToTextList(dpy, &name, &list, &n) >= Success + && n > 0 && *list) +#else if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) +#endif { cext_strlcpy(c->name, *list, sizeof(c->name)); XFreeStringList(list); @@ -243,7 +250,7 @@ prop_client(Client *c, XPropertyEvent *e) } break; } - if(e->atom == XA_WM_NAME) { + if(e->atom == XA_WM_NAME || e->atom == net_atom[NetWMName]) { update_client_name(c); if(c->frame.size) draw_client(c); diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -121,6 +121,11 @@ init_atoms() wm_atom[WMState] = XInternAtom(dpy, "WM_STATE", False); wm_atom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); wm_atom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + net_atom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); + net_atom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); + + XChangeProperty(dpy, root, net_atom[NetSupported], XA_ATOM, 32, + PropModeReplace, (unsigned char *) net_atom, NetLast); } static void diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -18,6 +18,13 @@ enum { WMLast }; +/* NET atoms */ +enum { + NetSupported, + NetWMName, + NetLast +}; + /* Column modes */ enum { Coldefault, @@ -184,6 +191,7 @@ XRectangle brect; Qid root_qid; Default def; Atom wm_atom[WMLast]; +Atom net_atom[NetLast]; Cursor cursor[CurLast]; unsigned int valid_mask; unsigned int num_lock_mask; diff --git a/liblitz/draw.c b/liblitz/draw.c @@ -110,7 +110,11 @@ xdrawtext(Display *dpy, BlitzDraw *d) break; } if(d->font.set) +#ifdef X_HAVE_UTF8_STRING + Xutf8DrawString(dpy, d->drawable, d->font.set, d->gc, x, y, text, len); +#else XmbDrawString(dpy, d->drawable, d->font.set, d->gc, x, y, text, len); +#endif else XDrawString(dpy, d->drawable, d->gc, x, y, text, len); } diff --git a/liblitz/font.c b/liblitz/font.c @@ -16,7 +16,11 @@ blitz_textwidth(Display *dpy, BlitzFont *font, char *text) { if(font->set) { XRectangle r; +#ifdef X_HAVE_UTF8_STRING + Xutf8TextExtents(font->set, text, strlen(text), nil, &r); +#else XmbTextExtents(font->set, text, strlen(text), nil, &r); +#endif return r.width; } return XTextWidth(font->xfont, text, strlen(text));