1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
diff -Naur xspacewarp-1.2/actions.cc xspacewarp-1.2.patched/actions.cc
--- xspacewarp-1.2/actions.cc 2021-10-12 04:25:30.580232070 -0400
+++ xspacewarp-1.2.patched/actions.cc 2021-10-12 05:37:05.063841685 -0400
@@ -287,6 +287,7 @@
break;
case 'n': // quit xspacewarp
cout << "Live long and prosper!" << endl;
+ XCloseDisplay(XtDisplay(w));
exit(0);
default:
cerr << "xspacewarp: replay: unknown argument in X defaults." << endl;
@@ -310,6 +311,12 @@
}
}
+void quit(Widget w, XEvent *event, String *str, Cardinal *len) {
+ if(event->type == ClientMessage && ((Atom) event->xclient.data.l[0]) == wm_delete_window) {
+ XCloseDisplay(XtDisplay(w));
+ exit(0);
+ }
+}
// not an action but invoked by one.
// Initialize Jovian AI data and start AppTimeOuts so jovians
diff -Naur xspacewarp-1.2/globals.hh xspacewarp-1.2.patched/globals.hh
--- xspacewarp-1.2/globals.hh 1995-12-29 02:41:39.000000000 -0500
+++ xspacewarp-1.2.patched/globals.hh 2021-10-12 05:03:56.900022417 -0400
@@ -24,6 +24,7 @@
extern Pixmap pixmap;
extern GC def_GC, defrv_GC, faserGC, faserGC_rv, torpGC, torpGC_rv, explodeGC;
extern GC endeverGC, baseGC, jovianGC, starGC, blackholeGC;
+extern Atom wm_delete_window;
extern Sector universe[UROWS][UCOLS];
extern GameState gamestate;
diff -Naur xspacewarp-1.2/xprep.cc xspacewarp-1.2.patched/xprep.cc
--- xspacewarp-1.2/xprep.cc 2021-10-12 04:25:30.587232070 -0400
+++ xspacewarp-1.2.patched/xprep.cc 2021-10-12 05:23:53.950913600 -0400
@@ -28,6 +28,7 @@
static int read_dashes(const char *, char *);
static void check_values(void);
+Atom wm_delete_window;
void xprep(int argc, char **argv)
{
@@ -66,6 +67,10 @@
XtRealizeWidget(toplevel);
+ wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW", False);
+ XSetWMProtocols(XtDisplay(toplevel), XtWindow(toplevel), &wm_delete_window, 1);
+ XtOverrideTranslations(toplevel, XtParseTranslationTable("<Message>WM_PROTOCOLS: quit()"));
+
// if desired, install an invisible mouse cursor
// that does not block view of xspacewarp.
diff -Naur xspacewarp-1.2/xprep.hh xspacewarp-1.2.patched/xprep.hh
--- xspacewarp-1.2/xprep.hh 2021-10-12 04:25:30.588232069 -0400
+++ xspacewarp-1.2.patched/xprep.hh 2021-10-12 05:29:26.455883374 -0400
@@ -39,6 +39,7 @@
extern void endinput(Widget, XEvent *, String *, Cardinal *);
extern void replay(Widget, XEvent *, String *, Cardinal *);
extern void pause(Widget, XEvent *, String *, Cardinal *);
+extern void quit(Widget, XEvent *, String *, Cardinal *);
static XtActionsRec actions[] =
{
@@ -58,7 +59,8 @@
{(char*)"backspace", (XtActionProc)backspace},
{(char*)"endinput", (XtActionProc)endinput},
{(char*)"replay", (XtActionProc)replay},
- {(char*)"pause", (XtActionProc)pause}
+ {(char*)"pause", (XtActionProc)pause},
+ {(char*)"quit", (XtActionProc)quit},
};
|