From cb96b91dd4ab1dbf43c257eac64a65b728fdb837 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 26 Jan 2021 16:31:12 +0100 Subject: [PATCH] Refactor Locator filter settings saving Unify setting saving. Do not write settings that stay at the default, so defaults could change and take effect. For this we explicitly differentiate between default and user settings. Make QJsonDocument the basis for saving settings, because QDataStream cannot really handle structured data where parts could be missing. Write locator settings to a different settings group, so we do not destroy reading older settings from older Qt Creator versions. Task-number: QTCREATORBUG-24762 Change-Id: I5909e2d79313f6fc26159bb644fdfb43781b6c38 Reviewed-by: David Schulz --- src/plugins/bookmarks/bookmarkfilter.cpp | 2 +- .../clangcurrentdocumentfilter.cpp | 4 +- src/plugins/clangrefactoring/locatorfilter.h | 4 +- .../cmakelocatorfilter.cpp | 4 +- .../coreplugin/locator/commandlocator.cpp | 2 +- .../coreplugin/locator/directoryfilter.cpp | 127 ++++++++++++------ .../coreplugin/locator/directoryfilter.h | 5 +- .../coreplugin/locator/executefilter.cpp | 4 +- .../locator/externaltoolsfilter.cpp | 2 +- .../coreplugin/locator/filesystemfilter.cpp | 47 ++++--- .../coreplugin/locator/filesystemfilter.h | 10 +- .../coreplugin/locator/ilocatorfilter.cpp | 126 ++++++++++++++--- .../coreplugin/locator/ilocatorfilter.h | 13 +- .../coreplugin/locator/javascriptfilter.cpp | 4 +- src/plugins/coreplugin/locator/locator.cpp | 21 ++- .../locator/locatorfiltersfilter.cpp | 2 +- .../locator/opendocumentsfilter.cpp | 4 +- .../locator/spotlightlocatorfilter.cpp | 37 +---- .../locator/spotlightlocatorfilter.h | 5 +- .../coreplugin/locator/urllocatorfilter.cpp | 65 +++++---- .../coreplugin/locator/urllocatorfilter.h | 7 +- src/plugins/coreplugin/menubarfilter.cpp | 2 +- src/plugins/coreplugin/settingsdatabase.cpp | 16 ++- src/plugins/coreplugin/settingsdatabase.h | 24 ++++ src/plugins/cpptools/cppclassesfilter.cpp | 4 +- .../cpptools/cppcurrentdocumentfilter.cpp | 4 +- src/plugins/cpptools/cppfunctionsfilter.cpp | 4 +- src/plugins/cpptools/cppincludesfilter.cpp | 4 +- src/plugins/cpptools/cpplocatorfilter.cpp | 4 +- src/plugins/help/helpindexfilter.cpp | 4 +- src/plugins/languageclient/locatorfilter.cpp | 12 +- src/plugins/macros/macrolocatorfilter.cpp | 2 +- .../projectexplorer/allprojectsfilter.cpp | 4 +- .../projectexplorer/currentprojectfilter.cpp | 7 +- .../projectexplorer/projectexplorer.cpp | 5 +- .../qmljstools/qmljsfunctionfilter.cpp | 4 +- src/plugins/texteditor/linenumberfilter.cpp | 4 +- 37 files changed, 398 insertions(+), 201 deletions(-) diff --git a/src/plugins/bookmarks/bookmarkfilter.cpp b/src/plugins/bookmarks/bookmarkfilter.cpp index b0f162ff1d8..be9dc2b2254 100644 --- a/src/plugins/bookmarks/bookmarkfilter.cpp +++ b/src/plugins/bookmarks/bookmarkfilter.cpp @@ -40,7 +40,7 @@ BookmarkFilter::BookmarkFilter(BookmarkManager *manager) setId("Bookmarks"); setDisplayName(tr("Bookmarks")); setPriority(Medium); - setShortcutString("b"); + setDefaultShortcutString("b"); } void BookmarkFilter::prepareSearch(const QString &entry) diff --git a/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp b/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp index 395babd6e33..28200684103 100644 --- a/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp +++ b/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp @@ -56,9 +56,9 @@ ClangCurrentDocumentFilter::ClangCurrentDocumentFilter() { setId(CppTools::Constants::CURRENT_DOCUMENT_FILTER_ID); setDisplayName(CppTools::Constants::CURRENT_DOCUMENT_FILTER_DISPLAY_NAME); - setShortcutString(QString(QLatin1Char('.'))); + setDefaultShortcutString("."); setPriority(High); - setIncludedByDefault(false); + setDefaultIncludedByDefault(false); Core::EditorManager *editorManager = Core::EditorManager::instance(); connect(editorManager, &Core::EditorManager::currentEditorChanged, diff --git a/src/plugins/clangrefactoring/locatorfilter.h b/src/plugins/clangrefactoring/locatorfilter.h index 08560ce049a..9990dbf890d 100644 --- a/src/plugins/clangrefactoring/locatorfilter.h +++ b/src/plugins/clangrefactoring/locatorfilter.h @@ -49,8 +49,8 @@ public: { setId(id); setDisplayName(displayName); - setShortcutString(shortCut); - setIncludedByDefault(includedByDefault); + setDefaultShortcutString(shortCut); + setDefaultIncludedByDefault(includedByDefault); } QList matchesFor(QFutureInterface &future, diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp index a8e768d6152..c0d85123964 100644 --- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp @@ -121,7 +121,7 @@ BuildCMakeTargetLocatorFilter::BuildCMakeTargetLocatorFilter() { setId("Build CMake target"); setDisplayName(tr("Build CMake target")); - setShortcutString("cm"); + setDefaultShortcutString("cm"); setPriority(High); } @@ -170,7 +170,7 @@ OpenCMakeTargetLocatorFilter::OpenCMakeTargetLocatorFilter() { setId("Open CMake target definition"); setDisplayName(tr("Open CMake target")); - setShortcutString("cmo"); + setDefaultShortcutString("cmo"); setPriority(Medium); } diff --git a/src/plugins/coreplugin/locator/commandlocator.cpp b/src/plugins/coreplugin/locator/commandlocator.cpp index 7ad0fea3867..8b630d3fd52 100644 --- a/src/plugins/coreplugin/locator/commandlocator.cpp +++ b/src/plugins/coreplugin/locator/commandlocator.cpp @@ -57,7 +57,7 @@ CommandLocator::CommandLocator(Id id, { setId(id); setDisplayName(displayName); - setShortcutString(shortCutString); + setDefaultShortcutString(shortCutString); } CommandLocator::~CommandLocator() diff --git a/src/plugins/coreplugin/locator/directoryfilter.cpp b/src/plugins/coreplugin/locator/directoryfilter.cpp index aa3d3f1c150..6a730b0e07c 100644 --- a/src/plugins/coreplugin/locator/directoryfilter.cpp +++ b/src/plugins/coreplugin/locator/directoryfilter.cpp @@ -33,6 +33,8 @@ #include #include +#include +#include using namespace Utils; @@ -44,61 +46,102 @@ namespace Core { \internal */ -DirectoryFilter::DirectoryFilter(Id id) - : m_filters({"*.h", "*.cpp", "*.ui", "*.qrc"}), - m_exclusionFilters({"*/.git/*", "*/.cvs/*", "*/.svn/*"}) +const char kDisplayNameKey[] = "displayName"; +const char kDirectoriesKey[] = "directories"; +const char kFiltersKey[] = "filters"; +const char kFilesKey[] = "files"; +const char kExclusionFiltersKey[] = "exclusionFilters"; + +const QStringList kFiltersDefault = {"*.h", "*.cpp", "*.ui", "*.qrc"}; +const QStringList kExclusionFiltersDefault = {"*/.git/*", "*/.cvs/*", "*/.svn/*"}; + +static QString defaultDisplayName() { - setId(id); - setIncludedByDefault(true); - setDisplayName(tr("Generic Directory Filter")); + return DirectoryFilter::tr("Generic Directory Filter"); } -QByteArray DirectoryFilter::saveState() const +DirectoryFilter::DirectoryFilter(Id id) + : m_filters(kFiltersDefault) + , m_exclusionFilters(kExclusionFiltersDefault) +{ + setId(id); + setDefaultIncludedByDefault(true); + setDisplayName(defaultDisplayName()); +} + +void DirectoryFilter::saveState(QJsonObject &object) const +{ + QMutexLocker locker(&m_lock); // m_files is modified in other thread + + if (displayName() != defaultDisplayName()) + object.insert(kDisplayNameKey, displayName()); + if (!m_directories.isEmpty()) + object.insert(kDirectoriesKey, QJsonArray::fromStringList(m_directories)); + if (m_filters != kFiltersDefault) + object.insert(kFiltersKey, QJsonArray::fromStringList(m_filters)); + if (!m_files.isEmpty()) + object.insert(kFilesKey, + QJsonArray::fromStringList( + Utils::transform(m_files, &Utils::FilePath::toString))); + if (m_exclusionFilters != kExclusionFiltersDefault) + object.insert(kExclusionFiltersKey, QJsonArray::fromStringList(m_exclusionFilters)); +} + +static QStringList toStringList(const QJsonArray &array) +{ + return Utils::transform(array.toVariantList(), &QVariant::toString); +} + +void DirectoryFilter::restoreState(const QJsonObject &object) { QMutexLocker locker(&m_lock); - QByteArray value; - QDataStream out(&value, QIODevice::WriteOnly); - out << displayName(); - out << m_directories; - out << m_filters; - out << shortcutString(); - out << isIncludedByDefault(); - out << Utils::transform(m_files, &Utils::FilePath::toString); - out << m_exclusionFilters; - return value; + setDisplayName(object.value(kDisplayNameKey).toString(defaultDisplayName())); + m_directories = toStringList(object.value(kDirectoriesKey).toArray()); + m_filters = toStringList( + object.value(kFiltersKey).toArray(QJsonArray::fromStringList(kFiltersDefault))); + m_files = Utils::transform(toStringList(object.value(kFilesKey).toArray()), + &FilePath::fromString); + m_exclusionFilters = toStringList( + object.value(kExclusionFiltersKey) + .toArray(QJsonArray::fromStringList(kExclusionFiltersDefault))); } void DirectoryFilter::restoreState(const QByteArray &state) { - QMutexLocker locker(&m_lock); + if (isOldSetting(state)) { + // TODO read old settings, remove some time after Qt Creator 4.15 + QMutexLocker locker(&m_lock); - QString name; - QStringList directories; - QString shortcut; - bool defaultFilter; - QStringList files; + QString name; + QStringList directories; + QString shortcut; + bool defaultFilter; + QStringList files; - QDataStream in(state); - in >> name; - in >> directories; - in >> m_filters; - in >> shortcut; - in >> defaultFilter; - in >> files; - m_files = Utils::transform(files, &Utils::FilePath::fromString); - if (!in.atEnd()) // Qt Creator 4.3 and later - in >> m_exclusionFilters; - else - m_exclusionFilters.clear(); + QDataStream in(state); + in >> name; + in >> directories; + in >> m_filters; + in >> shortcut; + in >> defaultFilter; + in >> files; + m_files = Utils::transform(files, &Utils::FilePath::fromString); + if (!in.atEnd()) // Qt Creator 4.3 and later + in >> m_exclusionFilters; + else + m_exclusionFilters.clear(); - if (m_isCustomFilter) - m_directories = directories; - setDisplayName(name); - setShortcutString(shortcut); - setIncludedByDefault(defaultFilter); + if (m_isCustomFilter) + m_directories = directories; + setDisplayName(name); + setShortcutString(shortcut); + setIncludedByDefault(defaultFilter); - locker.unlock(); - updateFileIterator(); + locker.unlock(); + updateFileIterator(); + } else { + ILocatorFilter::restoreState(state); + } } bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) diff --git a/src/plugins/coreplugin/locator/directoryfilter.h b/src/plugins/coreplugin/locator/directoryfilter.h index 4b48aa636c5..c629722ac2a 100644 --- a/src/plugins/coreplugin/locator/directoryfilter.h +++ b/src/plugins/coreplugin/locator/directoryfilter.h @@ -47,7 +47,6 @@ class CORE_EXPORT DirectoryFilter : public BaseFileFilter public: DirectoryFilter(Utils::Id id); - QByteArray saveState() const override; void restoreState(const QByteArray &state) override; bool openConfigDialog(QWidget *parent, bool &needsRefresh) override; void refresh(QFutureInterface &future) override; @@ -60,7 +59,9 @@ public: void setFilters(const QStringList &filters); void setExclusionFilters(const QStringList &exclusionFilters); - using ILocatorFilter::setDisplayName; +protected: + void saveState(QJsonObject &object) const final; + void restoreState(const QJsonObject &object) final; private: void handleAddDirectory(); diff --git a/src/plugins/coreplugin/locator/executefilter.cpp b/src/plugins/coreplugin/locator/executefilter.cpp index b77712c5cc1..6110f13f713 100644 --- a/src/plugins/coreplugin/locator/executefilter.cpp +++ b/src/plugins/coreplugin/locator/executefilter.cpp @@ -38,9 +38,9 @@ ExecuteFilter::ExecuteFilter() { setId("Execute custom commands"); setDisplayName(tr("Execute Custom Commands")); - setShortcutString("!"); + setDefaultShortcutString("!"); setPriority(High); - setIncludedByDefault(false); + setDefaultIncludedByDefault(false); m_process = new Utils::QtcProcess(this); m_process->setEnvironment(Utils::Environment::systemEnvironment()); diff --git a/src/plugins/coreplugin/locator/externaltoolsfilter.cpp b/src/plugins/coreplugin/locator/externaltoolsfilter.cpp index 2c68454815d..da8887b1f45 100644 --- a/src/plugins/coreplugin/locator/externaltoolsfilter.cpp +++ b/src/plugins/coreplugin/locator/externaltoolsfilter.cpp @@ -37,7 +37,7 @@ ExternalToolsFilter::ExternalToolsFilter() { setId("Run external tool"); setDisplayName(tr("Run External Tool")); - setShortcutString("x"); + setDefaultShortcutString("x"); setPriority(Medium); } diff --git a/src/plugins/coreplugin/locator/filesystemfilter.cpp b/src/plugins/coreplugin/locator/filesystemfilter.cpp index f7d940a73fc..118ebb25325 100644 --- a/src/plugins/coreplugin/locator/filesystemfilter.cpp +++ b/src/plugins/coreplugin/locator/filesystemfilter.cpp @@ -38,6 +38,7 @@ #include #include +#include #include #include @@ -65,8 +66,8 @@ FileSystemFilter::FileSystemFilter() { setId("Files in file system"); setDisplayName(tr("Files in File System")); - setShortcutString("f"); - setIncludedByDefault(false); + setDefaultShortcutString("f"); + setDefaultIncludedByDefault(false); } void FileSystemFilter::prepareSearch(const QString &entry) @@ -235,28 +236,36 @@ bool FileSystemFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) return false; } -QByteArray FileSystemFilter::saveState() const +const char kIncludeHiddenKey[] = "includeHidden"; + +void FileSystemFilter::saveState(QJsonObject &object) const { - QByteArray value; - QDataStream out(&value, QIODevice::WriteOnly); - out << m_includeHidden; - out << shortcutString(); - out << isIncludedByDefault(); - return value; + if (m_includeHidden != kIncludeHiddenDefault) + object.insert(kIncludeHiddenKey, m_includeHidden); +} + +void FileSystemFilter::restoreState(const QJsonObject &object) +{ + m_currentIncludeHidden = object.value(kIncludeHiddenKey).toBool(kIncludeHiddenDefault); } void FileSystemFilter::restoreState(const QByteArray &state) { - QDataStream in(state); - in >> m_includeHidden; + if (isOldSetting(state)) { + // TODO read old settings, remove some time after Qt Creator 4.15 + QDataStream in(state); + in >> m_includeHidden; - // An attempt to prevent setting this on old configuration - if (!in.atEnd()) { - QString shortcut; - bool defaultFilter; - in >> shortcut; - in >> defaultFilter; - setShortcutString(shortcut); - setIncludedByDefault(defaultFilter); + // An attempt to prevent setting this on old configuration + if (!in.atEnd()) { + QString shortcut; + bool defaultFilter; + in >> shortcut; + in >> defaultFilter; + setShortcutString(shortcut); + setIncludedByDefault(defaultFilter); + } + } else { + ILocatorFilter::restoreState(state); } } diff --git a/src/plugins/coreplugin/locator/filesystemfilter.h b/src/plugins/coreplugin/locator/filesystemfilter.h index 0a4c8cec818..fb0bb3b2ea1 100644 --- a/src/plugins/coreplugin/locator/filesystemfilter.h +++ b/src/plugins/coreplugin/locator/filesystemfilter.h @@ -47,16 +47,20 @@ public: const QString &entry) override; void accept(LocatorFilterEntry selection, QString *newText, int *selectionStart, int *selectionLength) const override; - QByteArray saveState() const override; void restoreState(const QByteArray &state) override; bool openConfigDialog(QWidget *parent, bool &needsRefresh) override; void refresh(QFutureInterface &) override {} +protected: + void saveState(QJsonObject &object) const final; + void restoreState(const QJsonObject &object) final; + private: static MatchLevel matchLevelFor(const QRegularExpressionMatch &match, const QString &matchText); - bool m_includeHidden = true; - bool m_currentIncludeHidden = true; + static const bool kIncludeHiddenDefault = true; + bool m_includeHidden = kIncludeHiddenDefault; + bool m_currentIncludeHidden = kIncludeHiddenDefault; QString m_currentDocumentDirectory; }; diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.cpp b/src/plugins/coreplugin/locator/ilocatorfilter.cpp index ec064bba522..66a2b86e2cd 100644 --- a/src/plugins/coreplugin/locator/ilocatorfilter.cpp +++ b/src/plugins/coreplugin/locator/ilocatorfilter.cpp @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include #include #include @@ -117,32 +119,55 @@ void ILocatorFilter::prepareSearch(const QString &entry) } /*! - Sets the \a shortcut string that can be used to explicitly choose this - filter in the locator input field. Call from the constructor of subclasses - to set the default setting. + Sets the default \a shortcut string that can be used to explicitly choose + this filter in the locator input field. Call for example from the + constructor of subclasses. \sa shortcutString() */ +void ILocatorFilter::setDefaultShortcutString(const QString &shortcut) +{ + m_defaultShortcut = shortcut; + m_shortcut = shortcut; +} + +/*! + Sets the current shortcut string of the filter to \a shortcut. Use + setDefaultShortcutString() if you want to set the default shortcut string + instead. + + \sa setDefaultShortcutString() +*/ void ILocatorFilter::setShortcutString(const QString &shortcut) { m_shortcut = shortcut; } +const char kShortcutStringKey[] = "shortcut"; +const char kIncludedByDefaultKey[] = "includeByDefault"; + /*! Returns data that can be used to restore the settings for this filter (for example at startup). By default, adds the base settings (shortcut string, included by default) - with a data stream. + and calls saveState() with a JSON object where subclasses should write + their custom settings. \sa restoreState() */ QByteArray ILocatorFilter::saveState() const { - QByteArray value; - QDataStream out(&value, QIODevice::WriteOnly); - out << shortcutString(); - out << isIncludedByDefault(); - return value; + QJsonObject obj; + if (shortcutString() != m_defaultShortcut) + obj.insert(kShortcutStringKey, shortcutString()); + if (isIncludedByDefault() != m_defaultIncludedByDefault) + obj.insert(kIncludedByDefaultKey, isIncludedByDefault()); + saveState(obj); + if (obj.isEmpty()) + return {}; + QJsonDocument doc; + doc.setObject(obj); + return doc.toJson(QJsonDocument::Compact); } /*! @@ -153,15 +178,22 @@ QByteArray ILocatorFilter::saveState() const */ void ILocatorFilter::restoreState(const QByteArray &state) { - QString shortcut; - bool defaultFilter; + QJsonDocument doc = QJsonDocument::fromJson(state); + if (state.isEmpty() || doc.isObject()) { + const QJsonObject obj = doc.object(); + setShortcutString(obj.value(kShortcutStringKey).toString(m_defaultShortcut)); + setIncludedByDefault(obj.value(kIncludedByDefaultKey).toBool(m_defaultIncludedByDefault)); + restoreState(obj); + } else { + // TODO read old settings, remove some time after Qt Creator 4.15 + m_shortcut = m_defaultShortcut; + m_includedByDefault = m_defaultIncludedByDefault; - QDataStream in(state); - in >> shortcut; - in >> defaultFilter; - - setShortcutString(shortcut); - setIncludedByDefault(defaultFilter); + // TODO this reads legacy settings from Qt Creator < 4.15 + QDataStream in(state); + in >> m_shortcut; + in >> m_includedByDefault; + } } /*! @@ -281,13 +313,26 @@ bool ILocatorFilter::isIncludedByDefault() const } /*! - Sets whether using the shortcut string is required to use this filter - to \a includedByDefault. + Sets the default setting for whether using the shortcut string is required + to use this filter to \a includedByDefault. - Call from the constructor of subclasses to change the default. + Call for example from the constructor of subclasses. \sa isIncludedByDefault() */ +void ILocatorFilter::setDefaultIncludedByDefault(bool includedByDefault) +{ + m_defaultIncludedByDefault = includedByDefault; + m_includedByDefault = includedByDefault; +} + +/*! + Sets whether using the shortcut string is required to use this filter to + \a includedByDefault. Use setDefaultIncludedByDefault() if you want to + set the default value instead. + + \sa setDefaultIncludedByDefault() +*/ void ILocatorFilter::setIncludedByDefault(bool includedByDefault) { m_includedByDefault = includedByDefault; @@ -402,7 +447,8 @@ void ILocatorFilter::setPriority(Priority priority) } /*! - Sets the translated display name of this filter to \a displayString. + Sets the translated display name of this filter to \a + displayString. Subclasses must set the display name in their constructor. @@ -474,6 +520,44 @@ bool ILocatorFilter::openConfigDialog(QWidget *parent, QWidget *additionalWidget return accepted; } +/*! + Saves the filter settings and state to the JSON \a object. + + The default implementation does nothing. + + Implementations should write key-value pairs to the \a object for their + custom settings that changed from the default. Default values should + never be saved. +*/ +void ILocatorFilter::saveState(QJsonObject &object) const +{ + Q_UNUSED(object) +} + +/*! + Reads the filter settings and state from the JSON \a object + + The default implementation does nothing. + + Implementations should read their custom settings from the \a object, + resetting any missing setting to its default value. +*/ +void ILocatorFilter::restoreState(const QJsonObject &object) +{ + Q_UNUSED(object) +} + +/*! + Returns if \a state must be restored via pre-4.15 settings reading. +*/ +bool ILocatorFilter::isOldSetting(const QByteArray &state) +{ + if (state.isEmpty()) + return false; + const QJsonDocument doc = QJsonDocument::fromJson(state); + return !doc.isObject(); +} + /*! \fn QList Core::ILocatorFilter::matchesFor(QFutureInterface &future, const QString &entry) diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.h b/src/plugins/coreplugin/locator/ilocatorfilter.h index 5e09697162a..06decea1eab 100644 --- a/src/plugins/coreplugin/locator/ilocatorfilter.h +++ b/src/plugins/coreplugin/locator/ilocatorfilter.h @@ -125,10 +125,12 @@ public: Utils::Id actionId() const; QString displayName() const; + void setDisplayName(const QString &displayString); Priority priority() const; QString shortcutString() const; + void setDefaultShortcutString(const QString &shortcut); void setShortcutString(const QString &shortcut); virtual void prepareSearch(const QString &entry); @@ -147,6 +149,7 @@ public: bool isConfigurable() const; bool isIncludedByDefault() const; + void setDefaultIncludedByDefault(bool includedByDefault); void setIncludedByDefault(bool includedByDefault); bool isHidden() const; @@ -172,16 +175,22 @@ protected: void setHidden(bool hidden); void setId(Utils::Id id); void setPriority(Priority priority); - void setDisplayName(const QString &displayString); void setConfigurable(bool configurable); bool openConfigDialog(QWidget *parent, QWidget *additionalWidget); + virtual void saveState(QJsonObject &object) const; + virtual void restoreState(const QJsonObject &object); + + static bool isOldSetting(const QByteArray &state); + private: Utils::Id m_id; QString m_shortcut; Priority m_priority = Medium; QString m_displayName; - bool m_includedByDefault = false; + QString m_defaultShortcut; + bool m_defaultIncludedByDefault = false; + bool m_includedByDefault = m_defaultIncludedByDefault; bool m_hidden = false; bool m_enabled = true; bool m_isConfigurable = true; diff --git a/src/plugins/coreplugin/locator/javascriptfilter.cpp b/src/plugins/coreplugin/locator/javascriptfilter.cpp index 8600580e0cd..b187287630b 100644 --- a/src/plugins/coreplugin/locator/javascriptfilter.cpp +++ b/src/plugins/coreplugin/locator/javascriptfilter.cpp @@ -38,8 +38,8 @@ JavaScriptFilter::JavaScriptFilter() { setId("JavaScriptFilter"); setDisplayName(tr("Evaluate JavaScript")); - setIncludedByDefault(false); - setShortcutString("="); + setDefaultIncludedByDefault(false); + setDefaultShortcutString("="); m_abortTimer.setSingleShot(true); m_abortTimer.setInterval(1000); connect(&m_abortTimer, &QTimer::timeout, this, [this] { diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp index 53862f117e1..7bf290612e2 100644 --- a/src/plugins/coreplugin/locator/locator.cpp +++ b/src/plugins/coreplugin/locator/locator.cpp @@ -92,7 +92,7 @@ public: LocatorData::LocatorData() { - m_urlFilter.setShortcutString("r"); + m_urlFilter.setDefaultShortcutString("r"); m_urlFilter.addDefaultUrl("https://www.bing.com/search?q=%1"); m_urlFilter.addDefaultUrl("https://www.google.com/search?q=%1"); m_urlFilter.addDefaultUrl("https://search.yahoo.com/search?p=%1"); @@ -101,7 +101,7 @@ LocatorData::LocatorData() "http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=%1"); m_urlFilter.addDefaultUrl("https://en.wikipedia.org/w/index.php?search=%1"); - m_bugFilter.setShortcutString("bug"); + m_bugFilter.setDefaultShortcutString("bug"); m_bugFilter.addDefaultUrl("https://bugreports.qt.io/secure/QuickSearch.jspa?searchString=%1"); } @@ -172,7 +172,11 @@ bool Locator::delayedInitialize() void Locator::loadSettings() { SettingsDatabase *settings = ICore::settingsDatabase(); - settings->beginGroup("QuickOpen"); + // check if we have to read old settings + // TOOD remove a few versions after 4.15 + const QString settingsGroup = settings->contains("Locator") ? QString("Locator") + : QString("QuickOpen"); + settings->beginGroup(settingsGroup); m_refreshTimer.setInterval(settings->value("RefreshInterval", 60).toInt() * 60000); for (ILocatorFilter *filter : qAsConst(m_filters)) { @@ -297,12 +301,14 @@ void Locator::saveSettings() const SettingsDatabase *s = ICore::settingsDatabase(); s->beginTransaction(); - s->beginGroup("QuickOpen"); + s->beginGroup("Locator"); s->remove(QString()); s->setValue("RefreshInterval", refreshInterval()); for (ILocatorFilter *filter : m_filters) { - if (!m_customFilters.contains(filter)) - s->setValue(filter->id().toString(), filter->saveState()); + if (!m_customFilters.contains(filter)) { + const QByteArray state = filter->saveState(); + s->setValueWithDefault(filter->id().toString(), state); + } } s->beginGroup("CustomFilters"); int i = 0; @@ -311,7 +317,8 @@ void Locator::saveSettings() const Constants::CUSTOM_DIRECTORY_FILTER_BASEID) ? kDirectoryFilterPrefix : kUrlFilterPrefix; - s->setValue(prefix + QString::number(i), filter->saveState()); + const QByteArray state = filter->saveState(); + s->setValueWithDefault(prefix + QString::number(i), state); ++i; } s->endGroup(); diff --git a/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp b/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp index b229327aadb..9b95274ff38 100644 --- a/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp +++ b/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp @@ -41,7 +41,7 @@ LocatorFiltersFilter::LocatorFiltersFilter(): { setId("FiltersFilter"); setDisplayName(tr("Available filters")); - setIncludedByDefault(true); + setDefaultIncludedByDefault(true); setHidden(true); setPriority(Highest); setConfigurable(false); diff --git a/src/plugins/coreplugin/locator/opendocumentsfilter.cpp b/src/plugins/coreplugin/locator/opendocumentsfilter.cpp index b58293fae8f..2a10fcce006 100644 --- a/src/plugins/coreplugin/locator/opendocumentsfilter.cpp +++ b/src/plugins/coreplugin/locator/opendocumentsfilter.cpp @@ -42,9 +42,9 @@ OpenDocumentsFilter::OpenDocumentsFilter() { setId("Open documents"); setDisplayName(tr("Open Documents")); - setShortcutString("o"); + setDefaultShortcutString("o"); setPriority(High); - setIncludedByDefault(true); + setDefaultIncludedByDefault(true); connect(DocumentModel::model(), &QAbstractItemModel::dataChanged, this, &OpenDocumentsFilter::refreshInternally); diff --git a/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp b/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp index 4306e9cd336..494a9a8583b 100644 --- a/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp +++ b/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp @@ -205,11 +205,6 @@ static QString defaultCaseSensitiveArguments() return "-l 10000 -r \"%{Query:Regex}\""; } -const char kShortcutStringDefault[] = "md"; -const bool kIncludedByDefaultDefault = false; - -const char kShortcutStringKey[] = "shortcut"; -const char kIncludedByDefaultKey[] = "includeByDefault"; const char kCommandKey[] = "command"; const char kArgumentsKey[] = "arguments"; const char kCaseSensitiveKey[] = "caseSensitive"; @@ -244,6 +239,8 @@ static MacroExpander *createMacroExpander(const QString &query) SpotlightLocatorFilter::SpotlightLocatorFilter() { setId("SpotlightFileNamesLocatorFilter"); + setDefaultShortcutString("md"); + setDefaultIncludedByDefault(false); setDisplayName(tr("File Name Index")); setConfigurable(true); reset(); @@ -305,45 +302,25 @@ bool SpotlightLocatorFilter::openConfigDialog(QWidget *parent, bool &needsRefres return accepted; } -QByteArray SpotlightLocatorFilter::saveState() const +void SpotlightLocatorFilter::saveState(QJsonObject &obj) const { - QJsonObject obj; - if (shortcutString() != kShortcutStringDefault) - obj.insert(kShortcutStringKey, shortcutString()); - if (isIncludedByDefault() != kIncludedByDefaultDefault) - obj.insert(kIncludedByDefaultKey, isIncludedByDefault()); if (m_command != defaultCommand()) obj.insert(kCommandKey, m_command); if (m_arguments != defaultArguments()) obj.insert(kArgumentsKey, m_arguments); if (m_caseSensitiveArguments != defaultCaseSensitiveArguments()) obj.insert(kCaseSensitiveKey, m_caseSensitiveArguments); - QJsonDocument doc; - doc.setObject(obj); - return doc.toJson(QJsonDocument::Compact); } -void SpotlightLocatorFilter::restoreState(const QByteArray &state) +void SpotlightLocatorFilter::restoreState(const QJsonObject &obj) { - QJsonDocument doc = QJsonDocument::fromJson(state); - if (doc.isNull() || !doc.isObject()) { - reset(); - ILocatorFilter::restoreState(state); // legacy settings from Qt Creator < 4.15 - } else { - const QJsonObject obj = doc.object(); - setShortcutString(obj.value(kShortcutStringKey).toString(kShortcutStringDefault)); - setIncludedByDefault(obj.value(kIncludedByDefaultKey).toBool(kIncludedByDefaultDefault)); - m_command = obj.value(kCommandKey).toString(defaultCommand()); - m_arguments = obj.value(kArgumentsKey).toString(defaultArguments()); - m_caseSensitiveArguments = obj.value(kCaseSensitiveKey) - .toString(defaultCaseSensitiveArguments()); - } + m_command = obj.value(kCommandKey).toString(defaultCommand()); + m_arguments = obj.value(kArgumentsKey).toString(defaultArguments()); + m_caseSensitiveArguments = obj.value(kCaseSensitiveKey).toString(defaultCaseSensitiveArguments()); } void SpotlightLocatorFilter::reset() { - setShortcutString(kShortcutStringDefault); - setIncludedByDefault(kIncludedByDefaultDefault); m_command = defaultCommand(); m_arguments = defaultArguments(); m_caseSensitiveArguments = defaultCaseSensitiveArguments(); diff --git a/src/plugins/coreplugin/locator/spotlightlocatorfilter.h b/src/plugins/coreplugin/locator/spotlightlocatorfilter.h index 874f54af7f2..b96e0cae8c5 100644 --- a/src/plugins/coreplugin/locator/spotlightlocatorfilter.h +++ b/src/plugins/coreplugin/locator/spotlightlocatorfilter.h @@ -44,8 +44,9 @@ public: using ILocatorFilter::openConfigDialog; bool openConfigDialog(QWidget *parent, bool &needsRefresh) final; - QByteArray saveState() const final; - void restoreState(const QByteArray &state) final; +protected: + void saveState(QJsonObject &obj) const final; + void restoreState(const QJsonObject &obj) final; private: void reset(); diff --git a/src/plugins/coreplugin/locator/urllocatorfilter.cpp b/src/plugins/coreplugin/locator/urllocatorfilter.cpp index 8041b476c25..2e3b8628941 100644 --- a/src/plugins/coreplugin/locator/urllocatorfilter.cpp +++ b/src/plugins/coreplugin/locator/urllocatorfilter.cpp @@ -25,9 +25,12 @@ #include "urllocatorfilter.h" +#include #include #include +#include +#include #include #include @@ -136,8 +139,9 @@ UrlLocatorFilter::UrlLocatorFilter(Id id) UrlLocatorFilter::UrlLocatorFilter(const QString &displayName, Id id) { setId(id); + m_defaultDisplayName = displayName; setDisplayName(displayName); - setIncludedByDefault(false); + setDefaultIncludedByDefault(false); } UrlLocatorFilter::~UrlLocatorFilter() = default; @@ -177,37 +181,51 @@ void UrlLocatorFilter::refresh(QFutureInterface &future) // Nothing to refresh } -QByteArray UrlLocatorFilter::saveState() const +const char kDisplayNameKey[] = "displayName"; +const char kRemoteUrlsKey[] = "remoteUrls"; + +void UrlLocatorFilter::saveState(QJsonObject &object) const { - QByteArray value; - QDataStream out(&value, QIODevice::WriteOnly); - out << m_remoteUrls.join('^'); - out << shortcutString(); - out << isIncludedByDefault(); - out << displayName(); - return value; + if (displayName() != m_defaultDisplayName) + object.insert(kDisplayNameKey, displayName()); + if (m_remoteUrls != m_defaultUrls) + object.insert(kRemoteUrlsKey, QJsonArray::fromStringList(m_remoteUrls)); +} + +void UrlLocatorFilter::restoreState(const QJsonObject &object) +{ + setDisplayName(object.value(kDisplayNameKey).toString(m_defaultDisplayName)); + m_remoteUrls = Utils::transform(object.value(kRemoteUrlsKey) + .toArray(QJsonArray::fromStringList(m_defaultUrls)) + .toVariantList(), + &QVariant::toString); } void UrlLocatorFilter::restoreState(const QByteArray &state) { - QDataStream in(state); + if (isOldSetting(state)) { + // TODO read old settings, remove some time after Qt Creator 4.15 + QDataStream in(state); - QString value; - in >> value; - m_remoteUrls = value.split('^', Qt::SkipEmptyParts); + QString value; + in >> value; + m_remoteUrls = value.split('^', Qt::SkipEmptyParts); - QString shortcut; - in >> shortcut; - setShortcutString(shortcut); + QString shortcut; + in >> shortcut; + setShortcutString(shortcut); - bool defaultFilter; - in >> defaultFilter; - setIncludedByDefault(defaultFilter); + bool defaultFilter; + in >> defaultFilter; + setIncludedByDefault(defaultFilter); - if (!in.atEnd()) { - QString name; - in >> name; - setDisplayName(name); + if (!in.atEnd()) { + QString name; + in >> name; + setDisplayName(name); + } + } else { + ILocatorFilter::restoreState(state); } } @@ -232,6 +250,7 @@ bool UrlLocatorFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) void UrlLocatorFilter::addDefaultUrl(const QString &urlTemplate) { m_remoteUrls.append(urlTemplate); + m_defaultUrls.append(urlTemplate); } QStringList UrlLocatorFilter::remoteUrls() const diff --git a/src/plugins/coreplugin/locator/urllocatorfilter.h b/src/plugins/coreplugin/locator/urllocatorfilter.h index 21c5f674cfb..3b7cdf4f413 100644 --- a/src/plugins/coreplugin/locator/urllocatorfilter.h +++ b/src/plugins/coreplugin/locator/urllocatorfilter.h @@ -49,7 +49,6 @@ public: void accept(Core::LocatorFilterEntry selection, QString *newText, int *selectionStart, int *selectionLength) const override; void refresh(QFutureInterface &future) override; - QByteArray saveState() const override; void restoreState(const QByteArray &state) override; bool openConfigDialog(QWidget *parent, bool &needsRefresh) override; @@ -59,9 +58,13 @@ public: void setIsCustomFilter(bool value); bool isCustomFilter() const; - using ILocatorFilter::setDisplayName; +protected: + void saveState(QJsonObject &object) const final; + void restoreState(const QJsonObject &object) final; private: + QString m_defaultDisplayName; + QStringList m_defaultUrls; QStringList m_remoteUrls; bool m_isCustomFilter = false; mutable QMutex m_mutex; diff --git a/src/plugins/coreplugin/menubarfilter.cpp b/src/plugins/coreplugin/menubarfilter.cpp index 51de8809eec..524ad4d07b8 100644 --- a/src/plugins/coreplugin/menubarfilter.cpp +++ b/src/plugins/coreplugin/menubarfilter.cpp @@ -54,7 +54,7 @@ MenuBarFilter::MenuBarFilter() { setId("Actions from the menu"); setDisplayName(tr("Actions from the Menu")); - setShortcutString("t"); + setDefaultShortcutString("t"); connect(ICore::instance(), &ICore::contextAboutToChange, this, [this] { if (LocatorManager::locatorHasFocus()) updateEnabledActionCache(); diff --git a/src/plugins/coreplugin/settingsdatabase.cpp b/src/plugins/coreplugin/settingsdatabase.cpp index dd00ca1c9f6..a7e9a1ca167 100644 --- a/src/plugins/coreplugin/settingsdatabase.cpp +++ b/src/plugins/coreplugin/settingsdatabase.cpp @@ -195,7 +195,21 @@ QVariant SettingsDatabase::value(const QString &key, const QVariant &defaultValu bool SettingsDatabase::contains(const QString &key) const { - return d->m_settings.contains(d->effectiveKey(key)); + // check exact key + // this already caches the value + if (value(key).isValid()) + return true; + // check for group + if (d->m_db.isOpen()) { + const QString glob = d->effectiveKey(key) + "/?*"; + QSqlQuery query(d->m_db); + query.prepare( + QLatin1String("SELECT value FROM settings WHERE key GLOB '%1' LIMIT 1").arg(glob)); + query.exec(); + if (query.next()) + return true; + } + return false; } void SettingsDatabase::remove(const QString &key) diff --git a/src/plugins/coreplugin/settingsdatabase.h b/src/plugins/coreplugin/settingsdatabase.h index 5879de22455..833355ef827 100644 --- a/src/plugins/coreplugin/settingsdatabase.h +++ b/src/plugins/coreplugin/settingsdatabase.h @@ -44,6 +44,12 @@ public: void setValue(const QString &key, const QVariant &value); QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const; + + template + void setValueWithDefault(const QString &key, const T &val, const T &defaultValue); + template + void setValueWithDefault(const QString &key, const T &val); + bool contains(const QString &key) const; void remove(const QString &key); @@ -61,4 +67,22 @@ private: Internal::SettingsDatabasePrivate *d; }; +template +void SettingsDatabase::setValueWithDefault(const QString &key, const T &val, const T &defaultValue) +{ + if (val == defaultValue) + remove(key); + else + setValue(key, QVariant::fromValue(val)); +} + +template +void SettingsDatabase::setValueWithDefault(const QString &key, const T &val) +{ + if (val == T()) + remove(key); + else + setValue(key, QVariant::fromValue(val)); +} + } // namespace Core diff --git a/src/plugins/cpptools/cppclassesfilter.cpp b/src/plugins/cpptools/cppclassesfilter.cpp index efa6fec9658..24182259fc2 100644 --- a/src/plugins/cpptools/cppclassesfilter.cpp +++ b/src/plugins/cpptools/cppclassesfilter.cpp @@ -35,8 +35,8 @@ CppClassesFilter::CppClassesFilter(CppLocatorData *locatorData) { setId(Constants::CLASSES_FILTER_ID); setDisplayName(Constants::CLASSES_FILTER_DISPLAY_NAME); - setShortcutString(QLatin1String("c")); - setIncludedByDefault(false); + setDefaultShortcutString("c"); + setDefaultIncludedByDefault(false); } CppClassesFilter::~CppClassesFilter() = default; diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp index fdd49205040..388aca6c701 100644 --- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp @@ -42,9 +42,9 @@ CppCurrentDocumentFilter::CppCurrentDocumentFilter(CppTools::CppModelManager *ma { setId(Constants::CURRENT_DOCUMENT_FILTER_ID); setDisplayName(Constants::CURRENT_DOCUMENT_FILTER_DISPLAY_NAME); - setShortcutString("."); + setDefaultShortcutString("."); setPriority(High); - setIncludedByDefault(false); + setDefaultIncludedByDefault(false); search.setSymbolsToSearchFor(SymbolSearcher::Declarations | SymbolSearcher::Enums | diff --git a/src/plugins/cpptools/cppfunctionsfilter.cpp b/src/plugins/cpptools/cppfunctionsfilter.cpp index 597e0f4d035..8b83508e421 100644 --- a/src/plugins/cpptools/cppfunctionsfilter.cpp +++ b/src/plugins/cpptools/cppfunctionsfilter.cpp @@ -37,8 +37,8 @@ CppFunctionsFilter::CppFunctionsFilter(CppLocatorData *locatorData) { setId(Constants::FUNCTIONS_FILTER_ID); setDisplayName(Constants::FUNCTIONS_FILTER_DISPLAY_NAME); - setShortcutString("m"); - setIncludedByDefault(false); + setDefaultShortcutString("m"); + setDefaultIncludedByDefault(false); } CppFunctionsFilter::~CppFunctionsFilter() = default; diff --git a/src/plugins/cpptools/cppincludesfilter.cpp b/src/plugins/cpptools/cppincludesfilter.cpp index 0856d268641..32eef13349d 100644 --- a/src/plugins/cpptools/cppincludesfilter.cpp +++ b/src/plugins/cpptools/cppincludesfilter.cpp @@ -121,8 +121,8 @@ CppIncludesFilter::CppIncludesFilter() { setId(Constants::INCLUDES_FILTER_ID); setDisplayName(Constants::INCLUDES_FILTER_DISPLAY_NAME); - setShortcutString("ai"); - setIncludedByDefault(true); + setDefaultShortcutString("ai"); + setDefaultIncludedByDefault(true); setPriority(ILocatorFilter::Low); connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::fileListChanged, diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index 1705634cad0..2bca12c5556 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -43,8 +43,8 @@ CppLocatorFilter::CppLocatorFilter(CppLocatorData *locatorData) { setId(Constants::LOCATOR_FILTER_ID); setDisplayName(Constants::LOCATOR_FILTER_DISPLAY_NAME); - setShortcutString(":"); - setIncludedByDefault(false); + setDefaultShortcutString(":"); + setDefaultIncludedByDefault(false); } CppLocatorFilter::~CppLocatorFilter() = default; diff --git a/src/plugins/help/helpindexfilter.cpp b/src/plugins/help/helpindexfilter.cpp index 4d0a89a08f9..ee810c866e7 100644 --- a/src/plugins/help/helpindexfilter.cpp +++ b/src/plugins/help/helpindexfilter.cpp @@ -62,8 +62,8 @@ HelpIndexFilter::HelpIndexFilter() { setId("HelpIndexFilter"); setDisplayName(tr("Help Index")); - setIncludedByDefault(false); - setShortcutString("?"); + setDefaultIncludedByDefault(false); + setDefaultShortcutString("?"); m_icon = Utils::Icons::BOOKMARK.icon(); connect(Core::HelpManager::Signals::instance(), &Core::HelpManager::Signals::setupFinished, diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp index e51aed5aa74..45822fa272a 100644 --- a/src/plugins/languageclient/locatorfilter.cpp +++ b/src/plugins/languageclient/locatorfilter.cpp @@ -47,8 +47,8 @@ DocumentLocatorFilter::DocumentLocatorFilter() { setId(Constants::LANGUAGECLIENT_DOCUMENT_FILTER_ID); setDisplayName(Constants::LANGUAGECLIENT_DOCUMENT_FILTER_DISPLAY_NAME); - setShortcutString("."); - setIncludedByDefault(false); + setDefaultShortcutString("."); + setDefaultIncludedByDefault(false); setPriority(ILocatorFilter::Low); connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, this, &DocumentLocatorFilter::updateCurrentClient); @@ -208,8 +208,8 @@ WorkspaceLocatorFilter::WorkspaceLocatorFilter(const QVector &filter { setId(Constants::LANGUAGECLIENT_WORKSPACE_FILTER_ID); setDisplayName(Constants::LANGUAGECLIENT_WORKSPACE_FILTER_DISPLAY_NAME); - setShortcutString(":"); - setIncludedByDefault(false); + setDefaultShortcutString(":"); + setDefaultIncludedByDefault(false); setPriority(ILocatorFilter::Low); } @@ -298,7 +298,7 @@ WorkspaceClassLocatorFilter::WorkspaceClassLocatorFilter() { setId(Constants::LANGUAGECLIENT_WORKSPACE_CLASS_FILTER_ID); setDisplayName(Constants::LANGUAGECLIENT_WORKSPACE_CLASS_FILTER_DISPLAY_NAME); - setShortcutString("c"); + setDefaultShortcutString("c"); } WorkspaceMethodLocatorFilter::WorkspaceMethodLocatorFilter() @@ -306,7 +306,7 @@ WorkspaceMethodLocatorFilter::WorkspaceMethodLocatorFilter() { setId(Constants::LANGUAGECLIENT_WORKSPACE_METHOD_FILTER_ID); setDisplayName(Constants::LANGUAGECLIENT_WORKSPACE_METHOD_FILTER_DISPLAY_NAME); - setShortcutString("m"); + setDefaultShortcutString("m"); } } // namespace LanguageClient diff --git a/src/plugins/macros/macrolocatorfilter.cpp b/src/plugins/macros/macrolocatorfilter.cpp index 7e8bed50407..73350757922 100644 --- a/src/plugins/macros/macrolocatorfilter.cpp +++ b/src/plugins/macros/macrolocatorfilter.cpp @@ -42,7 +42,7 @@ MacroLocatorFilter::MacroLocatorFilter() { setId("Macros"); setDisplayName(tr("Text Editing Macros")); - setShortcutString("rm"); + setDefaultShortcutString("rm"); } MacroLocatorFilter::~MacroLocatorFilter() = default; diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp index c045dcfbe02..a8ffa7ba7cb 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.cpp +++ b/src/plugins/projectexplorer/allprojectsfilter.cpp @@ -40,8 +40,8 @@ AllProjectsFilter::AllProjectsFilter() { setId("Files in any project"); setDisplayName(tr("Files in Any Project")); - setShortcutString(QString(QLatin1Char('a'))); - setIncludedByDefault(true); + setDefaultShortcutString("a"); + setDefaultIncludedByDefault(true); connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::fileListChanged, this, &AllProjectsFilter::markFilesAsOutOfDate); diff --git a/src/plugins/projectexplorer/currentprojectfilter.cpp b/src/plugins/projectexplorer/currentprojectfilter.cpp index b077a035d13..14d20a587e3 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.cpp +++ b/src/plugins/projectexplorer/currentprojectfilter.cpp @@ -35,12 +35,13 @@ using namespace Core; using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; -CurrentProjectFilter::CurrentProjectFilter() : BaseFileFilter() +CurrentProjectFilter::CurrentProjectFilter() + : BaseFileFilter() { setId("Files in current project"); setDisplayName(tr("Files in Current Project")); - setShortcutString(QString(QLatin1Char('p'))); - setIncludedByDefault(false); + setDefaultShortcutString("p"); + setDefaultIncludedByDefault(false); connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged, this, &CurrentProjectFilter::currentProjectChanged); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 1bd863b26a2..5520137cb45 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2798,8 +2798,9 @@ ProjectExplorerPluginPrivate::ProjectExplorerPluginPrivate() : m_allProjectDirectoriesFilter("Files in All Project Directories") { m_allProjectDirectoriesFilter.setDisplayName(m_allProjectDirectoriesFilter.id().toString()); - m_allProjectDirectoriesFilter.setShortcutString("a"); // shared with "Files in Any Project" - m_allProjectDirectoriesFilter.setIncludedByDefault(false); // but not included in default + // shared with "Files in Any Project": + m_allProjectDirectoriesFilter.setDefaultShortcutString("a"); + m_allProjectDirectoriesFilter.setDefaultIncludedByDefault(false); // but not included in default m_allProjectDirectoriesFilter.setFilters({}); m_allProjectDirectoriesFilter.setIsCustomFilter(false); } diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.cpp b/src/plugins/qmljstools/qmljsfunctionfilter.cpp index 715347ebf34..869401a571f 100644 --- a/src/plugins/qmljstools/qmljsfunctionfilter.cpp +++ b/src/plugins/qmljstools/qmljsfunctionfilter.cpp @@ -44,8 +44,8 @@ FunctionFilter::FunctionFilter(LocatorData *data, QObject *parent) { setId("Functions"); setDisplayName(tr("QML Functions")); - setShortcutString("m"); - setIncludedByDefault(false); + setDefaultShortcutString("m"); + setDefaultIncludedByDefault(false); } FunctionFilter::~FunctionFilter() = default; diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp index 23ebf25e72e..dc1f6298c2d 100644 --- a/src/plugins/texteditor/linenumberfilter.cpp +++ b/src/plugins/texteditor/linenumberfilter.cpp @@ -49,8 +49,8 @@ LineNumberFilter::LineNumberFilter(QObject *parent) setId("Line in current document"); setDisplayName(tr("Line in Current Document")); setPriority(High); - setShortcutString("l"); - setIncludedByDefault(true); + setDefaultShortcutString("l"); + setDefaultIncludedByDefault(true); } void LineNumberFilter::prepareSearch(const QString &entry)