fixed misappearance of iconified windows on SIGKILL
This commit is contained in:
parent
b975c47280
commit
fc109ea8f7
2 changed files with 29 additions and 4 deletions
27
main.c
27
main.c
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
6
screen.c
6
screen.c
|
@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue