From e4a7792d6ed02ef6c74ff30a9d8bc7c2ead41292 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Fri, 20 Nov 2009 16:55:23 +0100
Subject: [PATCH] Options dialog: Further polishing. Task-number: QTCREATOR-26

---
 .../cmakeprojectmanager.cpp                   |  17 +-
 .../coreplugin/dialogs/settingsdialog.cpp     |   1 +
 src/plugins/coreplugin/generalsettings.cpp    |  14 ++
 src/plugins/coreplugin/generalsettings.h      |   2 +
 src/plugins/coreplugin/generalsettings.ui     | 161 ++++++++----------
 src/plugins/cpaster/codepastersettings.cpp    |  31 ++--
 src/plugins/cpaster/pastebindotcomsettings.ui |  88 ++++++----
 src/plugins/cpaster/settingspage.cpp          |  14 +-
 src/plugins/cpaster/settingspage.h            |   2 +
 src/plugins/cpaster/settingspage.ui           |   6 +-
 .../cpptools/completionsettingspage.cpp       |  14 +-
 src/plugins/cpptools/completionsettingspage.h |   2 +
 src/plugins/cpptools/cppfilesettingspage.cpp  |  18 ++
 src/plugins/cpptools/cppfilesettingspage.h    |   4 +
 14 files changed, 226 insertions(+), 148 deletions(-)

diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
index d0b683c8b38..e9788ca9b67 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
@@ -40,9 +40,12 @@
 #include <QtCore/QtConcurrentRun>
 #include <QtCore/QSettings>
 #include <QtGui/QFormLayout>
+#include <QtGui/QBoxLayout>
 #include <QtGui/QDesktopServices>
 #include <QtGui/QApplication>
 #include <QtGui/QLabel>
+#include <QtGui/QGroupBox>
+#include <QtGui/QSpacerItem>
 
 using namespace CMakeProjectManager::Internal;
 
@@ -258,13 +261,17 @@ QString CMakeSettingsPage::trCategory() const
 
 QWidget *CMakeSettingsPage::createPage(QWidget *parent)
 {
-    QWidget *w = new QWidget(parent);
-    QFormLayout *fl = new QFormLayout(w);
-    m_pathchooser = new Utils::PathChooser(w);
+    QWidget *outerWidget = new QWidget(parent);
+    QVBoxLayout *outerLayout = new QVBoxLayout(outerWidget);
+    QGroupBox *groupBox = new QGroupBox(trCategory());
+    outerLayout->addWidget(groupBox);
+    outerLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
+    QFormLayout *formLayout = new QFormLayout(groupBox);
+    m_pathchooser = new Utils::PathChooser;
     m_pathchooser->setExpectedKind(Utils::PathChooser::Command);
-    fl->addRow(tr("CMake executable"), m_pathchooser);
+    formLayout->addRow(tr("Executable:"), m_pathchooser);
     m_pathchooser->setPath(cmakeExecutable());
-    return w;
+    return outerWidget;
 }
 
 void CMakeSettingsPage::updateInfo()
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
index be51bb792d4..34bf4ca2816 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
@@ -184,6 +184,7 @@ SettingsDialog::SettingsDialog(QWidget *parent, const QString &categoryId,
     m_applied(false)
 {
     setupUi(this);
+    setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
 #ifdef Q_OS_MAC
     setWindowTitle(tr("Preferences"));
 #else
diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index 30ce55f36f4..118973ddd2d 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -34,8 +34,11 @@
 #include <utils/consoleprocess.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/icore.h>
+
 #include <QtGui/QMessageBox>
 
+#include <QtCore/QTextStream>
+
 #include "ui_generalsettings.h"
 
 using namespace Utils;
@@ -94,9 +97,20 @@ QWidget *GeneralSettings::createPage(QWidget *parent)
             this, SLOT(resetTerminal()));
 #endif
 
+    if (m_searchKeywords.isEmpty()) {
+        QTextStream(&m_searchKeywords) << m_page->colorLabel->text() << ' '
+                << m_page->terminalLabel->text() << ' ' << m_page->editorLabel->text()
+                << ' '<< m_page->modifiedLabel->text();
+        m_searchKeywords.remove(QLatin1Char('&'));
+    }
     return w;
 }
 
