Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank you!
This commit is contained in:
		
							
								
								
									
										15
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								st.c
									
									
									
									
									
								
							| @@ -197,7 +197,7 @@ typedef struct { | |||||||
| 	Colormap cmap; | 	Colormap cmap; | ||||||
| 	Window win; | 	Window win; | ||||||
| 	XdbeBackBuffer buf; | 	XdbeBackBuffer buf; | ||||||
| 	Atom xembed; | 	Atom xembed, wmdeletewin; | ||||||
| 	XIM xim; | 	XIM xim; | ||||||
| 	XIC xic; | 	XIC xic; | ||||||
| 	XftDraw *xft_draw; | 	XftDraw *xft_draw; | ||||||
| @@ -850,12 +850,15 @@ execsh(void) { | |||||||
| void | void | ||||||
| sigchld(int a) { | sigchld(int a) { | ||||||
| 	int stat = 0; | 	int stat = 0; | ||||||
|  |  | ||||||
| 	if(waitpid(pid, &stat, 0) < 0) | 	if(waitpid(pid, &stat, 0) < 0) | ||||||
| 		die("Waiting for pid %hd failed: %s\n",	pid, SERRNO); | 		die("Waiting for pid %hd failed: %s\n",	pid, SERRNO); | ||||||
| 	if(WIFEXITED(stat)) |  | ||||||
|  | 	if(WIFEXITED(stat)) { | ||||||
| 		exit(WEXITSTATUS(stat)); | 		exit(WEXITSTATUS(stat)); | ||||||
| 	else | 	} else { | ||||||
| 		exit(EXIT_FAILURE); | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| @@ -2173,6 +2176,8 @@ xinit(void) { | |||||||
| 		&(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000}); | 		&(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000}); | ||||||
|  |  | ||||||
| 	xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False); | 	xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False); | ||||||
|  | 	xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False); | ||||||
|  | 	XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1); | ||||||
|  |  | ||||||
| 	xresettitle(); | 	xresettitle(); | ||||||
| 	XMapWindow(xw.dpy, xw.win); | 	XMapWindow(xw.dpy, xw.win); | ||||||
| @@ -2475,6 +2480,10 @@ cmessage(XEvent *e) { | |||||||
| 		} else if(e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { | 		} else if(e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { | ||||||
| 			xw.state &= ~WIN_FOCUSED; | 			xw.state &= ~WIN_FOCUSED; | ||||||
| 		} | 		} | ||||||
|  | 	} else if(e->xclient.data.l[0] == xw.wmdeletewin) { | ||||||
|  | 		/* Send SIGHUP to shell */ | ||||||
|  | 		kill(pid, SIGHUP); | ||||||
|  | 		exit(EXIT_SUCCESS); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user