tAdding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Than… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 7efa4514d104d51793c4dd01ddedd4976080be07 | |
parent bf6cf05ba5211b35d7b10169624679428c5f4974 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Fri, 5 Oct 2012 22:59:08 +0200 | |
Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank… | |
Diffstat: | |
M st.c | 15 ++++++++++++--- | |
1 file changed, 12 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -197,7 +197,7 @@ typedef struct { | |
Colormap cmap; | |
Window win; | |
XdbeBackBuffer buf; | |
- Atom xembed; | |
+ Atom xembed, wmdeletewin; | |
XIM xim; | |
XIC xic; | |
XftDraw *xft_draw; | |
t@@ -850,12 +850,15 @@ execsh(void) { | |
void | |
sigchld(int a) { | |
int stat = 0; | |
+ | |
if(waitpid(pid, &stat, 0) < 0) | |
die("Waiting for pid %hd failed: %s\n", pid, SERRNO); | |
- if(WIFEXITED(stat)) | |
+ | |
+ if(WIFEXITED(stat)) { | |
exit(WEXITSTATUS(stat)); | |
- else | |
+ } else { | |
exit(EXIT_FAILURE); | |
+ } | |
} | |
void | |
t@@ -2173,6 +2176,8 @@ xinit(void) { | |
&(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000}); | |
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(); | |
XMapWindow(xw.dpy, xw.win); | |
t@@ -2475,6 +2480,10 @@ cmessage(XEvent *e) { | |
} else if(e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { | |
xw.state &= ~WIN_FOCUSED; | |
} | |
+ } else if(e->xclient.data.l[0] == xw.wmdeletewin) { | |
+ /* Send SIGHUP to shell */ | |
+ kill(pid, SIGHUP); | |
+ exit(EXIT_SUCCESS); | |
} | |
} | |