]> git.draconx.ca Git - rrace.git/blobdiff - src/motif.c
Implement the about dialog.
[rrace.git] / src / motif.c
index f9da2922ef11d2a1ba54c3b305a3698953b492f6..ef06c5269f9d4a1adb3a7960957f386a563c130f 100644 (file)
@@ -28,6 +28,7 @@
 #include "motif.h"
 #include "motifopt.h"
 #include "game.h"
+#include "version.h"
 
 #define TIMER_UPDATE_MS 33
 
@@ -49,13 +50,14 @@ static char * const default_resources[] = {
        "*gameExit.accelerator: Ctrl<Key>Q",
        "*gameExit.acceleratorText: Ctrl+Q",
 
+       "*aboutDialog*pixmapTextPadding: 10",
+
        NULL
 };
 
 static void print_version(void)
 {
-       printf("%s %s\n", PROGNAME, PACKAGE_VERSION);
-       printf("Copyright (C) 2022 Nick Bowler\n");
+       version_print_head("rrace-motif", stdout);
        puts("License GPLv3+: GNU GPL version 3 or any later version");
        puts("This is free software: you are free to change and redistribute it.");
        puts("There is NO WARRANTY, to the extent permitted by law.");
@@ -211,6 +213,16 @@ static void game_input(Widget w, void *data, void *cb_data)
 
 static struct app_state state;
 
+static Widget get_shell(Widget w)
+{
+       Widget shell;
+
+       for (shell = w; !XtIsWMShell(shell);)
+               shell = XtParent(shell);
+
+       return shell;
+}
+
 static void proc_exit(Widget w, XEvent *e, String *argv, Cardinal *argc)
 {
        XtAppSetExitFlag(XtWidgetToApplicationContext(w));
@@ -218,16 +230,11 @@ static void proc_exit(Widget w, XEvent *e, String *argv, Cardinal *argc)
 
 static void proc_new_game(Widget w, XEvent *e, String *argv, Cardinal *argc)
 {
-       Widget shell;
-
-       for (shell = w; !XtIsWMShell(shell);)
-               shell = XtParent(shell);
-
        game_reset(&state.board);
 
        x11_redraw_goal(&state, -1);
        x11_redraw_game(&state, -1);
-       x11_redraw_icon(&state, shell);
+       x11_redraw_icon(&state, get_shell(w));
 
        if (!state.timer_tick) {
                XtAppContext app = XtWidgetToApplicationContext(w);
@@ -238,9 +245,15 @@ static void proc_new_game(Widget w, XEvent *e, String *argv, Cardinal *argc)
        game_begin(&state.board);
 }
 
+static void proc_about(Widget w, XEvent *e, String *argv, Cardinal *argc)
+{
+       ui_show_about(&state, get_shell(w));
+}
+
 static const XtActionsRec menu_actions[] = {
        { "gameNew", proc_new_game },
-       { "gameExit", proc_exit }
+       { "gameExit", proc_exit },
+       { "helpAbout", proc_about }
 };
 
 static XtAppContext app_initialize(int argc, char **argv)