diff --git a/src/gui/qgsmaskingwidget.cpp b/src/gui/qgsmaskingwidget.cpp index 93978051807c..4b5806eea2db 100644 --- a/src/gui/qgsmaskingwidget.cpp +++ b/src/gui/qgsmaskingwidget.cpp @@ -37,6 +37,9 @@ QgsMaskingWidget::QgsMaskingWidget( QWidget *parent ) : QgsPanelWidget( parent ) { setupUi( this ); + + connect( mMaskTargetsWidget, &QgsSymbolLayerSelectionWidget::changed, this, &QgsMaskingWidget::onSelectionChanged ); + connect( mMaskSourcesWidget, &QgsMaskSourceSelectionWidget::changed, this, &QgsMaskingWidget::onSelectionChanged ); } void QgsMaskingWidget::onSelectionChanged() @@ -58,29 +61,6 @@ void QgsMaskingWidget::onSelectionChanged() emit widgetChanged(); } -void QgsMaskingWidget::showEvent( QShowEvent *event ) -{ - Q_UNUSED( event ); - - // populate is quite long, so we delay it when the widget is first shown - if ( mMustPopulate ) - { - disconnect( mMaskTargetsWidget, &QgsSymbolLayerSelectionWidget::changed, this, &QgsMaskingWidget::onSelectionChanged ); - disconnect( mMaskSourcesWidget, &QgsMaskSourceSelectionWidget::changed, this, &QgsMaskingWidget::onSelectionChanged ); - - mMustPopulate = false; - populate(); - - connect( mMaskTargetsWidget, &QgsSymbolLayerSelectionWidget::changed, this, &QgsMaskingWidget::onSelectionChanged ); - connect( mMaskSourcesWidget, &QgsMaskSourceSelectionWidget::changed, this, &QgsMaskingWidget::onSelectionChanged ); - - onSelectionChanged(); - } -} - - - - /** * Symbol layer masks collector. It is an enhanced version of QgsVectorLayerUtils::symbolLayerMasks. * Indeed, we need here to know both mask sources and targets for all masks @@ -107,15 +87,15 @@ QList>> symbolLayerMasks( const Qg void QgsMaskingWidget::setLayer( QgsVectorLayer *layer ) { - if ( mLayer != layer ) - { - mLayer = layer; - mMustPopulate = true; - } + mLayer = layer; + populate(); } void QgsMaskingWidget::populate() { + mMaskSourcesWidget->blockSignals( true ); + mMaskTargetsWidget->blockSignals( true ); + mMaskSourcesWidget->update(); mMaskTargetsWidget->setLayer( mLayer ); @@ -175,6 +155,9 @@ void QgsMaskingWidget::populate() mMaskSourcesWidget->setSelection( maskSources ); mMaskTargetsWidget->setSelection( maskedSymbolLayers ); + + mMaskSourcesWidget->blockSignals( false ); + mMaskTargetsWidget->blockSignals( false ); } void QgsMaskingWidget::apply() @@ -276,11 +259,6 @@ void QgsMaskingWidget::apply() } } -bool QgsMaskingWidget::hasBeenPopulated() -{ - return !mMustPopulate; -} - SymbolLayerVisitor::SymbolLayerVisitor( SymbolLayerVisitor::SymbolLayerCallback callback ) : mCallback( callback ) {} diff --git a/src/gui/qgsmaskingwidget.h b/src/gui/qgsmaskingwidget.h index 784aea508c5d..84b7105ca634 100644 --- a/src/gui/qgsmaskingwidget.h +++ b/src/gui/qgsmaskingwidget.h @@ -50,13 +50,6 @@ class GUI_EXPORT QgsMaskingWidget: public QgsPanelWidget, private Ui::QgsMasking //! Applies the changes void apply(); - //! Widget has been populated or not - bool hasBeenPopulated(); - - protected: - - void showEvent( QShowEvent * ) override; - private slots: /** @@ -70,7 +63,7 @@ class GUI_EXPORT QgsMaskingWidget: public QgsPanelWidget, private Ui::QgsMasking void populate(); QPointer mMessageBarItem; - bool mMustPopulate = false; + friend class TestQgsMaskingWidget; }; diff --git a/src/gui/vector/qgsvectorlayerproperties.cpp b/src/gui/vector/qgsvectorlayerproperties.cpp index 04b804fae73e..fd37d889f684 100644 --- a/src/gui/vector/qgsvectorlayerproperties.cpp +++ b/src/gui/vector/qgsvectorlayerproperties.cpp @@ -738,7 +738,7 @@ void QgsVectorLayerProperties::apply() mMetadataFilled = false; // save masking settings - if ( mMaskingWidget && mMaskingWidget->hasBeenPopulated() ) + if ( mMaskingWidget ) mMaskingWidget->apply(); //