fixed misappearance of iconified windows on SIGKILL

This commit is contained in:
Anselm R. Garbe
2007-08-19 18:39:54 +02:00
parent b975c47280
commit fc109ea8f7
2 changed files with 29 additions and 4 deletions

27
main.c
View File

@ -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);
}
}