From: Anselm R. Garbe Date: Sun, 19 Aug 2007 08:40:07 +0000 (+0200) Subject: prepared merging layout.c and tag.c into screen.c X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;ds=inline;h=96d7fe16eaf6b656800f08da3156bacd75ca3b08;hp=78d1a22d4e847d0e596af59d7707da1bbfe9583a;p=dwm.git prepared merging layout.c and tag.c into screen.c --- diff --git a/client.c b/client.c index d11ef7f..d94c0ed 100644 --- 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 index 9dd764f..36a0266 100644 --- 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 index 96e125a..2763d2c 100644 --- 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 index 7cc5ecf..9127d16 100644 --- 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;