mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
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:
14
gtk.c
14
gtk.c
@ -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",
|
||||||
|
12
midend.c
12
midend.c
@ -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
2
osx.m
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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'))
|
||||||
|
Reference in New Issue
Block a user