ref: 346584bf6e38232be8773c24fd7dedcbd7b3d9ed
parent: 2acd8baae8e411fae3235a5ab5c25b7523e55132
author: Chris Boyle <chris@boyle.name>
date: Sat Nov 28 08:56:39 EST 2015
Allow unlocking an island despite moving slightly. Previously moving 1 pixel would be treated as a failed drag and not an unlock. Now you only have to release the button somewhere on the island you started on.
--- a/bridges.c
+++ b/bridges.c
@@ -2339,7 +2339,7 @@
if (button == LEFT_BUTTON || button == RIGHT_BUTTON) {
if (!INGRID(state, gx, gy)) return NULL;
ui->cur_visible = 0;
- if ((ggrid & G_ISLAND) && !(ggrid & G_MARK)) {
+ if (ggrid & G_ISLAND) {
ui->dragx_src = gx;
ui->dragy_src = gy;
return "";
@@ -2346,7 +2346,9 @@
} else
return ui_cancel_drag(ui);
} else if (button == LEFT_DRAG || button == RIGHT_DRAG) {
- if (gx != ui->dragx_src || gy != ui->dragy_src) {
+ if (INGRID(state, ui->dragx_src, ui->dragy_src)
+ && (gx != ui->dragx_src || gy != ui->dragy_src)
+ && !(GRID(state,ui->dragx_src,ui->dragy_src) & G_MARK)) {
ui->dragging = 1;
ui->drag_is_noline = (button == RIGHT_DRAG) ? 1 : 0;
return update_drag_dst(state, ui, ds, x, y);
@@ -2360,6 +2362,10 @@
if (ui->dragging) {
return finish_drag(state, ui);
} else {
+ if (!INGRID(state, ui->dragx_src, ui->dragy_src)
+ || gx != ui->dragx_src || gy != ui->dragy_src) {
+ return ui_cancel_drag(ui);
+ }
ui_cancel_drag(ui);
if (!INGRID(state, gx, gy)) return NULL;
if (!(GRID(state, gx, gy) & G_ISLAND)) return NULL;