From edee2afe11b18a3a8be3a944044e20c1db09669f Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 25 Aug 2023 15:54:24 +0200 Subject: [PATCH] QtSupport: Load examples / tutorials only when visible This speeds up QtCreator startup a bit by not loading the examples all the time, but only when the user clicks on the "Examples" button. Change-Id: I8fb3656e871cf3f2f884c5eb12270eba427cd999 Reviewed-by: Eike Ziller Reviewed-by: Cristian Adam --- src/plugins/qtsupport/exampleslistmodel.cpp | 20 +++++++++++++++++++ src/plugins/qtsupport/exampleslistmodel.h | 4 ++++ .../qtsupport/gettingstartedwelcomepage.cpp | 15 +++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 5ebf5ed02c8..dc71d42cbb8 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -342,6 +342,12 @@ Q_GLOBAL_STATIC_WITH_ARGS(QStringList, void ExamplesViewController::updateExamples() { + if (!isVisible()) { + m_needsUpdateExamples = true; + return; + } + m_needsUpdateExamples = false; + QString examplesInstallPath; QString demosInstallPath; QVersionNumber qtVersion; @@ -395,6 +401,20 @@ void ExamplesViewController::updateExamples() } } +void ExamplesViewController::setVisible(bool visible) +{ + if (m_isVisible == visible) + return; + m_isVisible = visible; + if (m_isVisible && m_needsUpdateExamples) + updateExamples(); +} + +bool ExamplesViewController::isVisible() const +{ + return m_isVisible; +} + void ExampleSetModel::updateQtVersionList() { QtVersions versions = QtVersionManager::sortVersions(QtVersionManager::versions( diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 00b87068a84..dfd92739abe 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -92,11 +92,15 @@ public: QObject *parent); void updateExamples(); + void setVisible(bool isVisible); + bool isVisible() const; private: ExampleSetModel *m_exampleSetModel; Core::SectionedGridView *m_view; bool m_isExamples; + bool m_isVisible = false; + bool m_needsUpdateExamples = false; }; } // namespace Internal diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp index 5e0292c7575..b6f42fb8d1f 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp @@ -304,7 +304,7 @@ public: grid->addWidget(WelcomePageHelpers::panelBar(this), 0, 2); auto gridView = new SectionedGridView(this); - new ExamplesViewController(s_exampleSetModel, gridView, isExamples, this); + m_viewController = new ExamplesViewController(s_exampleSetModel, gridView, isExamples, this); gridView->setItemDelegate(&m_exampleDelegate); grid->addWidget(gridView, 1, 1, 1, 2); @@ -321,9 +321,22 @@ public: + QString("tag:\"%1\" ").arg(tag)); } + void showEvent(QShowEvent *event) override + { + m_viewController->setVisible(true); + QWidget::showEvent(event); + } + + void hideEvent(QHideEvent *event) override + { + m_viewController->setVisible(false); + QWidget::hideEvent(event); + } + const bool m_isExamples; ExampleDelegate m_exampleDelegate; QLineEdit *m_searcher; + ExamplesViewController *m_viewController = nullptr; }; QWidget *ExamplesWelcomePage::createWidget() const