aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-06-30 18:11:41 +0000
committerSimon Tatham <anakin@pobox.com>2005-06-30 18:11:41 +0000
commit091fe57e0f8448e0972fa82dfac1f83f43147c5b (patch)
tree80ce0871353854fb684acb4845c4752d220debf5
parent8f670292a72c1c5450c5c62bc2a5a06005808ed7 (diff)
downloadpuzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.zip
puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.tar.gz
puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.tar.bz2
puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.tar.xz
Prevent drags from being started outside the playing area, which was
causing invalid move descriptions to be returned from interpret_move() and then failing an assertion when execute_move() refused them. [originally from svn r6044]
-rw-r--r--rect.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/rect.c b/rect.c
index f092a2d..ec7bd4a 100644
--- a/rect.c
+++ b/rect.c
@@ -2329,7 +2329,10 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
coord_round(FROMCOORD((float)x), FROMCOORD((float)y), &xc, &yc);
- if (startdrag) {
+ if (startdrag &&
+ xc >= 0 && xc <= 2*from->w &&
+ yc >= 0 && yc <= 2*from->h) {
+
ui->drag_start_x = xc;
ui->drag_start_y = yc;
ui->drag_end_x = xc;
@@ -2338,7 +2341,8 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
active = TRUE;
}
- if (xc != ui->drag_end_x || yc != ui->drag_end_y) {
+ if (ui->drag_start_x >= 0 &&
+ (xc != ui->drag_end_x || yc != ui->drag_end_y)) {
int t;
ui->drag_end_x = xc;
@@ -2370,7 +2374,7 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
ret = NULL;
- if (enddrag) {
+ if (enddrag && (ui->drag_start_x >= 0)) {
if (xc >= 0 && xc <= 2*from->w &&
yc >= 0 && yc <= 2*from->h) {