# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 7efa4514d104d51793c4dd01ddedd4976080be07
    parent bf6cf05ba5211b35d7b10169624679428c5f4974
    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:
    Mst.c | 15++++++++++++---

    1 file changed, 12 insertions(+), 3 deletions(-)
    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);
     	}
     }