diff --git a/lib/OpenLayers/Control/LayerSwitcher.js b/lib/OpenLayers/Control/LayerSwitcher.js index a0e480e385..b1f2cc49cb 100644 --- a/lib/OpenLayers/Control/LayerSwitcher.js +++ b/lib/OpenLayers/Control/LayerSwitcher.js @@ -120,7 +120,7 @@ OpenLayers.Control.LayerSwitcher = initialize: function(options) { OpenLayers.Control.prototype.initialize.apply(this, arguments); this.layerStates = []; - + if(this.roundedCorner) { OpenLayers.Console.warn('roundedCorner option is deprecated'); } @@ -143,6 +143,7 @@ OpenLayers.Control.LayerSwitcher = changebaselayer: this.redraw, scope: this }); + this.events.unregister("buttonclick", this, this.onButtonClick); OpenLayers.Control.prototype.destroy.apply(this, arguments); }, @@ -157,13 +158,18 @@ OpenLayers.Control.LayerSwitcher = OpenLayers.Control.prototype.setMap.apply(this, arguments); this.map.events.on({ - buttonclick: this.onButtonClick, addlayer: this.redraw, changelayer: this.redraw, removelayer: this.redraw, changebaselayer: this.redraw, scope: this }); + if (this.outsideViewport) { + this.events.attachToElement(this.div); + this.events.register("buttonclick", this, this.onButtonClick); + } else { + this.map.events.register("buttonclick", this, this.onButtonClick); + } }, /** diff --git a/tests/Control/LayerSwitcher.html b/tests/Control/LayerSwitcher.html index 47895857d2..0094e77108 100644 --- a/tests/Control/LayerSwitcher.html +++ b/tests/Control/LayerSwitcher.html @@ -25,15 +25,17 @@ t.ok( div != null, "draw returns its div" ); } function test_Control_LayerSwitcher_outsideViewport (t) { - t.plan( 2 ); + t.plan( 4 ); map = new OpenLayers.Map('map'); control = new OpenLayers.Control.LayerSwitcher({'div':OpenLayers.Util.getElement('layerswitcher')}); map.addControl(control); - t.eq(control.div.style.width, "250px", "Div is not minimized when added."); + t.eq(control.div.style.width, "250px", "Div is not minimized when added."); + t.ok(control.events.element && control.events.listeners.buttonclick, "[outside] Events instance attached to div and has buttonclick event"); control = new OpenLayers.Control.LayerSwitcher(); map.addControl(control); t.eq(control.div.style.width, "0px", "Div is minimized when added."); + t.ok(!control.events.element && map.events.listeners.buttonclick, "[inside] Events instance not attached to div and buttonclick event registered on map"); } function test_Control_LayerSwitcher_loadContents(t) {