fixed misappearance of iconified windows on SIGKILL

master
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; 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 static void
scan(void) { scan(void) {
unsigned int i, num; unsigned int i, num;
@ -123,7 +141,14 @@ scan(void) {
if(!XGetWindowAttributes(dpy, wins[i], &wa) if(!XGetWindowAttributes(dpy, wins[i], &wa)
|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
continue; 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); manage(wins[i], &wa);
} }
} }

View File

@ -60,7 +60,7 @@ setdwmprops(void) {
for(i = 0; i < ntags && i < sizeof prop - 1; i++) for(i = 0; i < ntags && i < sizeof prop - 1; i++)
prop[i] = seltags[i] ? '1' : '0'; prop[i] = seltags[i] ? '1' : '0';
if(i < sizeof prop - 1) if(i < sizeof prop - 1)
prop[i++] = (char)ltidx; prop[i++] = (char)ltidx + '0';
prop[i] = '\0'; prop[i] = '\0';
XChangeProperty(dpy, root, dwmprops, XA_STRING, 8, XChangeProperty(dpy, root, dwmprops, XA_STRING, 8,
PropModeReplace, (unsigned char *)prop, i); PropModeReplace, (unsigned char *)prop, i);
@ -223,8 +223,8 @@ getdwmprops(void) {
for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++) for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)
seltags[i] = prop[i] == '1'; seltags[i] = prop[i] == '1';
if(i < sizeof prop - 1 && prop[i] != '\0') { if(i < sizeof prop - 1 && prop[i] != '\0') {
if(prop[i] < nlayouts) if((unsigned int)(prop[i] - '0') < nlayouts)
ltidx = prop[i]; ltidx = prop[i] - '0';
} }
} }
} }