dwm

dynamic window manager
git clone git://git.suckless.org/dwm
Log | Files | Refs | README | LICENSE

commit 96d7fe16eaf6b656800f08da3156bacd75ca3b08
parent 78d1a22d4e847d0e596af59d7707da1bbfe9583a
Author: Anselm R. Garbe <garbeam@gmail.com>
Date:   Sun, 19 Aug 2007 10:40:07 +0200

prepared merging layout.c and tag.c into screen.c
Diffstat:
Mclient.c | 36++++--------------------------------
Mdwm.h | 4+++-
Mlayout.c | 17++++-------------
Mmain.c | 28++++++++++++++++++++++++++++
4 files changed, 39 insertions(+), 46 deletions(-)

diff --git a/client.c b/client.c @@ -185,15 +185,8 @@ Bool loadprops(Client *c) { unsigned int i; Bool result = False; - XTextProperty name; - - /* check if window has set a property */ - name.nitems = 0; - XGetTextProperty(dpy, c->win, &name, dwmprops); - if(name.nitems && name.encoding == XA_STRING) { - strncpy(prop, (char *)name.value, sizeof prop - 1); - prop[sizeof prop - 1] = '\0'; - XFree(name.value); + + if(gettextprop(c->win, dwmprops, prop, sizeof prop)) { for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++) if((c->tags[i] = prop[i] == '1')) result = True; @@ -424,27 +417,6 @@ updatesizehints(Client *c) { void updatetitle(Client *c) { - char **list = NULL; - int n; - XTextProperty name; - - name.nitems = 0; - c->name[0] = 0; - XGetTextProperty(dpy, c->win, &name, netatom[NetWMName]); - if(!name.nitems) - XGetWMName(dpy, c->win, &name); - if(!name.nitems) - return; - if(name.encoding == XA_STRING) - strncpy(c->name, (char *)name.value, sizeof c->name - 1); - else { - if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success - && n > 0 && *list) - { - strncpy(c->name, *list, sizeof c->name - 1); - XFreeStringList(list); - } - } - c->name[sizeof c->name - 1] = '\0'; - XFree(name.value); + if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) + gettextprop(c->win, wmatom[WMName], c->name, sizeof c->name); } diff --git a/dwm.h b/dwm.h @@ -39,7 +39,7 @@ enum { BarTop, BarBot, BarOff }; /* bar position */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ enum { NetSupported, NetWMName, NetLast }; /* EWMH atoms */ -enum { WMProtocols, WMDelete, WMState, WMLast }; /* default atoms */ +enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */ typedef struct Client Client; struct Client { @@ -131,6 +131,8 @@ void togglebar(const char *arg); /* shows/hides the bar */ void togglemax(const char *arg); /* toggles maximization of floating client */ /* main.c */ +Bool gettextprop(Window w, Atom atom, + char *text, unsigned int size); /* return text property, UTF-8 compliant */ void updatebarpos(void); /* updates the bar position */ void quit(const char *arg); /* quit dwm nicely */ int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */ diff --git a/layout.c b/layout.c @@ -98,7 +98,6 @@ void initlayouts(void) { unsigned int i, w; - /* TODO deserialize ltidx if present */ nlayouts = sizeof layouts / sizeof layouts[0]; for(blw = i = 0; i < nlayouts; i++) { w = textw(layouts[i].symbol); @@ -110,21 +109,13 @@ initlayouts(void) { void loaddwmprops(void) { unsigned int i; - XTextProperty name; - - /* check if window has set a property */ - name.nitems = 0; - XGetTextProperty(dpy, root, &name, dwmprops); - if(name.nitems && name.encoding == XA_STRING) { - strncpy(prop, (char *)name.value, sizeof prop - 1); - prop[sizeof prop - 1] = '\0'; - XFree(name.value); + + if(gettextprop(root, dwmprops, prop, sizeof prop)) { for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++) seltags[i] = prop[i] == '1'; if(i < sizeof prop - 1 && prop[i] != '\0') { - i = prop[i]; - if(i < nlayouts) - ltidx = i; + if(prop[i] < nlayouts) + ltidx = prop[i]; } } } diff --git a/main.c b/main.c @@ -143,6 +143,7 @@ setup(void) { dwmprops = XInternAtom(dpy, "_DWM_PROPERTIES", False); wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + wmatom[WMName] = XInternAtom(dpy, "WM_NAME", False); wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); @@ -220,6 +221,33 @@ xerrorstart(Display *dsply, XErrorEvent *ee) { /* extern */ +Bool +gettextprop(Window w, Atom atom, char *text, unsigned int size) { + char **list = NULL; + int n; + XTextProperty name; + + if(!text || size == 0) + return False; + text[0] = '\0'; + XGetTextProperty(dpy, w, &name, atom); + if(!name.nitems) + return False; + if(name.encoding == XA_STRING) + strncpy(text, (char *)name.value, size - 1); + else { + if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success + && n > 0 && *list) + { + strncpy(text, *list, size - 1); + XFreeStringList(list); + } + } + text[size - 1] = '\0'; + XFree(name.value); + return True; +} + void quit(const char *arg) { readin = running = False;