]> git.draconx.ca Git - rrace.git/blobdiff - src/motif.c
motif: Combine status details into a single flags member.
[rrace.git] / src / motif.c
index fbdc9a750a2e86cb934109de3d3e9aebbb8ec791..66e31df1a56ad03e5b163450456f3b093ce58c3e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * X11 GUI for slide puzzle game
- * Copyright © 2022 Nick Bowler
+ * Copyright © 2022-2023 Nick Bowler
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -143,14 +143,13 @@ static void timer_tick(void *data, XtIntervalId *id)
 
        if (state->board.x > 4) {
                /* Game is over */
-               state->timer_tick = 0;
+               state->flags &= ~FLAG_TIMER_RUNNING;
                return;
        }
 
-       app = XtWidgetToApplicationContext(state->game);
        ui_timer_update(state, game_elapsed(&state->board));
-       state->timer_tick = XtAppAddTimeOut(app, TIMER_UPDATE_MS,
-                                           timer_tick, state);
+       app = XtWidgetToApplicationContext(state->game);
+       XtAppAddTimeOut(app, TIMER_UPDATE_MS, timer_tick, state);
 }
 
 static void do_input_move(struct app_state *state, int x, int y)
@@ -178,7 +177,9 @@ static void do_input_move(struct app_state *state, int x, int y)
 
 static void set_view_goal(struct app_state *state, int view_goal)
 {
-       state->view_goal_on_game = !!view_goal;
+       state->flags &= ~FLAG_VIEW_GOAL_ON_GAME;
+       state->flags |= view_goal ? FLAG_VIEW_GOAL_ON_GAME : 0;
+
        x11_redraw_game(state, game_check_goal(&state->board));
 }
 
@@ -231,18 +232,18 @@ 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)
 {
+       XtAppContext app;
+
        game_reset(&state.board);
 
        x11_redraw_goal(&state, -1, get_shell(w));
        x11_redraw_game(&state, -1);
 
-       if (!state.timer_tick) {
-               XtAppContext app = XtWidgetToApplicationContext(w);
-               state.timer_tick = XtAppAddTimeOut(app, TIMER_UPDATE_MS,
-                                                  timer_tick, &state);
-       }
-
        game_begin(&state.board);
+       if (!(state.flags & FLAG_TIMER_RUNNING)) {
+               state.flags |= FLAG_TIMER_RUNNING;
+               timer_tick(&state, 0);
+       }
 }
 
 static void proc_about(Widget w, XEvent *e, String *argv, Cardinal *argc)
@@ -312,7 +313,7 @@ static XtAppContext app_initialize(int argc, char **argv)
                state.board.game[i] = state.board.goal[i] << GOAL_SHIFT;
        game_finish(&state.board);
 
-       state.use_ewmh_icons = ewmh_probe_wm_icon(shell);
+       state.flags = ewmh_probe_wm_icon(shell);
        XtRealizeWidget(shell);
 
        x11_redraw_goal(&state, 0, shell);