diff --git a/lib/OpenLayers/Control/OverviewMap.js b/lib/OpenLayers/Control/OverviewMap.js index 6fda04b55e..935c2f6c20 100644 --- a/lib/OpenLayers/Control/OverviewMap.js +++ b/lib/OpenLayers/Control/OverviewMap.js @@ -77,6 +77,47 @@ OpenLayers.Control.OverviewMap.prototype = initialize: function(options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); }, + + /** + * + */ + destroy: function() { + this.mapDiv.removeChild(this.extentRectangle); + this.extentRectangle = null; + this.rectEvents.destroy(); + this.rectEvents = null; + + this.ovmap.destroy(); + this.ovmap = null; + + this.element.removeChild(this.mapDiv); + this.mapDiv = null; + this.mapDivEvents.destroy(); + this.mapDivEvents = null; + + this.div.removeChild(this.element); + this.element = null; + this.elementEvents.destroy(); + this.elementEvents = null; + + if (this.maximizeDiv) { + OpenLayers.Event.stopObservingElement(this.maximizeDiv); + this.div.removeChild(this.maximizeDiv); + this.maximizeDiv = null; + } + + if (this.minimizeDiv) { + OpenLayers.Event.stopObservingElement(this.minimizeDiv); + this.div.removeChild(this.minimizeDiv); + this.minimizeDiv = null; + } + + this.map.events.unregister('moveend', this, this.update); + this.map.events.unregister("changebaselayer", this, + this.baseLayerDraw); + + OpenLayers.Control.prototype.destroy.apply(this, arguments); + }, /** * @type DOMElement diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index d1e5e9a124..48daf1dc8e 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -237,6 +237,10 @@ OpenLayers.Map.prototype = { * @private */ destroy:function() { + // if unloadDestroy is null, we've already been destroyed + if (!this.unloadDestroy) { + return false; + } // map has been destroyed. dont do it again! OpenLayers.Event.stopObserving(window, 'unload', this.unloadDestroy);