fixed misappearance of iconified windows on SIGKILL
fc109ea8
2 file(s) · +29 −4
| 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 | } |
|
| 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 | } |
|