Merge pull request #3420 from elemoine/leaks

Unregister viewport size listener on setTarget(null)
This commit is contained in:
Éric Lemoine
2015-04-03 20:07:20 +02:00
3 changed files with 52 additions and 2 deletions

View File

@@ -338,13 +338,17 @@ ol.Map = function(options) {
this.registerDisposable(this.renderer_);
/**
* @type {goog.dom.ViewportSizeMonitor}
* @private
*/
this.viewportSizeMonitor_ = new goog.dom.ViewportSizeMonitor();
this.registerDisposable(this.viewportSizeMonitor_);
goog.events.listen(this.viewportSizeMonitor_, goog.events.EventType.RESIZE,
this.updateSize, false, this);
/**
* @type {goog.events.Key}
* @private
*/
this.viewportResizeListenerKey_ = null;
/**
* @private
@@ -1032,12 +1036,22 @@ ol.Map.prototype.handleTargetChanged_ = function() {
if (goog.isNull(targetElement)) {
goog.dom.removeNode(this.viewport_);
if (!goog.isNull(this.viewportResizeListenerKey_)) {
goog.events.unlistenByKey(this.viewportResizeListenerKey_);
this.viewportResizeListenerKey_ = null;
}
} else {
goog.dom.appendChild(targetElement, this.viewport_);
var keyboardEventTarget = goog.isNull(this.keyboardEventTarget_) ?
targetElement : this.keyboardEventTarget_;
this.keyHandler_.attach(keyboardEventTarget);
if (goog.isNull(this.viewportResizeListenerKey_)) {
this.viewportResizeListenerKey_ = goog.events.listen(
this.viewportSizeMonitor_, goog.events.EventType.RESIZE,
this.updateSize, false, this);
}
}
this.updateSize();