diff --git a/lib/OpenLayers/Control/DragFeature.js b/lib/OpenLayers/Control/DragFeature.js index 5aea2f95e7..ff8084d336 100644 --- a/lib/OpenLayers/Control/DragFeature.js +++ b/lib/OpenLayers/Control/DragFeature.js @@ -171,7 +171,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, { * feature - {} */ clickFeature: function(feature) { - if (this.overFeature(feature)) { + if (!this.over && this.overFeature(feature)) { this.handlers.drag.dragstart(this.handlers.feature.evt); // to let the events propagate to the feature handler (click callback) this.handlers.drag.stopDown = false; @@ -186,8 +186,10 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, { * feature - {} */ clickoutFeature: function(feature) { - this.outFeature(feature); - this.handlers.drag.stopDown = true; + if (this.over) { + this.outFeature(feature); + this.handlers.drag.stopDown = true; + } }, /** diff --git a/tests/Control/DragFeature.html b/tests/Control/DragFeature.html index 06f09b0db2..cfc3a631f4 100644 --- a/tests/Control/DragFeature.html +++ b/tests/Control/DragFeature.html @@ -357,6 +357,24 @@ "onLeave called with expected feature"); } + function test_Control_DragFeature_click(t) { + t.plan(1); + var map = new OpenLayers.Map("map"); + var layer = new OpenLayers.Layer.Vector(); + map.addLayer(layer); + var feature = new OpenLayers.Feature.Vector(); + feature.layer = layer; + var control = new OpenLayers.Control.DragFeature(layer); + map.addControl(control); + + control.activate(); + + control.overFeature(feature); + control.handlers.feature.evt = {which: 1}; + control.clickFeature(feature); + t.eq(control.handlers.drag.started, false, "click after over does not start drag handler"); + } +