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.zip | |
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 { | |||
| 197 | Colormap cmap; | 197 | Colormap cmap; |
| 198 | Window win; | 198 | Window win; |
| 199 | XdbeBackBuffer buf; | 199 | XdbeBackBuffer buf; |
| 200 | Atom xembed; | 200 | Atom xembed, wmdeletewin; |
| 201 | XIM xim; | 201 | XIM xim; |
| 202 | XIC xic; | 202 | XIC xic; |
| 203 | XftDraw *xft_draw; | 203 | XftDraw *xft_draw; |
| @@ -850,12 +850,15 @@ execsh(void) { | |||
| 850 | void | 850 | void |
| 851 | sigchld(int a) { | 851 | sigchld(int a) { |
| 852 | int stat = 0; | 852 | int stat = 0; |
| 853 | |||
| 853 | if(waitpid(pid, &stat, 0) < 0) | 854 | if(waitpid(pid, &stat, 0) < 0) |
| 854 | die("Waiting for pid %hd failed: %s\n", pid, SERRNO); | 855 | die("Waiting for pid %hd failed: %s\n", pid, SERRNO); |
| 855 | if(WIFEXITED(stat)) | 856 | |
| 857 | if(WIFEXITED(stat)) { | ||
| 856 | exit(WEXITSTATUS(stat)); | 858 | exit(WEXITSTATUS(stat)); |
| 857 | else | 859 | } else { |
| 858 | exit(EXIT_FAILURE); | 860 | exit(EXIT_FAILURE); |
| 861 | } | ||
| 859 | } | 862 | } |
| 860 | 863 | ||
| 861 | void | 864 | void |
| @@ -2173,6 +2176,8 @@ xinit(void) { | |||
| 2173 | &(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000}); | 2176 | &(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000}); |
| 2174 | 2177 | ||
| 2175 | xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False); | 2178 | xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False); |
| 2179 | xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False); | ||
| 2180 | XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1); | ||
| 2176 | 2181 | ||
| 2177 | xresettitle(); | 2182 | xresettitle(); |
| 2178 | XMapWindow(xw.dpy, xw.win); | 2183 | XMapWindow(xw.dpy, xw.win); |
| @@ -2475,6 +2480,10 @@ cmessage(XEvent *e) { | |||
| 2475 | } else if(e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { | 2480 | } else if(e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { |
| 2476 | xw.state &= ~WIN_FOCUSED; | 2481 | xw.state &= ~WIN_FOCUSED; |
| 2477 | } | 2482 | } |
| 2483 | } else if(e->xclient.data.l[0] == xw.wmdeletewin) { | ||
| 2484 | /* Send SIGHUP to shell */ | ||
| 2485 | kill(pid, SIGHUP); | ||
| 2486 | exit(EXIT_SUCCESS); | ||
| 2478 | } | 2487 | } |
| 2479 | } | 2488 | } |
| 2480 | 2489 | ||
