diff --git a/lib/OpenLayers/Handler/RegularPolygon.js b/lib/OpenLayers/Handler/RegularPolygon.js index 318564e13f..114f294582 100644 --- a/lib/OpenLayers/Handler/RegularPolygon.js +++ b/lib/OpenLayers/Handler/RegularPolygon.js @@ -274,6 +274,12 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, { */ up: function(evt) { this.finalize(); + // the mouseup method of superclass doesn't call the + // "done" callback if there's been no move between + // down and up + if (this.start == this.last) { + this.callback("done", [evt.xy]); + } }, /** diff --git a/tests/Handler/RegularPolygon.html b/tests/Handler/RegularPolygon.html index 32fd0684e8..21e6c3684c 100644 --- a/tests/Handler/RegularPolygon.html +++ b/tests/Handler/RegularPolygon.html @@ -186,6 +186,40 @@ handler.move({xy: {x: 20, y: 15}}); } + function test_callbacks(t) { + t.plan(1); + + // setup + var map = new OpenLayers.Map("map", { + getLonLatFromPixel: function(px) { + return {lon: px.x, lat: px.y}; + } + }); + + var control = {"map": map}; + + var done = function(geom) { + t.ok(true, + "done callback called even if no move between down and up"); + }; + + var handler = new OpenLayers.Handler.RegularPolygon( + control, {"done": done}); + handler.activate(); + + var xy = new OpenLayers.Pixel(Math.random(), Math.random()); + + var isLeftClick = OpenLayers.Event.isLeftClick; + OpenLayers.Event.isLeftClick = function() { return true; }; + + // test + map.events.triggerEvent("mousedown", {"xy": xy}); + map.events.triggerEvent("mouseup", {"xy": xy}); + + // tear down + OpenLayers.Event.isLeftClick = isLeftClick; + } +