Locator: Fix "Files in All Project Directories" filter

That filter (by default included with 'a') could end up showing files
from projects that were no longer open. In some situations the
directories for this filter could be saved in the settings even though
they are supposed to be automatically managed when opening and closing
projects. It could happend that they never were removed again, for
example after saving the locator settings via apply in the options
dialog, and then killing Qt Creator.

Simply never save or restore which directories the filter handles, and
the file cache, by overriding the save/restoreState methods.

Change-Id: I2912d64443b5e5ec5a21e0df61d14ffda799a0e7
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Eike Ziller
2021-09-23 13:18:57 +02:00
parent b10641caa2
commit 1b918c95d4
2 changed files with 45 additions and 10 deletions

View File

@@ -60,8 +60,8 @@ public:
void setExclusionFilters(const QStringList &exclusionFilters); void setExclusionFilters(const QStringList &exclusionFilters);
protected: protected:
void saveState(QJsonObject &object) const final; void saveState(QJsonObject &object) const override;
void restoreState(const QJsonObject &object) final; void restoreState(const QJsonObject &object) override;
private: private:
void handleAddDirectory(); void handleAddDirectory();

View File

@@ -154,6 +154,7 @@
#include <QFileDialog> #include <QFileDialog>
#include <QFileInfo> #include <QFileInfo>
#include <QInputDialog> #include <QInputDialog>
#include <QJsonObject>
#include <QMenu> #include <QMenu>
#include <QMessageBox> #include <QMessageBox>
#include <QPair> #include <QPair>
@@ -396,6 +397,15 @@ public:
} }
}; };
class AllProjectFilesFilter : public DirectoryFilter
{
public:
AllProjectFilesFilter();
protected:
void saveState(QJsonObject &object) const override;
void restoreState(const QJsonObject &object) override;
};
class ProjectExplorerPluginPrivate : public QObject class ProjectExplorerPluginPrivate : public QObject
{ {
@@ -626,7 +636,7 @@ public:
AllProjectsFilter m_allProjectsFilter; AllProjectsFilter m_allProjectsFilter;
CurrentProjectFilter m_currentProjectFilter; CurrentProjectFilter m_currentProjectFilter;
DirectoryFilter m_allProjectDirectoriesFilter; AllProjectFilesFilter m_allProjectDirectoriesFilter;
ProcessStepFactory m_processStepFactory; ProcessStepFactory m_processStepFactory;
@@ -2848,14 +2858,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles()
// because someone delete all build configurations // because someone delete all build configurations
ProjectExplorerPluginPrivate::ProjectExplorerPluginPrivate() ProjectExplorerPluginPrivate::ProjectExplorerPluginPrivate()
: m_allProjectDirectoriesFilter("Files in All Project Directories")
{ {
m_allProjectDirectoriesFilter.setDisplayName(m_allProjectDirectoriesFilter.id().toString());
// 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);
} }
void ProjectExplorerPluginPrivate::runProjectContextMenu() void ProjectExplorerPluginPrivate::runProjectContextMenu()
@@ -4163,4 +4166,36 @@ bool ProjectManager::canOpenProjectForMimeType(const MimeType &mt)
return false; return false;
} }
AllProjectFilesFilter::AllProjectFilesFilter()
: DirectoryFilter("Files in All Project Directories")
{
setDisplayName(id().toString());
// shared with "Files in Any Project":
setDefaultShortcutString("a");
setDefaultIncludedByDefault(false); // but not included in default
setFilters({});
setIsCustomFilter(false);
}
const char kDirectoriesKey[] = "directories";
const char kFilesKey[] = "files";
void AllProjectFilesFilter::saveState(QJsonObject &object) const
{
DirectoryFilter::saveState(object);
// do not save the directories, they are automatically managed
object.remove(kDirectoriesKey);
object.remove(kFilesKey);
}
void AllProjectFilesFilter::restoreState(const QJsonObject &object)
{
// do not restore the directories (from saved settings from Qt Creator <= 5,
// they are automatically managed
QJsonObject withoutDirectories = object;
withoutDirectories.remove(kDirectoriesKey);
withoutDirectories.remove(kFilesKey);
DirectoryFilter::restoreState(withoutDirectories);
}
} // namespace ProjectExplorer } // namespace ProjectExplorer