X-Git-Url: http://git.draconx.ca/gitweb/rrace.git/blobdiff_plain/683ddffaa0940d7c8b792d790c617e6950ce7a1a..b39d19918b63b80d1f3b068d158fe43415b9d1b6:/src/motif.c diff --git a/src/motif.c b/src/motif.c index cce9f3f..ef2bd6a 100644 --- a/src/motif.c +++ b/src/motif.c @@ -25,19 +25,26 @@ #include "help.h" #include "motif.h" -#include "options.h" +#include "motifopt.h" +#include "game.h" #define PROGNAME "rrace" static const char *progname = PROGNAME; static const struct option lopts[] = { LOPTS_INITIALIZER, {0} }; static char * const default_resources[] = { - PROGNAME "*game.height: 371", // 365 + 2*shadowThickness - PROGNAME "*game.width: 498", + "*game.height: 371", // 365 + 2*shadowThickness + "*game.width: 498", - PROGNAME "*game.XmFrame.shadowThickness: 3", - PROGNAME "*game.XmFrame.shadowType: shadow_in", - PROGNAME "*goalArea.leftOffset: 1", + "*game.XmFrame.shadowThickness: 3", + "*game.XmFrame.shadowType: shadow_in", + "*goalArea.leftOffset: 1", + "*gameCanvas.background: #202020", + + "*gameNew.accelerator: CtrlN", + "*gameNew.acceleratorText: Ctrl+N", + "*gameExit.accelerator: CtrlQ", + "*gameExit.acceleratorText: Ctrl+Q", NULL }; @@ -68,7 +75,6 @@ static void print_help(void) puts("Options:"); for (opt = lopts; opt->name; opt++) { struct lopt_help help; - int w; if (!lopt_get_help(opt, &help)) continue; @@ -120,6 +126,31 @@ static Widget early_setup(XtAppContext *app, int argc, char **argv) return shell; } +static struct app_state state; + +static void proc_exit(Widget w, XEvent *e, String *argv, Cardinal *argc) +{ + XtAppSetExitFlag(XtWidgetToApplicationContext(w)); +} + +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); + x11_redraw_game(&state, -1); + x11_redraw_icon(&state, shell); +} + +static const XtActionsRec menu_actions[] = { + { "gameNew", proc_new_game }, + { "gameExit", proc_exit } +}; + static XtAppContext app_initialize(int argc, char **argv) { XtAppContext app; @@ -129,9 +160,15 @@ static XtAppContext app_initialize(int argc, char **argv) progname = argv[0]; shell = early_setup(&app, argc, argv); - ui_initialize(shell); + XtAppAddActions(app, (void *)menu_actions, XtNumber(menu_actions)); + ui_initialize(&state, shell); + x11_initialize(&state, XtScreen(shell)); + game_reset(&state.board); + state.use_ewmh_icons = ewmh_probe_wm_icon(shell); XtRealizeWidget(shell); + x11_redraw_icon(&state, shell); + return app; }