shithub: puzzles

Download patch

ref: 091fe57e0f8448e0972fa82dfac1f83f43147c5b
parent: 8f670292a72c1c5450c5c62bc2a5a06005808ed7
author: Simon Tatham <anakin@pobox.com>
date: Thu Jun 30 14:11:41 EDT 2005

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]

--- a/rect.c
+++ b/rect.c
@@ -2329,7 +2329,10 @@
 
     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 @@
         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 @@
 
     ret = NULL;
 
-    if (enddrag) {
+    if (enddrag && (ui->drag_start_x >= 0)) {
 	if (xc >= 0 && xc <= 2*from->w &&
 	    yc >= 0 && yc <= 2*from->h) {