+bool GeneralSettings::matches(const QString &s) const
+{
+    return m_searchKeywords.contains(s, Qt::CaseInsensitive);
+}
+
 void GeneralSettings::apply()
 {
     // Apply the new base color if accepted
diff --git a/src/plugins/coreplugin/generalsettings.h b/src/plugins/coreplugin/generalsettings.h
index 3cf47f242e4..6c2e4ee45c1 100644
--- a/src/plugins/coreplugin/generalsettings.h
+++ b/src/plugins/coreplugin/generalsettings.h
@@ -55,6 +55,7 @@ public:
     QWidget* createPage(QWidget *parent);
     void apply();
     void finish();
+    virtual bool matches(const QString &) const;
 
 private slots:
     void resetInterfaceColor();
@@ -66,6 +67,7 @@ private slots:
 
 private:
     Ui::GeneralSettings *m_page;
+    QString m_searchKeywords;
     QPointer<QWidget> m_dialog;
 };
 
diff --git a/src/plugins/coreplugin/generalsettings.ui b/src/plugins/coreplugin/generalsettings.ui
index b33497825c7..35c3b27963a 100644
--- a/src/plugins/coreplugin/generalsettings.ui
+++ b/src/plugins/coreplugin/generalsettings.ui
@@ -2,49 +2,28 @@
 <ui version="4.0">
  <class>Core::Internal::GeneralSettings</class>
  <widget class="QWidget" name="Core::Internal::GeneralSettings">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>536</width>
-    <height>233</height>
-   </rect>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGroupBox" name="groupBox">
      <property name="title">
       <string>General settings</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_4">
-        <item>
-         <widget class="QLabel" name="colorLabel">
-          <property name="text">
-           <string>User &amp;interface color:</string>
-          </property>
-          <property name="buddy">
-           <cstring>colorButton</cstring>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer name="horizontalSpacer_2">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::Fixed</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
+     <layout class="QFormLayout" name="formLayout">
+      <property name="rowWrapPolicy">
+       <enum>QFormLayout::WrapLongRows</enum>
+      </property>
+      <item row="0" column="0">
+       <widget class="QLabel" name="colorLabel">
+        <property name="text">
+         <string>User &amp;interface color:</string>
+        </property>
+        <property name="buddy">
+         <cstring>colorButton</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <layout class="QHBoxLayout" name="colorHorizontalLayout">
         <item>
          <widget class="Utils::QtColorButton" name="colorButton">
           <property name="sizePolicy">
@@ -93,15 +72,15 @@
         </item>
        </layout>
       </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <widget class="QLabel" name="terminalLabel">
-          <property name="text">
-           <string>Terminal:</string>
-          </property>
-         </widget>
-        </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="terminalLabel">
+        <property name="text">
+         <string>Terminal:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <layout class="QHBoxLayout" name="terminalHorizontalLayout">
         <item>
          <widget class="QLineEdit" name="terminalEdit"/>
         </item>
@@ -121,15 +100,15 @@
         </item>
        </layout>
       </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_5">
-        <item>
-         <widget class="QLabel" name="label">
-          <property name="text">
-           <string>External editor:</string>
-          </property>
-         </widget>
-        </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="editorLabel">
+        <property name="text">
+         <string>External editor:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <layout class="QHBoxLayout" name="editorHorizontalLayout">
         <item>
          <widget class="QLineEdit" name="externalEditorEdit"/>
         </item>
@@ -156,47 +135,43 @@
         </item>
        </layout>
       </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item row="3" column="0">
+       <widget class="QLabel" name="modifiedLabel">
+        <property name="text">
+         <string>When files are externally modified:</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QComboBox" name="reloadBehavior">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="currentIndex">
+         <number>0</number>
+        </property>
         <item>
-         <widget class="QLabel" name="label_2">
-          <property name="text">
-           <string>When files are externally modified:</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
+         <property name="text">
+          <string>Always ask</string>
+         </property>
         </item>
         <item>
-         <widget class="QComboBox" name="reloadBehavior">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="currentIndex">
-           <number>0</number>
-          </property>
-          <item>
-           <property name="text">
-            <string>Always ask</string>
-           </property>
-          </item>
-          <item>
-           <property name="text">
-            <string>Reload all modified files</string>
-           </property>
-          </item>
-          <item>
-           <property name="text">
-            <string>Ignore modifications</string>
-           </property>
-          </item>
-         </widget>
+         <property name="text">
+          <string>Reload all modified files</string>
+         </property>
         </item>
