fix(core): notify layer observer when source-layer or source-id changes (#4372)

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Andrew Calcutt
2026-07-08 18:33:22 -04:00
committed by GitHub
parent e8aa3712bb
commit 08579ca76d
2 changed files with 40 additions and 0 deletions

View File

@@ -285,6 +285,44 @@ TEST(Layer, Observer) {
};
layer->setLineCap(lineCap);
EXPECT_FALSE(layoutPropertyChanged);
// Notifies observer on source-layer change.
// This is required so that the render orchestrator re-evaluates already-loaded
// tiles when a layer's source-layer is changed at runtime (e.g. after addLayer).
bool sourceLayerChanged = false;
observer.layerChanged = [&](Layer& layer_) {
EXPECT_EQ(layer.get(), &layer_);
sourceLayerChanged = true;
};
layer->setSourceLayer("roads");
EXPECT_TRUE(sourceLayerChanged);
// Does not notify observer on no-op source-layer change.
sourceLayerChanged = false;
observer.layerChanged = [&](Layer& layer_) {
EXPECT_EQ(layer.get(), &layer_);
sourceLayerChanged = true;
};
layer->setSourceLayer("roads");
EXPECT_FALSE(sourceLayerChanged);
// Notifies observer on source ID change.
bool sourceIDChanged = false;
observer.layerChanged = [&](Layer& layer_) {
EXPECT_EQ(layer.get(), &layer_);
sourceIDChanged = true;
};
layer->setSourceID("other-source");
EXPECT_TRUE(sourceIDChanged);
// Does not notify observer on no-op source ID change.
sourceIDChanged = false;
observer.layerChanged = [&](Layer& layer_) {
EXPECT_EQ(layer.get(), &layer_);
sourceIDChanged = true;
};
layer->setSourceID("other-source");
EXPECT_FALSE(sourceIDChanged);
}
TEST(Layer, DuplicateLayer) {