diff options
author | Christoph Lohmann <20h@r-36.net> | 2012-10-05 22:59:08 +0200 |
---|---|---|
committer | Christoph Lohmann <20h@r-36.net> | 2012-10-05 22:59:08 +0200 |
commit | 7efa4514d104d51793c4dd01ddedd4976080be07 (patch) | |
tree | 838acb5b4c2d9f2c8772e79dd640bb148a237904 /st.c | |
parent | bf6cf05ba5211b35d7b10169624679428c5f4974 (diff) | |
download | st-7efa4514d104d51793c4dd01ddedd4976080be07.tar.gz st-7efa4514d104d51793c4dd01ddedd4976080be07.tar.bz2 |
Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank you!
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -197,7 +197,7 @@ typedef struct { Colormap cmap; Window win; XdbeBackBuffer buf; - Atom xembed; + Atom xembed, wmdeletewin; XIM xim; XIC xic; XftDraw *xft_draw; @@ -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 @@ -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); @@ -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); } } |