-       </layout>
+        <item>
+         <property name="text">
+          <string>Ignore modifications</string>
+         </property>
+        </item>
+       </widget>
       </item>
      </layout>
     </widget>
diff --git a/src/plugins/cpaster/codepastersettings.cpp b/src/plugins/cpaster/codepastersettings.cpp
index 68117000ec7..da2591cc721 100644
--- a/src/plugins/cpaster/codepastersettings.cpp
+++ b/src/plugins/cpaster/codepastersettings.cpp
@@ -34,6 +34,9 @@
 #include <QtCore/QSettings>
 #include <QtGui/QLineEdit>
 #include <QtGui/QFileDialog>
+#include <QtGui/QGroupBox>
+#include <QtGui/QFormLayout>
+#include <QtGui/QVBoxLayout>
 #include <QtCore/QDebug>
 #include <QtCore/QVariant>
 
@@ -70,22 +73,26 @@ QString CodePasterSettingsPage::trCategory() const
 }
 
 QWidget *CodePasterSettingsPage::createPage(QWidget *parent)
-{
-    QWidget *w = new QWidget(parent);
-    QLabel *label = new QLabel(tr("Server:"));
-    QLineEdit *lineedit = new QLineEdit;
-    lineedit->setText(m_host);
+{    
+    QGroupBox *groupBox = new QGroupBox(category());
+    QVBoxLayout *groupBoxLayout = new QVBoxLayout(groupBox);
+    QFormLayout *formLayout = new QFormLayout;
+    QLineEdit *lineedit = new QLineEdit(m_host);
     connect(lineedit, SIGNAL(textChanged(QString)), this, SLOT(serverChanged(QString)));
+    formLayout->addRow(tr("Server:"), lineedit);
+    groupBoxLayout->addLayout(formLayout);
+    groupBoxLayout->addSpacerItem(new QSpacerItem(0, 60, QSizePolicy::Ignored, QSizePolicy::Fixed));
+
     QLabel *noteLabel = new QLabel(tr("Note: Specify the host name for the CodePaster service "
                                       "without any protocol prepended (e.g. codepaster.mycompany.com)."));
     noteLabel->setWordWrap(true);
-    QGridLayout* layout = new QGridLayout();
-    layout->addWidget(label, 0, 0);
-    layout->addWidget(lineedit, 0, 1);
-    layout->addWidget(noteLabel, 1, 1);
-    layout->addItem(new QSpacerItem(1,1, QSizePolicy::Preferred, QSizePolicy::MinimumExpanding), 2, 0);
-    w->setLayout(layout);
-    return w;
+    groupBoxLayout->addWidget(noteLabel);
+
+    QWidget *outerWidget = new QWidget(parent);
+    QVBoxLayout *outerLayout = new QVBoxLayout(outerWidget);
+    outerLayout->addWidget(groupBox);
+    outerLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
+    return outerWidget;
 }
 
 void CodePasterSettingsPage::apply()
diff --git a/src/plugins/cpaster/pastebindotcomsettings.ui b/src/plugins/cpaster/pastebindotcomsettings.ui
index 10a19e05d18..693c8bf6f57 100644
--- a/src/plugins/cpaster/pastebindotcomsettings.ui
+++ b/src/plugins/cpaster/pastebindotcomsettings.ui
@@ -6,45 +6,67 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>300</height>
+    <width>520</width>
+    <height>475</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
-    <layout class="QFormLayout" name="formLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>Server Prefix:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="lineEdit"/>
-     </item>
-     <item row="1" column="1">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://pastebin.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;pastebin.com&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt; allows to send posts to custom subdomains (eg. qtcreator.pastebin.com). Fill in the desired prefix.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Note that the plugin will use this for posting as well as fetching.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-       </property>
-       <property name="textFormat">
-        <enum>Qt::RichText</enum>
-       </property>
-       <property name="wordWrap">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>PasteBin</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <layout class="QFormLayout" name="formLayout">
+        <item row="0" column="0">
+         <widget class="QLabel" name="serverPrefix">
+          <property name="text">
+           <string>Server Prefix:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="lineEdit"/>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <spacer name="explanatoryTextSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>0</width>
+          <height>60</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QLabel" name="explanatoryTextLabel">
+        <property name="text">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;
+&lt;p&gt;&lt;a href=&quot;http://pastebin.com&quot;&gt;pastebin.com&lt;/a&gt; allows to send posts to custom subdomains (eg. qtcreator.pastebin.com). Fill in the desired prefix.&lt;/p&gt;
+&lt;p&gt;Note that the plugin will use this for posting as well as fetching.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+        <property name="textFormat">
+         <enum>Qt::RichText</enum>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
    </item>
    <item>
     <spacer name="verticalSpacer">
diff --git a/src/plugins/cpaster/settingspage.cpp b/src/plugins/cpaster/settingspage.cpp
index c530027f3e6..b1db4f3e415 100644
--- a/src/plugins/cpaster/settingspage.cpp
+++ b/src/plugins/cpaster/settingspage.cpp
@@ -31,11 +31,13 @@
 
 #include <coreplugin/icore.h>
 
-#include <QtCore/QSettings>
 #include <QtGui/QLineEdit>
 #include <QtGui/QFileDialog>
+
 #include <QtCore/QDebug>
 #include <QtCore/QVariant>
+#include <QtCore/QSettings>
+#include <QtCore/QTextStream>
 
 using namespace CodePaster;
 
@@ -86,6 +88,11 @@ QWidget *SettingsPage::createPage(QWidget *parent)
     m_ui.userEdit->setText(m_username);
     m_ui.clipboardBox->setChecked(m_copy);
     m_ui.displayBox->setChecked(m_output);
+    if (m_searchKeywords.isEmpty()) {
+        QTextStream(&m_searchKeywords) << m_ui.protocolLabel->text() << ' '
+                << m_ui.userNameLabel->text();
+        m_searchKeywords.remove(QLatin1Char('&'));
+    }
     return w;
 }
 
