diff --git a/lib/OpenLayers/Control/SLDSelect.js b/lib/OpenLayers/Control/SLDSelect.js
index 758ccee47a..a894eeb854 100644
--- a/lib/OpenLayers/Control/SLDSelect.js
+++ b/lib/OpenLayers/Control/SLDSelect.js
@@ -533,12 +533,13 @@ OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, {
}
var selectionLayer = this.createSelectionLayer(layer);
- var sld = this.createSLD(layer, filters, geometryAttributes);
this.events.triggerEvent("selected", {
layer: layer,
filters: filters
});
+
+ var sld = this.createSLD(layer, filters, geometryAttributes);
selectionLayer.mergeNewParams({SLD_BODY: sld});
delete this._queue;
diff --git a/tests/Control/SLDSelect.html b/tests/Control/SLDSelect.html
index 74935539f1..03b871c5af 100644
--- a/tests/Control/SLDSelect.html
+++ b/tests/Control/SLDSelect.html
@@ -100,6 +100,62 @@
map.destroy();
}
+ function test_filterModificationOnSelected(t) {
+ t.plan(1);
+ var parser = new OpenLayers.Format.WFSDescribeFeatureType();
+ var map = new OpenLayers.Map('map');
+ var layer = new OpenLayers.Layer.WMS('Foo', 'http://foo', {LAYERS: 'AAA64'});
+ map.addLayer(layer);
+
+ var text =
+ '' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '';
+
+ OpenLayers.Control.SLDSelect.prototype.wfsCache[layer.id] = parser.read(text);
+ var control = new OpenLayers.Control.SLDSelect(OpenLayers.Handler.RegularPolygon,
+ {layers: [layer], clearOnDeactivate: true, handlerOptions: {irregular: true} });
+
+ var testEvent = function(evt) {
+ // manipulate filter
+ var bbox = OpenLayers.Bounds.fromString('1,2,3,4');
+ evt.filters[0].value = bbox;
+ };
+ control.events.register("selected", this, testEvent);
+ map.addControl(control);
+ var geometry = OpenLayers.Geometry.Polygon.createRegularPolygon(
+ new OpenLayers.Geometry.Point(0, 0), 5, 4);
+ control.select(geometry);
+ control.events.unregister("selected", this, testEvent);
+
+ var expected_sld = 'AAA64defaultgeometry1,2 3,4#FF00002';
+
+ t.xml_eq(map.layers[1].params.SLD_BODY, expected_sld, "Filter / SLD manipulated in select-callback correctly");
+
+ }
+
function test_multiselect(t) {
t.plan(2);