aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--midend.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/midend.c b/midend.c
index 0038609..0d502be 100644
--- a/midend.c
+++ b/midend.c
@@ -101,6 +101,8 @@ struct midend {
void (*game_id_change_notify_function)(void *);
void *game_id_change_notify_ctx;
+
+ bool one_key_shortcuts;
};
#define ensure(me) do { \
@@ -237,6 +239,8 @@ midend *midend_new(frontend *fe, const game *ourgame,
me->be_prefs.buf = NULL;
me->be_prefs.size = me->be_prefs.len = 0;
+ me->one_key_shortcuts = true;
+
midend_reset_tilesize(me);
sfree(randseed);
@@ -986,14 +990,14 @@ static bool midend_really_process_key(midend *me, int x, int y, int button,
}
if (!movestr) {
- if (button == 'n' || button == 'N' || button == '\x0E' ||
- button == UI_NEWGAME) {
+ if ((me->one_key_shortcuts && (button == 'n' || button == 'N')) ||
+ button == '\x0E' || button == UI_NEWGAME) {
midend_new_game(me);
midend_redraw(me);
*handled = true;
goto done; /* never animate */
- } else if (button == 'u' || button == 'U' || button == '*' ||
- button == '\x1A' || button == '\x1F' ||
+ } else if ((me->one_key_shortcuts && (button=='u' || button=='U')) ||
+ button == '*' || button == '\x1A' || button == '\x1F' ||
button == UI_UNDO) {
midend_stop_anim(me);
type = me->states[me->statepos-1].movetype;
@@ -1001,8 +1005,8 @@ static bool midend_really_process_key(midend *me, int x, int y, int button,
if (!midend_undo(me))
goto done;
*handled = true;
- } else if (button == 'r' || button == 'R' || button == '#' ||
- button == '\x12' || button == '\x19' ||
+ } else if ((me->one_key_shortcuts && (button=='r' || button=='R')) ||
+ button == '#' || button == '\x12' || button == '\x19' ||
button == UI_REDO) {
midend_stop_anim(me);
if (!midend_redo(me))
@@ -1013,8 +1017,8 @@ static bool midend_really_process_key(midend *me, int x, int y, int button,
*handled = true;
if (midend_solve(me))
goto done;
- } else if (button == 'q' || button == 'Q' || button == '\x11' ||
- button == UI_QUIT) {
+ } else if ((me->one_key_shortcuts && (button=='q' || button=='Q')) ||
+ button == '\x11' || button == UI_QUIT) {
ret = false;
*handled = true;
goto done;
@@ -2901,11 +2905,18 @@ static config_item *midend_get_prefs(midend *me, game_ui *ui)
n_be_prefs++;
}
- n_me_prefs = 0;
+ n_me_prefs = 1;
all_prefs = snewn(n_me_prefs + n_be_prefs + 1, config_item);
pos = 0;
+ assert(pos < n_me_prefs);
+ all_prefs[pos].name = "Keyboard shortcuts without Ctrl";
+ all_prefs[pos].kw = "one-key-shortcuts";
+ all_prefs[pos].type = C_BOOLEAN;
+ all_prefs[pos].u.boolean.bval = me->one_key_shortcuts;
+ pos++;
+
for (i = 0; i < n_be_prefs; i++) {
all_prefs[pos] = be_prefs[i]; /* structure copy */
pos++;
@@ -2925,6 +2936,9 @@ static void midend_set_prefs(midend *me, game_ui *ui, config_item *all_prefs)
int pos = 0;
game_ui *tmpui = NULL;
+ me->one_key_shortcuts = all_prefs[pos].u.boolean.bval;
+ pos++;
+
if (me->ourgame->get_prefs) {
if (!ui)
ui = tmpui = me->ourgame->new_ui(NULL);