mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
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:
9
unruly.c
9
unruly.c
@ -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;
|
||||||
|
if (ui->cursor) {
|
||||||
ui->cursor = false;
|
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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user