forked from qt-creator/qt-creator
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:
@@ -60,8 +60,8 @@ public:
|
||||
void setExclusionFilters(const QStringList &exclusionFilters);
|
||||
|
||||
protected:
|
||||
void saveState(QJsonObject &object) const final;
|
||||
void restoreState(const QJsonObject &object) final;
|
||||
void saveState(QJsonObject &object) const override;
|
||||
void restoreState(const QJsonObject &object) override;
|
||||
|
||||
private:
|
||||
void handleAddDirectory();
|
||||
|
@@ -154,6 +154,7 @@
|
||||
#include <QFileDialog>
|
||||
#include <QFileInfo>
|
||||
#include <QInputDialog>
|
||||
#include <QJsonObject>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
#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
|
||||
{
|
||||
@@ -626,7 +636,7 @@ public:
|
||||
|
||||
AllProjectsFilter m_allProjectsFilter;
|
||||
CurrentProjectFilter m_currentProjectFilter;
|
||||
DirectoryFilter m_allProjectDirectoriesFilter;
|
||||
AllProjectFilesFilter m_allProjectDirectoriesFilter;
|
||||
|
||||
ProcessStepFactory m_processStepFactory;
|
||||
|
||||
@@ -2848,14 +2858,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles()
|
||||
// because someone delete all build configurations
|
||||
|
||||
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()
|
||||
@@ -4163,4 +4166,36 @@ bool ProjectManager::canOpenProjectForMimeType(const MimeType &mt)
|
||||
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
|
||||
|
Reference in New Issue
Block a user