@@ -107,6 +114,11 @@ void SettingsPage::apply()
     m_settings->endGroup();
 }
 
+bool SettingsPage::matches(const QString &s) const
+{
+    return m_searchKeywords.contains(s, Qt::CaseInsensitive);
+}
+
 void SettingsPage::addProtocol(const QString &name)
 {
     m_protocols.append(name);
diff --git a/src/plugins/cpaster/settingspage.h b/src/plugins/cpaster/settingspage.h
index 4d97ecb3e8d..72d2cdf8aa2 100644
--- a/src/plugins/cpaster/settingspage.h
+++ b/src/plugins/cpaster/settingspage.h
@@ -59,6 +59,7 @@ public:
     QWidget *createPage(QWidget *parent);
     void apply();
     void finish() { }
+    virtual bool matches(const QString &) const;
 
     void addProtocol(const QString& name);
     QString username() const;
@@ -71,6 +72,7 @@ private:
     Ui_SettingsPage m_ui;
     QSettings *m_settings;
 
+    QString m_searchKeywords;
     QStringList m_protocols;
     QString m_username;
     QString m_protocol;
diff --git a/src/plugins/cpaster/settingspage.ui b/src/plugins/cpaster/settingspage.ui
index 3dc2f9a939f..2593d6e1a90 100644
--- a/src/plugins/cpaster/settingspage.ui
+++ b/src/plugins/cpaster/settingspage.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>362</width>
+    <width>453</width>
     <height>320</height>
    </rect>
   </property>
@@ -24,7 +24,7 @@
      </property>
      <layout class="QFormLayout" name="formLayout">
       <item row="0" column="0">
-       <widget class="QLabel" name="label">
+       <widget class="QLabel" name="protocolLabel">
         <property name="text">
          <string>Default Protocol:</string>
         </property>
@@ -50,7 +50,7 @@
        </widget>
       </item>
       <item row="1" column="0">
-       <widget class="QLabel" name="label_2">
+       <widget class="QLabel" name="userNameLabel">
         <property name="text">
          <string>Username:</string>
         </property>
diff --git a/src/plugins/cpptools/completionsettingspage.cpp b/src/plugins/cpptools/completionsettingspage.cpp
index 1972c9822f1..d74cec00ea7 100644
--- a/src/plugins/cpptools/completionsettingspage.cpp
+++ b/src/plugins/cpptools/completionsettingspage.cpp
@@ -34,6 +34,8 @@
 #include <coreplugin/icore.h>
 #include <extensionsystem/pluginmanager.h>
 
+#include <QtCore/QTextStream>
+
 using namespace CppTools::Internal;
 
 CompletionSettingsPage::CompletionSettingsPage(CppCodeCompletion *completion)
@@ -75,7 +77,12 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent)
     m_page->caseSensitive->setChecked(m_completion->caseSensitivity() == Qt::CaseSensitive);
     m_page->autoInsertBrackets->setChecked(m_completion->autoInsertBrackets());
     m_page->partiallyComplete->setChecked(m_completion->isPartialCompletionEnabled());
