From 6dac51795e5672f32bba787c0f011cb01e464a96 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 22 Mar 2023 16:58:22 +0000 Subject: [PATCH] Add an environment variable to control initial cursor visibility If you define PUZZLES_INITIAL_CURSOR=y, puzzles that have a keyboard cursor will default to making it visible rather than invisible at the start of a new game. Behaviour is otherwise the same, so mouse actions will cause the cursor to vanish and keyboard actions will cause it to appear. It's just the default that has changed. The purpose of this is for use on devices and platforms where the primary or only means of interaction is keyboard-based. In those cases, starting with the keyboard cursor invisible is weird and a bit confusing. --- blackbox.c | 2 +- bridges.c | 2 +- dominosa.c | 2 +- filling.c | 2 +- flip.c | 2 +- flood.c | 2 +- galaxies.c | 2 +- guess.c | 1 + keen.c | 3 +-- lightup.c | 2 +- magnets.c | 2 +- map.c | 2 +- mines.c | 2 +- mosaic.c | 2 +- net.c | 2 +- netslide.c | 2 +- palisade.c | 2 +- pattern.c | 2 +- pearl.c | 2 +- pegs.c | 2 +- range.c | 2 +- rect.c | 2 +- samegame.c | 2 +- signpost.c | 2 +- singles.c | 2 +- sixteen.c | 2 +- slant.c | 2 +- solo.c | 3 +-- tents.c | 2 +- towers.c | 3 +-- tracks.c | 2 +- twiddle.c | 2 +- undead.c | 5 ++--- unequal.c | 3 +-- unruly.c | 2 +- 35 files changed, 36 insertions(+), 40 deletions(-) diff --git a/blackbox.c b/blackbox.c index 51a15f6..69959b6 100644 --- a/blackbox.c +++ b/blackbox.c @@ -485,7 +485,7 @@ static game_ui *new_ui(const game_state *state) ui->newmove = false; ui->cur_x = ui->cur_y = 1; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->flash_laser = 0; diff --git a/bridges.c b/bridges.c index c95b38c..1694039 100644 --- a/bridges.c +++ b/bridges.c @@ -2127,7 +2127,7 @@ static game_ui *new_ui(const game_state *state) ui_cancel_drag(ui); ui->cur_x = state->islands[0].x; ui->cur_y = state->islands[0].y; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->show_hints = false; return ui; } diff --git a/dominosa.c b/dominosa.c index baf5054..35f6a56 100644 --- a/dominosa.c +++ b/dominosa.c @@ -2713,7 +2713,7 @@ static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->highlight_1 = ui->highlight_2 = -1; return ui; } diff --git a/filling.c b/filling.c index 215eefe..6552d50 100644 --- a/filling.c +++ b/filling.c @@ -1396,7 +1396,7 @@ static game_ui *new_ui(const game_state *state) ui->sel = NULL; ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->keydragging = false; return ui; diff --git a/flip.c b/flip.c index 466a3af..7170bb4 100644 --- a/flip.c +++ b/flip.c @@ -913,7 +913,7 @@ static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); ui->cx = ui->cy = 0; - ui->cdraw = false; + ui->cdraw = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/flood.c b/flood.c index 77eb48a..0ed8f06 100644 --- a/flood.c +++ b/flood.c @@ -775,7 +775,7 @@ struct game_ui { static game_ui *new_ui(const game_state *state) { struct game_ui *ui = snew(struct game_ui); - ui->cursor_visible = false; + ui->cursor_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->cx = FILLX; ui->cy = FILLY; return ui; diff --git a/galaxies.c b/galaxies.c index 4caf719..10c92d8 100644 --- a/galaxies.c +++ b/galaxies.c @@ -2688,7 +2688,7 @@ static game_ui *new_ui(const game_state *state) game_ui *ui = snew(game_ui); ui->dragging = false; ui->cur_x = ui->cur_y = 1; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/guess.c b/guess.c index 5046f98..f359a99 100644 --- a/guess.c +++ b/guess.c @@ -410,6 +410,7 @@ static game_ui *new_ui(const game_state *state) ui->params = state->params; /* structure copy */ ui->curr_pegs = new_pegrow(state->params.npegs); ui->holds = snewn(state->params.npegs, bool); + ui->display_cur = getenv_bool("PUZZLES_SHOW_CURSOR", false); memset(ui->holds, 0, sizeof(bool)*state->params.npegs); ui->drag_opeg = -1; return ui; diff --git a/keen.c b/keen.c index 98ddc0c..a414129 100644 --- a/keen.c +++ b/keen.c @@ -1530,8 +1530,7 @@ static game_ui *new_ui(const game_state *state) ui->hx = ui->hy = 0; ui->hpencil = false; - ui->hshow = false; - ui->hcursor = false; + ui->hshow = ui->hcursor = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/lightup.c b/lightup.c index db9fa2d..0cead04 100644 --- a/lightup.c +++ b/lightup.c @@ -1835,7 +1835,7 @@ static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/magnets.c b/magnets.c index f8d159a..d190848 100644 --- a/magnets.c +++ b/magnets.c @@ -1730,7 +1730,7 @@ static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/map.c b/map.c index 2d624b9..23f6fe9 100644 --- a/map.c +++ b/map.c @@ -2287,7 +2287,7 @@ static game_ui *new_ui(const game_state *state) ui->drag_pencil = 0; ui->show_numbers = false; ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->cur_moved = false; ui->cur_lastmove = 0; return ui; diff --git a/mines.c b/mines.c index 7ab4dbc..6cd9674 100644 --- a/mines.c +++ b/mines.c @@ -2387,7 +2387,7 @@ static game_ui *new_ui(const game_state *state) ui->completed = false; ui->flash_is_death = false; /* *shrug* */ ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/mosaic.c b/mosaic.c index 3e54ba0..080800c 100644 --- a/mosaic.c +++ b/mosaic.c @@ -1009,7 +1009,7 @@ static game_ui *new_ui(const game_state *state) ui->last_state = 0; ui->solved = false; ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/net.c b/net.c index 76273c2..e7c47bb 100644 --- a/net.c +++ b/net.c @@ -2010,7 +2010,7 @@ static game_ui *new_ui(const game_state *state) ui->org_x = ui->org_y = 0; ui->cur_x = ui->cx = state->width / 2; ui->cur_y = ui->cy = state->height / 2; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); get_random_seed(&seed, &seedsize); ui->rs = random_new(seed, seedsize); sfree(seed); diff --git a/netslide.c b/netslide.c index 9305906..2c10a37 100644 --- a/netslide.c +++ b/netslide.c @@ -969,7 +969,7 @@ static game_ui *new_ui(const game_state *state) game_ui *ui = snew(game_ui); ui->cur_x = 0; ui->cur_y = -1; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/palisade.c b/palisade.c index 6aff0a4..ec9ddaf 100644 --- a/palisade.c +++ b/palisade.c @@ -878,7 +878,7 @@ static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); ui->x = ui->y = 0; - ui->show = false; + ui->show = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/pattern.c b/pattern.c index cdd8fe6..8f88283 100644 --- a/pattern.c +++ b/pattern.c @@ -1236,7 +1236,7 @@ static game_ui *new_ui(const game_state *state) ret = snew(game_ui); ret->dragging = false; ret->cur_x = ret->cur_y = 0; - ret->cur_visible = false; + ret->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ret; } diff --git a/pearl.c b/pearl.c index fe023a4..2cbaf0f 100644 --- a/pearl.c +++ b/pearl.c @@ -1862,7 +1862,7 @@ static game_ui *new_ui(const game_state *state) ui->ndragcoords = -1; ui->dragcoords = snewn(sz, int); - ui->cursor_active = false; + ui->cursor_active = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->curx = ui->cury = 0; return ui; diff --git a/pegs.c b/pegs.c index 1cfa9c7..cd696f6 100644 --- a/pegs.c +++ b/pegs.c @@ -785,7 +785,7 @@ static game_ui *new_ui(const game_state *state) ui->sx = ui->sy = ui->dx = ui->dy = 0; ui->dragging = false; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->cur_jumping = false; /* make sure we start the cursor somewhere on the grid. */ diff --git a/range.c b/range.c index 0887f9a..293b6cb 100644 --- a/range.c +++ b/range.c @@ -1227,7 +1227,7 @@ static game_ui *new_ui(const game_state *state) { struct game_ui *ui = snew(game_ui); ui->r = ui->c = 0; - ui->cursor_show = false; + ui->cursor_show = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/rect.c b/rect.c index 535b007..1dffacb 100644 --- a/rect.c +++ b/rect.c @@ -2206,7 +2206,7 @@ static game_ui *new_ui(const game_state *state) reset_ui(ui); ui->erasing = false; ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->cur_dragging = false; return ui; } diff --git a/samegame.c b/samegame.c index 57ce4b8..fd5cfad 100644 --- a/samegame.c +++ b/samegame.c @@ -1062,7 +1062,7 @@ static game_ui *new_ui(const game_state *state) ui->nselected = 0; ui->xsel = ui->ysel = 0; - ui->displaysel = false; + ui->displaysel = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/signpost.c b/signpost.c index 1fbfbf1..70b444a 100644 --- a/signpost.c +++ b/signpost.c @@ -1393,7 +1393,7 @@ static game_ui *new_ui(const game_state *state) * copy to clone, there's code that needs fixing in game_redraw too. */ ui->cx = ui->cy = 0; - ui->cshow = false; + ui->cshow = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->dragging = false; ui->sx = ui->sy = ui->dx = ui->dy = 0; diff --git a/singles.c b/singles.c index fa39a61..a4c901d 100644 --- a/singles.c +++ b/singles.c @@ -1446,7 +1446,7 @@ static game_ui *new_ui(const game_state *state) game_ui *ui = snew(game_ui); ui->cx = ui->cy = 0; - ui->cshow = false; + ui->cshow = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->show_black_nums = false; return ui; diff --git a/sixteen.c b/sixteen.c index 400fa51..6029b8d 100644 --- a/sixteen.c +++ b/sixteen.c @@ -569,7 +569,7 @@ static game_ui *new_ui(const game_state *state) game_ui *ui = snew(game_ui); ui->cur_x = 0; ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->cur_mode = unlocked; return ui; diff --git a/slant.c b/slant.c index f607733..bcf02ee 100644 --- a/slant.c +++ b/slant.c @@ -1582,7 +1582,7 @@ static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); ui->cur_x = ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/solo.c b/solo.c index 3155abb..6b2862f 100644 --- a/solo.c +++ b/solo.c @@ -4559,8 +4559,7 @@ static game_ui *new_ui(const game_state *state) ui->hx = ui->hy = 0; ui->hpencil = false; - ui->hshow = false; - ui->hcursor = false; + ui->hshow = ui->hcursor = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/tents.c b/tents.c index 883b608..f6b8544 100644 --- a/tents.c +++ b/tents.c @@ -1455,7 +1455,7 @@ static game_ui *new_ui(const game_state *state) ui->drag_button = -1; ui->drag_ok = false; ui->cx = ui->cy = 0; - ui->cdisp = false; + ui->cdisp = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/towers.c b/towers.c index dd774a1..1e2647d 100644 --- a/towers.c +++ b/towers.c @@ -1163,8 +1163,7 @@ static game_ui *new_ui(const game_state *state) ui->hx = ui->hy = 0; ui->hpencil = false; - ui->hshow = false; - ui->hcursor = false; + ui->hshow = ui->hcursor = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/tracks.c b/tracks.c index 6c7bf10..6b882e9 100644 --- a/tracks.c +++ b/tracks.c @@ -2018,7 +2018,7 @@ static game_ui *new_ui(const game_state *state) ui->notrack = false; ui->dragging = false; ui->drag_sx = ui->drag_sy = ui->drag_ex = ui->drag_ey = -1; - ui->cursor_active = false; + ui->cursor_active = getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->curx = ui->cury = 1; return ui; diff --git a/twiddle.c b/twiddle.c index a8ed114..215d225 100644 --- a/twiddle.c +++ b/twiddle.c @@ -618,7 +618,7 @@ static game_ui *new_ui(const game_state *state) ui->cur_x = 0; ui->cur_y = 0; - ui->cur_visible = false; + ui->cur_visible = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/undead.c b/undead.c index 1c52c27..833eb34 100644 --- a/undead.c +++ b/undead.c @@ -1645,10 +1645,9 @@ struct game_ui { static game_ui *new_ui(const game_state *state) { game_ui *ui = snew(game_ui); - ui->hx = ui->hy = 0; ui->hpencil = false; - ui->hshow = false; - ui->hcursor = false; + ui->hx = ui->hy = ui->hshow = ui->hcursor = + getenv_bool("PUZZLES_SHOW_CURSOR", false); ui->ascii = false; return ui; } diff --git a/unequal.c b/unequal.c index 130a813..9c75d51 100644 --- a/unequal.c +++ b/unequal.c @@ -1440,8 +1440,7 @@ static game_ui *new_ui(const game_state *state) ui->hx = ui->hy = 0; ui->hpencil = false; - ui->hshow = false; - ui->hcursor = false; + ui->hshow = ui->hcursor = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ui; } diff --git a/unruly.c b/unruly.c index e428e17..af84111 100644 --- a/unruly.c +++ b/unruly.c @@ -1513,7 +1513,7 @@ static game_ui *new_ui(const game_state *state) game_ui *ret = snew(game_ui); ret->cx = ret->cy = 0; - ret->cursor = false; + ret->cursor = getenv_bool("PUZZLES_SHOW_CURSOR", false); return ret; }