tprepared merging layout.c and tag.c into screen.c - dwm - [fork] customized bu… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 96d7fe16eaf6b656800f08da3156bacd75ca3b08 | |
parent 78d1a22d4e847d0e596af59d7707da1bbfe9583a | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Sun, 19 Aug 2007 10:40:07 +0200 | |
prepared merging layout.c and tag.c into screen.c | |
Diffstat: | |
M client.c | 36 ++++-------------------------… | |
M dwm.h | 4 +++- | |
M layout.c | 17 ++++------------- | |
M main.c | 28 ++++++++++++++++++++++++++++ | |
4 files changed, 39 insertions(+), 46 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -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'… | |
if((c->tags[i] = prop[i] == '1')) | |
result = True; | |
t@@ -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 | |
t@@ -39,7 +39,7 @@ enum { BarTop, BarBot, BarOff }; /* b… | |
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 { | |
t@@ -131,6 +131,8 @@ void togglebar(const char *arg); /* shows/hides the… | |
void togglemax(const char *arg); /* toggles maximization of floating cl… | |
/* main.c */ | |
+Bool gettextprop(Window w, Atom atom, | |
+ char *text, unsigned int size); /* return text property, UTF-8… | |
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 | |
t@@ -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); | |
t@@ -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'… | |
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 | |
t@@ -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); | |
t@@ -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; |