From 175f07c40304705710e3aa2aa8d986588eedbbfc Mon Sep 17 00:00:00 2001 From: Schuyler Erle Date: Sun, 1 Apr 2007 22:29:25 +0000 Subject: [PATCH] Add destroy() to Control.OverviewMap and add a check to map.destroy() to bail if it's already been called (by, say, window.onunload). Fixes #595. git-svn-id: http://svn.openlayers.org/trunk/openlayers@2958 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Control/OverviewMap.js | 41 +++++++++++++++++++++++++++ lib/OpenLayers/Map.js | 4 +++ 2 files changed, 45 insertions(+) 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);