[hackers] [dwm] fixed misappearance of iconified windows on SIGKILL

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

changeset: 969:50fb50842dbc
tag: tip
user: Anselm R. Garbe <garbeam_AT_gmail.com>
date: Sun Aug 19 18:39:54 2007 +0200
summary: fixed misappearance of iconified windows on SIGKILL

diff -r ce9a5452ac8c -r 50fb50842dbc main.c
--- a/main.c Sun Aug 19 11:00:47 2007 +0200
+++ b/main.c Sun Aug 19 18:39:54 2007 +0200
@@ -111,6 +111,24 @@ initfont(const char *fontstr) {
         dc.font.height = dc.font.ascent + dc.font.descent;
 }
 
+static long
+getstate(Window w) {
+ int format, status;
+ long result = -1;
+ unsigned char *p = NULL;
+ unsigned long n, extra;
+ Atom real;
+
+ status = XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
+ &real, &format, &n, &extra, (unsigned char **)&p);
+ if(status != Success)
+ return -1;
+ if(n != 0)
+ result = *p;
+ XFree(p);
+ return result;
+}
+
 static void
 scan(void) {
         unsigned int i, num;
@@ -123,7 +141,14 @@ scan(void) {
                         if(!XGetWindowAttributes(dpy, wins[i], &wa)
                         || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
                                 continue;
- if(wa.map_state == IsViewable)
+ if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
+ manage(wins[i], &wa);
+ }
+ for(i = 0; i < num; i++) { /* now the transients */
+ if(!XGetWindowAttributes(dpy, wins[i], &wa))
+ continue;
+ if(XGetTransientForHint(dpy, wins[i], &d1)
+ && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
                                 manage(wins[i], &wa);
                 }
         }
diff -r ce9a5452ac8c -r 50fb50842dbc screen.c
--- a/screen.c Sun Aug 19 11:00:47 2007 +0200
+++ b/screen.c Sun Aug 19 18:39:54 2007 +0200
@@ -60,7 +60,7 @@ setdwmprops(void) {
         for(i = 0; i < ntags && i < sizeof prop - 1; i++)
                 prop[i] = seltags[i] ? '1' : '0';
         if(i < sizeof prop - 1)
- prop[i++] = (char)ltidx;
+ prop[i++] = (char)ltidx + '0';
         prop[i] = '\0';
         XChangeProperty(dpy, root, dwmprops, XA_STRING, 8,
                         PropModeReplace, (unsigned char *)prop, i);
@@ -223,8 +223,8 @@ getdwmprops(void) {
                 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') {
- if(prop[i] < nlayouts)
- ltidx = prop[i];
+ if((unsigned int)(prop[i] - '0') < nlayouts)
+ ltidx = prop[i] - '0';
                 }
         }
 }
Received on Sun Aug 19 2007 - 18:44:30 UTC

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