-
+    if (m_searchKeywords.isEmpty()) {
+        QTextStream(&m_searchKeywords) << m_page->caseSensitive->text()
+                << ' ' << m_page->autoInsertBrackets->text()
+                << ' ' << m_page->partiallyComplete->text();
+        m_searchKeywords.remove(QLatin1Char('&'));
+    }
     return w;
 }
 
@@ -86,3 +93,8 @@ void CompletionSettingsPage::apply()
     m_completion->setAutoInsertBrackets(m_page->autoInsertBrackets->isChecked());
     m_completion->setPartialCompletionEnabled(m_page->partiallyComplete->isChecked());
 }
+
+bool CompletionSettingsPage::matches(const QString &s) const
+{
+    return m_searchKeywords.contains(s, Qt::CaseInsensitive);
+}
diff --git a/src/plugins/cpptools/completionsettingspage.h b/src/plugins/cpptools/completionsettingspage.h
index d8683c009d2..0123b3885ef 100644
--- a/src/plugins/cpptools/completionsettingspage.h
+++ b/src/plugins/cpptools/completionsettingspage.h
@@ -57,10 +57,12 @@ public:
     QWidget *createPage(QWidget *parent);
     void apply();
     void finish() { }
+    virtual bool matches(const QString &) const;
 
 private:
     CppCodeCompletion *m_completion;
     Ui_CompletionSettingsPage *m_page;
+    QString m_searchKeywords;
 };
 
 } // namespace Internal
diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp
index a8320a87ccb..86e55461ed3 100644
--- a/src/plugins/cpptools/cppfilesettingspage.cpp
+++ b/src/plugins/cpptools/cppfilesettingspage.cpp
@@ -44,6 +44,7 @@
 #include <QtCore/QCoreApplication>
 #include <QtCore/QDate>
 #include <QtCore/QLocale>
+#include <QtCore/QTextStream>
 
 #include <QtGui/QFileDialog>
 #include <QtGui/QMessageBox>
@@ -237,6 +238,16 @@ CppFileSettings CppFileSettingsWidget::settings() const
     return rc;
 }
 
+QString CppFileSettingsWidget::searchKeywords() const
+{
+    QString rc;
+    QTextStream(&rc) << m_ui->headerSuffixLabel->text()
+            << ' ' << m_ui->sourceSuffixLabel->text()
+            << ' ' << m_ui->lowerCaseFileNamesCheckBox->text();
+    rc.remove(QLatin1Char('&'));
+    return rc;
+}
+
 static inline void setComboText(QComboBox *cb, const QString &text, int defaultIndex = 0)
 {
     const int index = cb->findText(text);
@@ -312,6 +323,8 @@ QWidget *CppFileSettingsPage::createPage(QWidget *parent)
 
     m_widget = new CppFileSettingsWidget(parent);
     m_widget->setSettings(*m_settings);
+    if (m_searchKeywords.isEmpty())
+        m_searchKeywords = m_widget->searchKeywords();
     return m_widget;
 }
 
@@ -327,6 +340,11 @@ void CppFileSettingsPage::apply()
     }
 }
 
+bool CppFileSettingsPage::matches(const QString &s) const
+{
+    return m_searchKeywords.contains(s, Qt::CaseInsensitive);
+}
+
 }
 }
 
diff --git a/src/plugins/cpptools/cppfilesettingspage.h b/src/plugins/cpptools/cppfilesettingspage.h
index 7649ce67a27..aa431057d2d 100644
--- a/src/plugins/cpptools/cppfilesettingspage.h
+++ b/src/plugins/cpptools/cppfilesettingspage.h
@@ -77,6 +77,8 @@ public:
     CppFileSettings settings() const;
     void setSettings(const CppFileSettings &s);
 
+    QString searchKeywords() const;
+
 private slots:    
     void slotEdit();
 
@@ -103,10 +105,12 @@ public:
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
     virtual void finish() { }
+    virtual bool matches(const QString &) const;
 
 private:
     const QSharedPointer<CppFileSettings> m_settings;
     QPointer<CppFileSettingsWidget> m_widget;
+    QString m_searchKeywords;
 };
 
 } // namespace Internal
-- 
GitLab