fixed misappearance of iconified windows on SIGKILL
This commit is contained in:
		
							parent
							
								
									b975c47280
								
							
						
					
					
						commit
						fc109ea8f7
					
				
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user