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]
This commit is contained in:
Simon Tatham
2005-05-17 17:20:08 +00:00
parent f3a2773802
commit 0e197efe44
4 changed files with 20 additions and 11 deletions

14
gtk.c
View File

@ -937,6 +937,13 @@ static void menu_solve_event(GtkMenuItem *menuitem, gpointer data)
error_box(fe->window, msg); 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) static void menu_config_event(GtkMenuItem *menuitem, gpointer data)
{ {
frontend *fe = (frontend *)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); 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), "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..."); menuitem = gtk_menu_item_new_with_label("Specific...");
gtk_object_set_data(GTK_OBJECT(menuitem), "user-data", gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",

View File

@ -2,7 +2,7 @@
* midend.c: general middle fragment sitting between the * midend.c: general middle fragment sitting between the
* platform-specific front end and game-specific back end. * platform-specific front end and game-specific back end.
* Maintains a move list, takes care of Undo and Redo commands, and * 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> #include <stdio.h>
@ -238,6 +238,8 @@ void midend_restart_game(midend_data *me)
{ {
game_state *s; game_state *s;
midend_stop_anim(me);
assert(me->statepos >= 1); assert(me->statepos >= 1);
if (me->statepos == 1) if (me->statepos == 1)
return; /* no point doing anything at all! */ 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_new_game(me);
midend_redraw(me); midend_redraw(me);
return 1; /* never animate */ 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' || } else if (button == 'u' || button == 'u' ||
button == '\x1A' || button == '\x1F') { button == '\x1A' || button == '\x1F') {
midend_stop_anim(me); 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; gotspecial = TRUE;
if (!midend_undo(me)) if (!midend_undo(me))
return 1; return 1;
} else if (button == '\x12') { } else if (button == 'r' || button == 'R' ||
button == '\x12') {
midend_stop_anim(me); midend_stop_anim(me);
if (!midend_redo(me)) if (!midend_redo(me))
return 1; return 1;

2
osx.m
View File

@ -651,7 +651,7 @@ struct frontend {
} }
- (void)restartGame:(id)sender - (void)restartGame:(id)sender
{ {
[self processButton:'r' x:-1 y:-1]; midend_restart_game(me);
} }
- (void)undoMove:(id)sender - (void)undoMove:(id)sender
{ {

View File

@ -1120,8 +1120,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
PostQuitMessage(0); PostQuitMessage(0);
break; break;
case IDM_RESTART: case IDM_RESTART:
if (!midend_process_key(fe->me, 0, 0, 'r')) midend_restart_game(fe->me);
PostQuitMessage(0);
break; break;
case IDM_UNDO: case IDM_UNDO:
if (!midend_process_key(fe->me, 0, 0, 'u')) if (!midend_process_key(fe->me, 0, 0, 'u'))