Unruly: correctly handle clicks that only hide cursor

If you clicked somewhere that had no effect (on an immutable square or
a middle click on an empty square), interpret_move() would return NULL
even though it had unset ui->cursor.  So the keyboard cursor would
remain visible until the next window resize (or similar) when it would
vanish.  Now interpret_move() correctly returns MOVE_UI_UPDATE in
these cases, so the cursor vanishes immediately.
This commit is contained in:
Ben Harris
2023-08-12 14:43:02 +01:00
parent be9e4f8957
commit 20bd61bf49

View File

@ -1612,6 +1612,8 @@ static char *interpret_move(const game_state *state, game_ui *ui,
int w2 = state->w2, h2 = state->h2; int w2 = state->w2, h2 = state->h2;
char *nullret = MOVE_NO_EFFECT;
button &= ~MOD_MASK; button &= ~MOD_MASK;
/* Mouse click */ /* Mouse click */
@ -1621,7 +1623,10 @@ static char *interpret_move(const game_state *state, game_ui *ui,
&& oy >= (ds->tilesize / 2) && gy < h2) { && oy >= (ds->tilesize / 2) && gy < h2) {
hx = gx; hx = gx;
hy = gy; hy = gy;
ui->cursor = false; if (ui->cursor) {
ui->cursor = false;
nullret = MOVE_UI_UPDATE;
}
} else } else
return NULL; return NULL;
} }
@ -1641,7 +1646,7 @@ static char *interpret_move(const game_state *state, game_ui *ui,
char c, i; char c, i;
if (state->common->immutable[hy * w2 + hx]) if (state->common->immutable[hy * w2 + hx])
return NULL; return nullret;
c = '-'; c = '-';
i = state->grid[hy * w2 + hx]; i = state->grid[hy * w2 + hx];
@ -1661,7 +1666,7 @@ static char *interpret_move(const game_state *state, game_ui *ui,
if (state->grid[hy * w2 + hx] == if (state->grid[hy * w2 + hx] ==
(c == '0' ? N_ZERO : c == '1' ? N_ONE : EMPTY)) (c == '0' ? N_ZERO : c == '1' ? N_ONE : EMPTY))
return NULL; /* don't put no-ops on the undo chain */ return nullret; /* don't put no-ops on the undo chain */
sprintf(buf, "P%c,%d,%d", c, hx, hy); sprintf(buf, "P%c,%d,%d", c, hx, hy);