From 65da9bbeb48204f188b8519e4f69a81f8d35158b Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Tue, 28 Jan 2025 11:03:52 +0100 Subject: [PATCH] [gui] Lazy load layer metadata in datasource manager Fix #60018 --- src/gui/qgslayermetadatasearchwidget.cpp | 11 +++++++---- src/gui/qgslayermetadatasearchwidget.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gui/qgslayermetadatasearchwidget.cpp b/src/gui/qgslayermetadatasearchwidget.cpp index 8fc172c4068e..f3f30d5149de 100644 --- a/src/gui/qgslayermetadatasearchwidget.cpp +++ b/src/gui/qgslayermetadatasearchwidget.cpp @@ -145,10 +145,6 @@ QgsLayerMetadataSearchWidget::QgsLayerMetadataSearchWidget( QWidget *parent, Qt: } ); connect( mButtonBox, &QDialogButtonBox::helpRequested, this, &QgsLayerMetadataSearchWidget::showHelp ); - - // Start loading metadata in the model - mSourceModel->reloadAsync(); - mIsLoading = true; } void QgsLayerMetadataSearchWidget::setMapCanvas( QgsMapCanvas *newMapCanvas ) @@ -185,6 +181,7 @@ void QgsLayerMetadataSearchWidget::updateExtentFilter( int index ) void QgsLayerMetadataSearchWidget::refresh() { + mIsLoading = true; mSourceModel->reloadAsync(); } @@ -261,6 +258,12 @@ void QgsLayerMetadataSearchWidget::showEvent( QShowEvent *event ) { QgsAbstractDataSourceWidget::showEvent( event ); mSearchFilterLineEdit->setText( mProxyModel->filterString() ); + // The first show event triggers the metadata loading + if ( !mIsInitialized ) + { + refresh(); + mIsInitialized = true; + } } void QgsLayerMetadataSearchWidget::showHelp() diff --git a/src/gui/qgslayermetadatasearchwidget.h b/src/gui/qgslayermetadatasearchwidget.h index 406c8e98a081..2dcb35845ded 100644 --- a/src/gui/qgslayermetadatasearchwidget.h +++ b/src/gui/qgslayermetadatasearchwidget.h @@ -59,6 +59,7 @@ class GUI_EXPORT QgsLayerMetadataSearchWidget : public QgsAbstractDataSourceWidg private: QgsLayerMetadataResultsProxyModel *mProxyModel = nullptr; bool mIsLoading = false; + bool mIsInitialized = false; QgsLayerMetadataResultsModel *mSourceModel = nullptr; // QWidget interface