From 0f090890a99f5bbd244c5537755f5c257b23805e Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 18 Apr 2018 10:25:29 +0200 Subject: [PATCH] Disable help search widget while indexing documentation If you try to search while indexing, in the best case you'd get incomplete results (though with a warning that that is the case), and in the worst case it crashes because of QTBUG-66816. So just disable the search widget with info and progress indicator in that case. Task-number: QTCREATORBUG-20295 Change-Id: Ibec602b1bc0e98f6fef029c6f10c0cdc5197294c Reviewed-by: Robert Loehning --- src/plugins/help/searchwidget.cpp | 26 ++++++++++++++++++++++---- src/plugins/help/searchwidget.h | 6 ++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/plugins/help/searchwidget.cpp b/src/plugins/help/searchwidget.cpp index 7d275fa0d54..c3bcd1c314d 100644 --- a/src/plugins/help/searchwidget.cpp +++ b/src/plugins/help/searchwidget.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -43,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -112,11 +114,14 @@ void SearchWidget::showEvent(QShowEvent *event) Utils::StyledBar *toolbar = new Utils::StyledBar(this); toolbar->setSingleRow(false); - QHelpSearchQueryWidget *queryWidget = searchEngine->queryWidget(); + m_queryWidget = searchEngine->queryWidget(); QLayout *tbLayout = new QVBoxLayout(); tbLayout->setSpacing(6); tbLayout->setMargin(4); - tbLayout->addWidget(queryWidget); + tbLayout->addWidget(m_queryWidget); + m_indexingDocumentationLabel = new QLabel(tr("Indexing Documentation"), toolbar); + m_indexingDocumentationLabel->hide(); + tbLayout->addWidget(m_indexingDocumentationLabel); toolbar->setLayout(tbLayout); Utils::StyledBar *toolbar2 = new Utils::StyledBar(this); @@ -127,12 +132,17 @@ void SearchWidget::showEvent(QShowEvent *event) tbLayout->addWidget(resultWidget = searchEngine->resultWidget()); toolbar2->setLayout(tbLayout); + m_indexingIndicator = new Utils::ProgressIndicator(Utils::ProgressIndicatorSize::Medium, + resultWidget); + m_indexingIndicator->attachToWidget(resultWidget); + m_indexingIndicator->hide(); + vLayout->addWidget(toolbar); vLayout->addWidget(toolbar2); - setFocusProxy(queryWidget); + setFocusProxy(m_queryWidget); - connect(queryWidget, &QHelpSearchQueryWidget::search, this, &SearchWidget::search); + connect(m_queryWidget, &QHelpSearchQueryWidget::search, this, &SearchWidget::search); connect(resultWidget, &QHelpSearchResultWidget::requestShowLink, this, [this](const QUrl &url) { emit linkActivated(url, currentSearchTerms(), false/*newPage*/); @@ -205,6 +215,10 @@ void SearchWidget::indexingStarted() m_watcher.setFuture(m_progress->future()); connect(&m_watcher, &QFutureWatcherBase::canceled, searchEngine, &QHelpSearchEngine::cancelIndexing); + + m_queryWidget->hide(); + m_indexingDocumentationLabel->show(); + m_indexingIndicator->show(); } void SearchWidget::indexingFinished() @@ -213,6 +227,10 @@ void SearchWidget::indexingFinished() delete m_progress; m_progress = NULL; + + m_queryWidget->show(); + m_indexingDocumentationLabel->hide(); + m_indexingIndicator->hide(); } bool SearchWidget::eventFilter(QObject *o, QEvent *e) diff --git a/src/plugins/help/searchwidget.h b/src/plugins/help/searchwidget.h index e0ad8ebab56..6464099d5aa 100644 --- a/src/plugins/help/searchwidget.h +++ b/src/plugins/help/searchwidget.h @@ -33,10 +33,13 @@ QT_BEGIN_NAMESPACE class QHelpSearchEngine; +class QHelpSearchQueryWidget; class QHelpSearchResultWidget; class QUrl; QT_END_NAMESPACE +namespace Utils { class ProgressIndicator; } + namespace Help { namespace Internal { @@ -93,6 +96,9 @@ private: QHelpSearchEngine *searchEngine; QHelpSearchResultWidget *resultWidget; + QHelpSearchQueryWidget *m_queryWidget; + QWidget *m_indexingDocumentationLabel; + Utils::ProgressIndicator *m_indexingIndicator; }; } // namespace Internal