diff --git a/lib/OpenLayers/Control/Measure.js b/lib/OpenLayers/Control/Measure.js index caa72f5e0f..a35a2a51d9 100644 --- a/lib/OpenLayers/Control/Measure.js +++ b/lib/OpenLayers/Control/Measure.js @@ -75,6 +75,23 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, { english: ['mi', 'ft', 'in'], metric: ['km', 'm'] }, + + /** + * Property: delay + * {Number} Number of milliseconds between clicks before the event is + * considered a double-click. The "measurepartial" event will not + * be triggered if the sketch is completed within this time. This + * is required for IE where creating a browser reflow (if a listener + * is modifying the DOM by displaying the measurement values) messes + * with the dblclick listener in the sketch handler. + */ + partialDelay: 300, + + /** + * Property: delayedTrigger + * {Number} Timeout id of trigger for measurepartial. + */ + delayedTrigger: null, /** * APIProperty: persist @@ -147,6 +164,9 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, { * geometry - {} */ measureComplete: function(geometry) { + if(this.delayedTrigger) { + window.clearTimeout(this.delayedTrigger); + } this.measure(geometry, "measure"); }, @@ -159,7 +179,12 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, { * geometry - {} The sketch geometry. */ measurePartial: function(point, geometry) { - this.measure(geometry, "measurepartial"); + this.delayedTrigger = window.setTimeout( + OpenLayers.Function.bind(function() { + this.measure(geometry, "measurepartial"); + }, this), + this.partialDelay + ); }, /**