ref: 20bd61bf4931396cc74265046a0f1bb4a3c57fd4
parent: be9e4f89579331eea8df13d8ef3ef7366a4cffab
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sat Aug 12 10:43:02 EDT 2023
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.
--- a/unruly.c
+++ b/unruly.c
@@ -1612,6 +1612,8 @@
int w2 = state->w2, h2 = state->h2;
+ char *nullret = MOVE_NO_EFFECT;
+
button &= ~MOD_MASK;
/* Mouse click */
@@ -1621,7 +1623,10 @@
&& oy >= (ds->tilesize / 2) && gy < h2) {
hx = gx;
hy = gy;
- ui->cursor = false;
+ if (ui->cursor) {
+ ui->cursor = false;
+ nullret = MOVE_UI_UPDATE;
+ }
} else
return NULL;
}
@@ -1641,7 +1646,7 @@
char c, i;
if (state->common->immutable[hy * w2 + hx])
- return NULL;
+ return nullret;
c = '-';
i = state->grid[hy * w2 + hx];
@@ -1661,7 +1666,7 @@
if (state->grid[hy * w2 + hx] ==
(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);