fixed misappearance of iconified windows on SIGKILL fc109ea8
Anselm R. Garbe · 2007-08-19 18:39 2 file(s) · +29 −4
main.c +26 −1
111 111
	dc.font.height = dc.font.ascent + dc.font.descent;
112 112
}
113 113
114 +
static long
115 +
getstate(Window w) {
116 +
	int format, status;
117 +
	long result = -1;
118 +
	unsigned char *p = NULL;
119 +
	unsigned long n, extra;
120 +
	Atom real;
121 +
122 +
	status = XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
123 +
			&real, &format, &n, &extra, (unsigned char **)&p);
124 +
	if(status != Success)
125 +
		return -1;
126 +
	if(n != 0)
127 +
		result = *p;
128 +
	XFree(p);
129 +
	return result;
130 +
}
131 +
114 132
static void
115 133
scan(void) {
116 134
	unsigned int i, num;
123 141
			if(!XGetWindowAttributes(dpy, wins[i], &wa)
124 142
			|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
125 143
				continue;
126 -
			if(wa.map_state == IsViewable)
144 +
			if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
145 +
				manage(wins[i], &wa);
146 +
		}
147 +
		for(i = 0; i < num; i++) { /* now the transients */
148 +
			if(!XGetWindowAttributes(dpy, wins[i], &wa))
149 +
				continue;
150 +
			if(XGetTransientForHint(dpy, wins[i], &d1)
151 +
			&& (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
127 152
				manage(wins[i], &wa);
128 153
		}
129 154
	}
screen.c +3 −3
60 60
	for(i = 0; i < ntags && i < sizeof prop - 1; i++)
61 61
		prop[i] = seltags[i] ? '1' : '0';
62 62
	if(i < sizeof prop - 1)
63 -
		prop[i++] = (char)ltidx;
63 +
		prop[i++] = (char)ltidx + '0';
64 64
	prop[i] = '\0';
65 65
	XChangeProperty(dpy, root, dwmprops, XA_STRING, 8,
66 66
			PropModeReplace, (unsigned char *)prop, i);
223 223
		for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)
224 224
			seltags[i] = prop[i] == '1';
225 225
		if(i < sizeof prop - 1 && prop[i] != '\0') {
226 -
			if(prop[i] < nlayouts)
227 -
				ltidx = prop[i];
226 +
			if((unsigned int)(prop[i] - '0') < nlayouts)
227 +
				ltidx = prop[i] - '0';
228 228
		}
229 229
	}
230 230
}