Make it so the measurepartial event is triggered only if measure isn't coming soon. This keeps you from having to do a quadruple click to finish in IE when a reflow is triggered by the measurepartial listener. r=crschmidt (closes #2037)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@9263 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2009-04-10 16:09:00 +00:00
parent cc2e19d789
commit 06a27dc36f

View File

@@ -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 - {<OpenLayers.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 - {<OpenLayers.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
);
},
/**