shithub: puzzles

Download patch

ref: eb8a374d0dd263953647067ec26b1fc33661d3f5
parent: e5d773604fb5bd14e0814bfea88851313bd56e93
author: Simon Tatham <anakin@pobox.com>
date: Tue May 11 14:32:48 EDT 2004

We should turn off the dragging variables in the UI _whenever_
`enddrag' is TRUE, not just when the end of the drag was within a
sensible range.

[originally from svn r4210]

--- a/rect.c
+++ b/rect.c
@@ -1009,38 +1009,45 @@
         active = TRUE;
     }
 
-    if (enddrag && (xc >= 0 && xc <= 2*from->w &&
-                    yc >= 0 && yc <= 2*from->h)) {
-        ret = dup_game(from);
+    ret = NULL;
 
-        if (ui->dragged) {
-            ui_draw_rect(ret, ui, ret->hedge, ret->vedge, 1);
-        } else {
-            if ((xc & 1) && !(yc & 1) && HRANGE(from,xc/2,yc/2)) {
-                hedge(ret,xc/2,yc/2) = !hedge(ret,xc/2,yc/2);
-            }
-            if ((yc & 1) && !(xc & 1) && VRANGE(from,xc/2,yc/2)) {
-                vedge(ret,xc/2,yc/2) = !vedge(ret,xc/2,yc/2);
-            }
-        }
+    if (enddrag) {
+	if (xc >= 0 && xc <= 2*from->w &&
+	    yc >= 0 && yc <= 2*from->h) {
+	    ret = dup_game(from);
 
-        ui->drag_start_x = -1;
-        ui->drag_start_y = -1;
-        ui->drag_end_x = -1;
-        ui->drag_end_y = -1;
-        ui->dragged = FALSE;
-        active = TRUE;
+	    if (ui->dragged) {
+		ui_draw_rect(ret, ui, ret->hedge, ret->vedge, 1);
+	    } else {
+		if ((xc & 1) && !(yc & 1) && HRANGE(from,xc/2,yc/2)) {
+		    hedge(ret,xc/2,yc/2) = !hedge(ret,xc/2,yc/2);
+		}
+		if ((yc & 1) && !(xc & 1) && VRANGE(from,xc/2,yc/2)) {
+		    vedge(ret,xc/2,yc/2) = !vedge(ret,xc/2,yc/2);
+		}
+	    }
 
-        if (!memcmp(ret->hedge, from->hedge, from->w*from->h) &&
-            !memcmp(ret->vedge, from->vedge, from->w*from->h)) {
-            free_game(ret);
-        } else
-            return ret;                /* a move has been made */
+	    if (!memcmp(ret->hedge, from->hedge, from->w*from->h) &&
+		!memcmp(ret->vedge, from->vedge, from->w*from->h)) {
+		free_game(ret);
+		ret = NULL;
+	    }
+	}
+
+	ui->drag_start_x = -1;
+	ui->drag_start_y = -1;
+	ui->drag_end_x = -1;
+	ui->drag_end_y = -1;
+	ui->dragged = FALSE;
+	active = TRUE;
     }
 
-    if (active)
+    if (ret)
+	return ret;		       /* a move has been made */
+    else if (active)
         return from;                   /* UI activity has occurred */
-    return NULL;
+    else
+	return NULL;
 }
 
 /* ----------------------------------------------------------------------