From 88da6da3a7bbea5d30e17861e1e683b4a9a68656 Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Mon, 12 Aug 2013 11:51:42 +0200 Subject: [PATCH] Trigger CHANGE event only when required For example only when layer is both ready and visible. --- src/ol/layer/layerbase.js | 19 +++++++++++++++++-- src/ol/layer/layergroup.js | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/ol/layer/layerbase.js b/src/ol/layer/layerbase.js index 1d154fd40a..3273e744be 100644 --- a/src/ol/layer/layerbase.js +++ b/src/ol/layer/layerbase.js @@ -67,11 +67,14 @@ ol.layer.LayerBase = function(options) { ol.Object.getChangeEventType(ol.layer.LayerProperty.HUE), ol.Object.getChangeEventType(ol.layer.LayerProperty.OPACITY), ol.Object.getChangeEventType(ol.layer.LayerProperty.SATURATION), - ol.Object.getChangeEventType(ol.layer.LayerProperty.VISIBLE), goog.events.EventType.LOAD ], this.handleLayerChange, false, this); + goog.events.listen(this, + ol.Object.getChangeEventType(ol.layer.LayerProperty.VISIBLE), + this.handleLayerVisibleChange, false, this); + }; goog.inherits(ol.layer.LayerBase, ol.Object); @@ -204,7 +207,19 @@ goog.exportProperty( * @protected */ ol.layer.LayerBase.prototype.handleLayerChange = function() { - this.dispatchChangeEvent(); + if (this.getVisible() && this.isReady()) { + this.dispatchChangeEvent(); + } +}; + + +/** + * @protected + */ +ol.layer.LayerBase.prototype.handleLayerVisibleChange = function() { + if (this.isReady()) { + this.dispatchChangeEvent(); + } }; diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js index 163500305f..b93c0e40b2 100644 --- a/src/ol/layer/layergroup.js +++ b/src/ol/layer/layergroup.js @@ -66,6 +66,24 @@ ol.layer.LayerGroup = function(opt_options) { goog.inherits(ol.layer.LayerGroup, ol.layer.LayerBase); +/** + * @inheritDoc + */ +ol.layer.LayerGroup.prototype.handleLayerChange = function() { + if (this.getVisible()) { + this.dispatchChangeEvent(); + } +}; + + +/** + * @inheritDoc + */ +ol.layer.LayerGroup.prototype.handleLayerVisibleChange = function() { + this.dispatchChangeEvent(); +}; + + /** * @param {goog.events.Event} event Event. * @private