diff options
| author | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-19 18:39:54 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-19 18:39:54 +0200 | 
| commit | fc109ea8f72e662ed58ef45329b6ca9e91d61d3b (patch) | |
| tree | b9151a8d6abf70dd33b232d265304c5ec1c9e666 | |
| parent | b975c4728046052a32626378df193217a96fbefc (diff) | |
fixed misappearance of iconified windows on SIGKILL
| -rw-r--r-- | main.c | 27 | ||||
| -rw-r--r-- | screen.c | 6 | 
2 files changed, 29 insertions, 4 deletions
| @@ -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);  		}  	} @@ -60,7 +60,7 @@ setdwmprops(void) {  	for(i = 0; i < ntags && i < sizeof prop - 1; i++)  		prop[i] = seltags[i] ? '1' : '0';  	if(i < sizeof prop - 1) -		prop[i++] = (char)ltidx; +		prop[i++] = (char)ltidx + '0';  	prop[i] = '\0';  	XChangeProperty(dpy, root, dwmprops, XA_STRING, 8,  			PropModeReplace, (unsigned char *)prop, i); @@ -223,8 +223,8 @@ getdwmprops(void) {  		for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)  			seltags[i] = prop[i] == '1';  		if(i < sizeof prop - 1 && prop[i] != '\0') { -			if(prop[i] < nlayouts) -				ltidx = prop[i]; +			if((unsigned int)(prop[i] - '0') < nlayouts) +				ltidx = prop[i] - '0';  		}  	}  } | 
