summaryrefslogtreecommitdiffstats
path: root/games/xspacewarp/winclose.diff
diff options
context:
space:
mode:
Diffstat (limited to 'games/xspacewarp/winclose.diff')
-rw-r--r--games/xspacewarp/winclose.diff78
1 files changed, 78 insertions, 0 deletions
diff --git a/games/xspacewarp/winclose.diff b/games/xspacewarp/winclose.diff
new file mode 100644
index 0000000000..15da48e27d
--- /dev/null
+++ b/games/xspacewarp/winclose.diff
@@ -0,0 +1,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},
+ };
+
+