X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/4496362fadb5f60b8ecf431fb220d26df7280f99..1a960a48298c0eb3832704bbd5bb72023d2873a0:/rect.c diff --git a/rect.c b/rect.c index f9ab508..72a00e1 100644 --- a/rect.c +++ b/rect.c @@ -2377,13 +2377,31 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds, coord_round(FROMCOORD((float)x), FROMCOORD((float)y), &xc, &yc); if (button == LEFT_BUTTON || button == RIGHT_BUTTON) { + if (ui->drag_start_x >= 0 && ui->cur_dragging) { + /* + * If a keyboard drag is in progress, unceremoniously + * cancel it. + */ + ui->drag_start_x = -1; + ui->drag_start_y = -1; + ui->drag_end_x = -1; + ui->drag_end_y = -1; + ui->x1 = -1; + ui->y1 = -1; + ui->x2 = -1; + ui->y2 = -1; + ui->dragged = FALSE; + } startdrag = TRUE; ui->cur_visible = ui->cur_dragging = FALSE; active = TRUE; erasing = (button == RIGHT_BUTTON); } else if (button == LEFT_RELEASE || button == RIGHT_RELEASE) { /* We assert we should have had a LEFT_BUTTON first. */ - assert(!ui->cur_visible); + if (ui->cur_visible) { + ui->cur_visible = FALSE; + active = TRUE; + } assert(!ui->cur_dragging); enddrag = TRUE; erasing = (button == RIGHT_RELEASE); @@ -2394,6 +2412,13 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds, if (!ui->cur_dragging) return ""; coord_round((float)ui->cur_x + 0.5F, (float)ui->cur_y + 0.5F, &xc, &yc); } else if (IS_CURSOR_SELECT(button)) { + if (ui->drag_start_x >= 0 && !ui->cur_dragging) { + /* + * If a mouse drag is in progress, ignore attempts to + * start a keyboard one. + */ + return NULL; + } if (!ui->cur_visible) { assert(!ui->cur_dragging); ui->cur_visible = TRUE; @@ -2855,9 +2880,9 @@ static float game_flash_length(game_state *oldstate, return 0.0F; } -static int game_is_solved(game_state *state) +static int game_status(game_state *state) { - return state->completed; + return state->completed ? +1 : 0; } static int game_timing_state(game_state *state, game_ui *ui) @@ -2965,7 +2990,7 @@ const struct game thegame = { game_redraw, game_anim_length, game_flash_length, - game_is_solved, + game_status, TRUE, FALSE, game_print_size, game_print, TRUE, /* wants_statusbar */ FALSE, game_timing_state,