Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank you!
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
7ae9d8c
..
1ac7fde
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-197,7
+197,7
@@
typedef struct {
Colormap cmap;
Window win;
XdbeBackBuffer buf;
Colormap cmap;
Window win;
XdbeBackBuffer buf;
- Atom xembed;
+ Atom xembed
, wmdeletewin
;
XIM xim;
XIC xic;
XftDraw *xft_draw;
XIM xim;
XIC xic;
XftDraw *xft_draw;
@@
-850,12
+850,15
@@
execsh(void) {
void
sigchld(int a) {
int stat = 0;
void
sigchld(int a) {
int stat = 0;
+
if(waitpid(pid, &stat, 0) < 0)
die("Waiting for pid %hd failed: %s\n", pid, SERRNO);
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));
exit(WEXITSTATUS(stat));
- else
+ } else {
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
+ }
}
void
}
void
@@
-2173,6
+2176,8
@@
xinit(void) {
&(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000});
xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
&(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);
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[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);
}
}
}
}