Fix for Feature handler uses getFeatureFromEvent on mousemove even without
hover callbacks; r=ahocevar (Closes #1655) This means that On the SelectFeature control hover can no longer be set on the SelectFeature control after the control has been initialized: must be passed at initialize time. Example has been updated. git-svn-id: http://svn.openlayers.org/trunk/openlayers@7682 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -23,7 +23,6 @@
|
||||
var vectors = new OpenLayers.Layer.Vector("Vector Layer");
|
||||
map.addLayers([wmsLayer, vectors]);
|
||||
map.addControl(new OpenLayers.Control.LayerSwitcher());
|
||||
map.addControl(new OpenLayers.Control.MousePosition());
|
||||
|
||||
drawControls = {
|
||||
point: new OpenLayers.Control.DrawFeature(
|
||||
@@ -44,6 +43,14 @@
|
||||
multipleKey: "shiftKey", // shift key adds to selection
|
||||
box: true
|
||||
}
|
||||
),
|
||||
selecthover: new OpenLayers.Control.SelectFeature(
|
||||
vectors,
|
||||
{
|
||||
multiple: false, hover: true,
|
||||
toggleKey: "ctrlKey", // ctrl key removes from selection
|
||||
multipleKey: "shiftKey" // shift key adds to selection
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
@@ -106,6 +113,11 @@
|
||||
onclick="toggleControl(this);" />
|
||||
<label for="polygonToggle">draw polygon</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" name="type" value="selecthover" id="selecthoverToggle"
|
||||
onclick="toggleControl(this);" />
|
||||
<label for="selecthoverToggle">Select features on hover</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" name="type" value="select" id="selectToggle"
|
||||
onclick="toggleControl(this);" />
|
||||
@@ -121,11 +133,6 @@
|
||||
name="clickout" onchange="update()" />
|
||||
<label for="clickout">click out to unselect features</label>
|
||||
</li>
|
||||
<li>
|
||||
<input id="hover" type="checkbox"
|
||||
name="hover" onchange="update()" />
|
||||
<label for="hover">hover to select features</label>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -128,12 +128,16 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
|
||||
initialize: function(layer, options) {
|
||||
OpenLayers.Control.prototype.initialize.apply(this, [options]);
|
||||
this.layer = layer;
|
||||
this.callbacks = OpenLayers.Util.extend({
|
||||
click: this.clickFeature,
|
||||
clickout: this.clickoutFeature,
|
||||
over: this.overFeature,
|
||||
out: this.outFeature
|
||||
}, this.callbacks);
|
||||
var callbacks = {
|
||||
click: this.clickFeature,
|
||||
clickout: this.clickoutFeature
|
||||
};
|
||||
if (this.hover) {
|
||||
callbacks.over = this.overFeature;
|
||||
callbacks.out = this.outFeature;
|
||||
}
|
||||
|
||||
this.callbacks = OpenLayers.Util.extend(callbacks, this.callbacks);
|
||||
this.handlers = {
|
||||
feature: new OpenLayers.Handler.Feature(
|
||||
this, layer, this.callbacks, {geometryTypes: this.geometryTypes}
|
||||
|
||||
@@ -176,6 +176,9 @@ OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, {
|
||||
* {Boolean}
|
||||
*/
|
||||
mousemove: function(evt) {
|
||||
if (!this.callbacks['over'] && !this.callbacks['out']) {
|
||||
return false;
|
||||
}
|
||||
this.handle(evt);
|
||||
return true;
|
||||
},
|
||||
|
||||
@@ -177,6 +177,11 @@
|
||||
evtPx.type = "click";
|
||||
map.events.triggerEvent('click', evtPx);
|
||||
|
||||
layer.getFeatureFromEvent = function(evt) { t.fail("mousemove called getFeatureFromEvent without any mousemove callbacks"); };
|
||||
evtPx.type = "mousemove";
|
||||
map.events.triggerEvent('mousemove', evtPx);
|
||||
layer.getFeatureFromEvent = function(evt) { return newFeature; };
|
||||
|
||||
// test over a new feature
|
||||
// only 'over' callback should be called
|
||||
handler.feature = null;
|
||||
|
||||
Reference in New Issue
Block a user