diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.cpp b/src/plugins/coreplugin/dialogs/ioptionspage.cpp index 4def6095a11..56c7a46f48a 100644 --- a/src/plugins/coreplugin/dialogs/ioptionspage.cpp +++ b/src/plugins/coreplugin/dialogs/ioptionspage.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -100,23 +101,20 @@ void IOptionsPage::setWidgetCreator(const WidgetCreator &widgetCreator) QStringList IOptionsPage::keywords() const { - if (!m_keywordsInitialized) { - auto that = const_cast(this); - QWidget *widget = that->widget(); - if (!widget) - return {}; - // find common subwidgets - for (const QLabel *label : widget->findChildren()) - m_keywords << Utils::stripAccelerator(label->text()); - for (const QCheckBox *checkbox : widget->findChildren()) - m_keywords << Utils::stripAccelerator(checkbox->text()); - for (const QPushButton *pushButton : widget->findChildren()) - m_keywords << Utils::stripAccelerator(pushButton->text()); - for (const QGroupBox *groupBox : widget->findChildren()) - m_keywords << Utils::stripAccelerator(groupBox->title()); + auto that = const_cast(this); + QWidget *widget = that->widget(); + if (!widget) + return {}; + // find common subwidgets + for (const QLabel *label : widget->findChildren()) + m_keywords << label->text(); + for (const QCheckBox *checkbox : widget->findChildren()) + m_keywords << checkbox->text(); + for (const QPushButton *pushButton : widget->findChildren()) + m_keywords << pushButton->text(); + for (const QGroupBox *groupBox : widget->findChildren()) + m_keywords << groupBox->title(); - m_keywordsInitialized = true; - } return m_keywords; } @@ -273,7 +271,12 @@ const QList IOptionsPage::allOptionsPages() */ bool IOptionsPage::matches(const QRegularExpression ®exp) const { - for (const QString &keyword : keywords()) + if (!m_keywordsInitialized) { + m_keywords = Utils::transform(keywords(), Utils::stripAccelerator); + m_keywordsInitialized = true; + } + + for (const QString &keyword : m_keywords) if (keyword.contains(regexp)) return true; return false; diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.h b/src/plugins/coreplugin/dialogs/ioptionspage.h index 9846a49e2d1..21984d2a11a 100644 --- a/src/plugins/coreplugin/dialogs/ioptionspage.h +++ b/src/plugins/coreplugin/dialogs/ioptionspage.h @@ -63,10 +63,11 @@ public: virtual void apply(); virtual void finish(); - virtual QStringList keywords() const; virtual bool matches(const QRegularExpression ®exp) const; protected: + virtual QStringList keywords() const; + void setId(Utils::Id id) { m_id = id; } void setDisplayName(const QString &displayName) { m_displayName = displayName; } void setCategory(Utils::Id category) { m_category = category; }