From 7f89707cfefc99bd87511cb5d1f48a217c85e8fa Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 17 May 2005 17:20:08 +0000 Subject: [PATCH] After much thought, I've decided that `Restart' on r is not a particularly useful keypress, particularly given how easy it is to confuse it with `Redo'. So both r and ^R are now Redo, and Restart is relegated to being a menu-only option. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5796 cda61777-01e9-0310-a592-d414129be87e --- gtk.c | 14 +++++++++++++- midend.c | 12 +++++------- osx.m | 2 +- windows.c | 3 +-- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/gtk.c b/gtk.c index 24b2cca..6de9fcf 100644 --- a/gtk.c +++ b/gtk.c @@ -937,6 +937,13 @@ static void menu_solve_event(GtkMenuItem *menuitem, gpointer data) error_box(fe->window, msg); } +static void menu_restart_event(GtkMenuItem *menuitem, gpointer data) +{ + frontend *fe = (frontend *)data; + + midend_restart_game(fe->me); +} + static void menu_config_event(GtkMenuItem *menuitem, gpointer data) { frontend *fe = (frontend *)data; @@ -1032,7 +1039,12 @@ static frontend *new_window(char *game_id, char **error) gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); add_menu_item_with_key(fe, GTK_CONTAINER(menu), "New", 'n'); - add_menu_item_with_key(fe, GTK_CONTAINER(menu), "Restart", 'r'); + + menuitem = gtk_menu_item_new_with_label("Restart"); + gtk_container_add(GTK_CONTAINER(menu), menuitem); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(menu_restart_event), fe); + gtk_widget_show(menuitem); menuitem = gtk_menu_item_new_with_label("Specific..."); gtk_object_set_data(GTK_OBJECT(menuitem), "user-data", diff --git a/midend.c b/midend.c index 0c91491..d35ad7c 100644 --- a/midend.c +++ b/midend.c @@ -2,7 +2,7 @@ * midend.c: general middle fragment sitting between the * platform-specific front end and game-specific back end. * Maintains a move list, takes care of Undo and Redo commands, and - * processes standard keystrokes for undo/redo/new/restart/quit. + * processes standard keystrokes for undo/redo/new/quit. */ #include @@ -238,6 +238,8 @@ void midend_restart_game(midend_data *me) { game_state *s; + midend_stop_anim(me); + assert(me->statepos >= 1); if (me->statepos == 1) return; /* no point doing anything at all! */ @@ -272,11 +274,6 @@ static int midend_really_process_key(midend_data *me, int x, int y, int button) midend_new_game(me); midend_redraw(me); return 1; /* never animate */ - } else if (button == 'r' || button == 'R') { - midend_stop_anim(me); - midend_restart_game(me); - midend_redraw(me); - return 1; /* never animate */ } else if (button == 'u' || button == 'u' || button == '\x1A' || button == '\x1F') { midend_stop_anim(me); @@ -284,7 +281,8 @@ static int midend_really_process_key(midend_data *me, int x, int y, int button) gotspecial = TRUE; if (!midend_undo(me)) return 1; - } else if (button == '\x12') { + } else if (button == 'r' || button == 'R' || + button == '\x12') { midend_stop_anim(me); if (!midend_redo(me)) return 1; diff --git a/osx.m b/osx.m index 337748d..dfed94c 100644 --- a/osx.m +++ b/osx.m @@ -651,7 +651,7 @@ struct frontend { } - (void)restartGame:(id)sender { - [self processButton:'r' x:-1 y:-1]; + midend_restart_game(me); } - (void)undoMove:(id)sender { diff --git a/windows.c b/windows.c index da324b1..45ec69c 100644 --- a/windows.c +++ b/windows.c @@ -1120,8 +1120,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, PostQuitMessage(0); break; case IDM_RESTART: - if (!midend_process_key(fe->me, 0, 0, 'r')) - PostQuitMessage(0); + midend_restart_game(fe->me); break; case IDM_UNDO: if (!midend_process_key(fe->me, 0, 0, 'u')) -- 2.11.0