[hackers] [dwm] prepared merging layout.c and tag.c into screen.c

From: Anselm R. Garbe <garbeam_AT_gmail.com>
Date: Sun Aug 19 10:44:14 2007

changeset: 966:3ad7903c9e83
tag: tip
user: Anselm R. Garbe <garbeam_AT_gmail.com>
date: Sun Aug 19 10:40:07 2007 +0200
summary: prepared merging layout.c and tag.c into screen.c

diff -r b3f4b0b3a5d7 -r 3ad7903c9e83 client.c
--- a/client.c Sun Aug 19 10:13:24 2007 +0200
+++ b/client.c Sun Aug 19 10:40:07 2007 +0200
@@ -185,15 +185,8 @@ loadprops(Client *c) {
 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 -r b3f4b0b3a5d7 -r 3ad7903c9e83 dwm.h
--- a/dwm.h Sun Aug 19 10:13:24 2007 +0200
+++ b/dwm.h Sun Aug 19 10:40:07 2007 +0200
@@ -39,7 +39,7 @@ enum { CurNormal, CurResize, CurMove, Cu
 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 togglemax(const char *arg); /* togg
 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 -r b3f4b0b3a5d7 -r 3ad7903c9e83 layout.c
--- a/layout.c Sun Aug 19 10:13:24 2007 +0200
+++ b/layout.c Sun Aug 19 10:40:07 2007 +0200
@@ -98,7 +98,6 @@ initlayouts(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 @@ 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 -r b3f4b0b3a5d7 -r 3ad7903c9e83 main.c
--- a/main.c Sun Aug 19 10:13:24 2007 +0200
+++ b/main.c Sun Aug 19 10:40:07 2007 +0200
@@ -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
 
 /* 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;
Received on Sun Aug 19 2007 - 10:44:14 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:57:58 UTC