Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank you! - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 7efa4514d104d51793c4dd01ddedd4976080be07
 (DIR) parent bf6cf05ba5211b35d7b10169624679428c5f4974
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Fri,  5 Oct 2012 22:59:08 +0200
       
       Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank you!
       
       Diffstat:
         M st.c                                |      15 ++++++++++++---
       
       1 file changed, 12 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -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);
                }
        }