shithub: puzzles

Download patch

ref: 0e197efe44db0371dcba395be41fe772dac02b01
parent: f3a27738025ce7d2bce24548f13133ff499ff5f6
author: Simon Tatham <anakin@pobox.com>
date: Tue May 17 13:20:08 EDT 2005

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.

[originally from svn r5796]

--- a/gtk.c
+++ b/gtk.c
@@ -937,6 +937,13 @@
 	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 @@
     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",
--- 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 <stdio.h>
@@ -238,6 +238,8 @@
 {
     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 @@
 	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 @@
         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;
--- a/osx.m
+++ b/osx.m
@@ -651,7 +651,7 @@
 }
 - (void)restartGame:(id)sender
 {
-    [self processButton:'r' x:-1 y:-1];
+    midend_restart_game(me);
 }
 - (void)undoMove:(id)sender
 {
--- a/windows.c
+++ b/windows.c
@@ -1120,8 +1120,7 @@
 		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'))