Merge pull request #805 from mosesonline/unselectAllFix
unselectAll on removing layer fix
This commit is contained in:
@@ -305,12 +305,17 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
for(l=0; l<layers.length; ++l) {
|
for(l=0; l<layers.length; ++l) {
|
||||||
layer = layers[l];
|
layer = layers[l];
|
||||||
numExcept = 0;
|
numExcept = 0;
|
||||||
while(layer.selectedFeatures.length > numExcept) {
|
//layer.selectedFeatures is null when layer is destroyed and
|
||||||
feature = layer.selectedFeatures[numExcept];
|
//one of it's preremovelayer listener calls setLayer
|
||||||
if(!options || options.except != feature) {
|
//with another layer on this control
|
||||||
this.unselect(feature);
|
if(layer.selectedFeatures != null) {
|
||||||
} else {
|
while(layer.selectedFeatures.length > numExcept) {
|
||||||
++numExcept;
|
feature = layer.selectedFeatures[numExcept];
|
||||||
|
if(!options || options.except != feature) {
|
||||||
|
this.unselect(feature);
|
||||||
|
} else {
|
||||||
|
++numExcept;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -325,10 +325,8 @@ OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, {
|
|||||||
// we enter handle. Yes, a bit hackish...
|
// we enter handle. Yes, a bit hackish...
|
||||||
this.feature = null;
|
this.feature = null;
|
||||||
}
|
}
|
||||||
} else {
|
} else if(this.lastFeature && (previouslyIn || click)) {
|
||||||
if(this.lastFeature && (previouslyIn || click)) {
|
this.triggerCallback(type, 'out', [this.lastFeature]);
|
||||||
this.triggerCallback(type, 'out', [this.lastFeature]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return handled;
|
return handled;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -545,6 +545,31 @@
|
|||||||
t.eq((control.layers === null), true, "When using setLayer with a single layer, the layers property is removed if present before");
|
t.eq((control.layers === null), true, "When using setLayer with a single layer, the layers property is removed if present before");
|
||||||
map.destroy();
|
map.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_setLayerWithRemoving(t) {
|
||||||
|
t.plan(2);
|
||||||
|
var map = new OpenLayers.Map("map");
|
||||||
|
var layer1 = new OpenLayers.Layer.Vector();
|
||||||
|
var layer2 = new OpenLayers.Layer.Vector();
|
||||||
|
map.addLayer(layer1, layer2);
|
||||||
|
// initialize it with a single layer
|
||||||
|
var control = new OpenLayers.Control.SelectFeature(layer1);
|
||||||
|
map.addControl(control);
|
||||||
|
control.activate();
|
||||||
|
var noError = null;
|
||||||
|
map.events.register("preremovelayer", this, function(e) {
|
||||||
|
try {
|
||||||
|
control.setLayer(layer2);
|
||||||
|
} catch (e) {
|
||||||
|
noError = e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
layer1.destroy();
|
||||||
|
t.eq(layer2.id, control.layer.id, "Layer is set correctly without error");
|
||||||
|
t.eq(noError, null,"No error occured during setLayer. Error is: '"+noError+"'");
|
||||||
|
control.destroy();
|
||||||
|
map.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
function test_destroy(t) {
|
function test_destroy(t) {
|
||||||
t.plan(1);
|
t.plan(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user