From 67ec244864ca6f9290e1f35a1a0c60b4888fe686 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 22 Sep 2020 09:05:07 +1000 Subject: [PATCH] When a layer is being removed from the project, gracefully close and cleanup all panels in the layer styling dock Fixes #38920 --- src/app/qgslayerstylingwidget.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/qgslayerstylingwidget.cpp b/src/app/qgslayerstylingwidget.cpp index c46ce36cff52..4b9a44e7d3f5 100644 --- a/src/app/qgslayerstylingwidget.cpp +++ b/src/app/qgslayerstylingwidget.cpp @@ -142,6 +142,9 @@ void QgsLayerStylingWidget::setLayer( QgsMapLayer *layer ) if ( layer == mCurrentLayer ) return; + // when current layer is changed, apply the main panel stack to allow it to gracefully clean up + mWidgetStack->acceptAllPanels(); + if ( mCurrentLayer ) { disconnect( mCurrentLayer, &QgsMapLayer::styleChanged, this, &QgsLayerStylingWidget::updateCurrentWidgetLayer ); @@ -679,6 +682,9 @@ void QgsLayerStylingWidget::layerAboutToBeRemoved( QgsMapLayer *layer ) { if ( layer == mCurrentLayer ) { + // when current layer is removed, apply the main panel stack to allow it to gracefully clean up + mWidgetStack->acceptAllPanels(); + mAutoApplyTimer->stop(); setLayer( nullptr ); }