From e7696dd6aa69e3d6296de11d41ddbcdfec20aa14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 14 Aug 2012 07:44:25 +0200 Subject: [PATCH] map renderer unregisters listeners on dispose --- src/ol/base/maprenderer.js | 58 ++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/src/ol/base/maprenderer.js b/src/ol/base/maprenderer.js index d3026f3da3..a69d8ac48b 100644 --- a/src/ol/base/maprenderer.js +++ b/src/ol/base/maprenderer.js @@ -1,5 +1,3 @@ -// FIXME unregister listeners when disposed - goog.provide('ol.MapRenderer'); goog.require('goog.Disposable'); @@ -57,11 +55,6 @@ ol.MapRenderer = function(target, map) { */ this.freezeRenderingCount_ = 0; - /** - * @private - * @type {Array.} - */ - this.layersListenerKeys_ = null; /** * @protected @@ -69,29 +62,42 @@ ol.MapRenderer = function(target, map) { */ this.layerRenderers = {}; - goog.events.listen(map, - ol.Object.getChangedEventType(ol.MapProperty.BACKGROUND_COLOR), - this.handleBackgroundColorChanged, false, this); + /** + * @private + * @type {Array.} + */ + this.layersListenerKeys_ = null; - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.CENTER), - this.handleCenterChanged, false, this); + /** + * @private + * @type {Array.} + */ + this.mapListenerKeys_ = [ + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.BACKGROUND_COLOR), + this.handleBackgroundColorChanged, false, this), - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.LAYERS), - this.handleLayersChanged, false, this); + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.CENTER), + this.handleCenterChanged, false, this), - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.RESOLUTION), - this.handleResolutionChanged, false, this); + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.LAYERS), + this.handleLayersChanged, false, this), - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.ROTATION), - this.handleRotationChanged, false, this); + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.RESOLUTION), + this.handleResolutionChanged, false, this), + + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.ROTATION), + this.handleRotationChanged, false, this), + + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.SIZE), + this.handleSizeChanged, false, this) + ]; - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.SIZE), - this.handleSizeChanged, false, this); }; goog.inherits(ol.MapRenderer, goog.Disposable); @@ -103,6 +109,8 @@ ol.MapRenderer.prototype.disposeInternal = function() { goog.object.forEach(this.layerRenderers, function(layerRenderer) { goog.dispose(layerRenderer); }); + goog.array.forEach(this.mapListenerKeys_, goog.events.unlistenByKey); + goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); goog.base(this, 'disposeInternal'); };