diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp index 127c969c7dfc5243751bac0a9acb50180c05de6c..d5cdcc21e60375c84415d1a74b88e52ae553a722 100644 --- a/src/plugins/coreplugin/filemanager.cpp +++ b/src/plugins/coreplugin/filemanager.cpp @@ -159,25 +159,7 @@ FileManager::FileManager(QMainWindow *mw) connect(core, SIGNAL(contextChanged(Core::IContext*,Core::Context)), this, SLOT(syncWithEditor(Core::IContext*))); - const QSettings *s = core->settings(); - d->m_recentFiles = s->value(QLatin1String(settingsGroupC) + QLatin1Char('/') + QLatin1String(filesKeyC), QStringList()).toStringList(); - for (QStringList::iterator it = d->m_recentFiles.begin(); it != d->m_recentFiles.end(); ) { - if (QFileInfo(*it).isFile()) { - ++it; - } else { - it = d->m_recentFiles.erase(it); - } - } - const QString directoryGroup = QLatin1String(directoryGroupC) + QLatin1Char('/'); - const QString settingsProjectDir = s->value(directoryGroup + QLatin1String(projectDirectoryKeyC), - QString()).toString(); - if (!settingsProjectDir.isEmpty() && QFileInfo(settingsProjectDir).isDir()) { - d->m_projectsDirectory = settingsProjectDir; - } else { - d->m_projectsDirectory = Utils::PathChooser::homePath(); - } - d->m_useProjectsDirectory = s->value(directoryGroup + QLatin1String(useProjectDirectoryKeyC), - d->m_useProjectsDirectory).toBool(); + readSettings(); } FileManager::~FileManager() @@ -994,11 +976,16 @@ void FileManager::addToRecentFiles(const QString &fileName) { if (fileName.isEmpty()) return; - QString prettyFileName(QDir::toNativeSeparators(fileName)); - d->m_recentFiles.removeAll(prettyFileName); + QString unifiedForm(fixFileName(fileName)); + QMutableStringListIterator it(d->m_recentFiles); + while (it.hasNext()) { + QString recentUnifiedForm(fixFileName(it.next())); + if (unifiedForm == recentUnifiedForm) + it.remove(); + } if (d->m_recentFiles.count() > d->m_maxRecentFiles) d->m_recentFiles.removeLast(); - d->m_recentFiles.prepend(prettyFileName); + d->m_recentFiles.prepend(fileName); } /*! @@ -1011,7 +998,7 @@ QStringList FileManager::recentFiles() const return d->m_recentFiles; } -void FileManager::saveRecentFiles() +void FileManager::saveSettings() { QSettings *s = Core::ICore::instance()->settings(); s->beginGroup(QLatin1String(settingsGroupC)); @@ -1023,6 +1010,29 @@ void FileManager::saveRecentFiles() s->endGroup(); } +void FileManager::readSettings() +{ + const QSettings *s = Core::ICore::instance()->settings(); + d->m_recentFiles.clear(); + QStringList recentFiles = s->value(QLatin1String(settingsGroupC) + QLatin1Char('/') + QLatin1String(filesKeyC), QStringList()).toStringList(); + // clean non-existing files + foreach (const QString &file, recentFiles) { + if (QFileInfo(file).isFile()) + d->m_recentFiles.append(QDir::fromNativeSeparators(file)); // from native to guard against old settings + } + + const QString directoryGroup = QLatin1String(directoryGroupC) + QLatin1Char('/'); + const QString settingsProjectDir = s->value(directoryGroup + QLatin1String(projectDirectoryKeyC), + QString()).toString(); + if (!settingsProjectDir.isEmpty() && QFileInfo(settingsProjectDir).isDir()) { + d->m_projectsDirectory = settingsProjectDir; + } else { + d->m_projectsDirectory = Utils::PathChooser::homePath(); + } + d->m_useProjectsDirectory = s->value(directoryGroup + QLatin1String(useProjectDirectoryKeyC), + d->m_useProjectsDirectory).toBool(); +} + /*! The current file is e.g. the file currently opened when an editor is active, diff --git a/src/plugins/coreplugin/filemanager.h b/src/plugins/coreplugin/filemanager.h index 461577197a70e98bbe6abf454c362d8d8ff391d3..4df823ad5ba294a5f9364755c251c145ce09233f 100644 --- a/src/plugins/coreplugin/filemanager.h +++ b/src/plugins/coreplugin/filemanager.h @@ -74,8 +74,7 @@ public: // recent files void addToRecentFiles(const QString &fileName); QStringList recentFiles() const; - void saveRecentFiles(); - + void saveSettings(); // current file void setCurrentFile(const QString &filePath); @@ -133,6 +132,7 @@ private slots: void syncWithEditor(Core::IContext *context); private: + void readSettings(); void dump(); void addFileInfo(IFile *file); void removeFileInfo(IFile *file); diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 3737fb05fc8df06108568414249d3cee131bdfcf..b84eeefba1cce870e89686cb9ed12d895e871e6f 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -82,6 +82,7 @@ #include <QtCore/QTimer> #include <QtCore/QtPlugin> #include <QtCore/QUrl> +#include <QtCore/QDir> #include <QtGui/QApplication> #include <QtGui/QCloseEvent> @@ -1208,7 +1209,7 @@ void MainWindow::writeSettings() m_settings->endGroup(); - m_fileManager->saveRecentFiles(); + m_fileManager->saveSettings(); m_actionManager->saveSettings(m_settings); m_editorManager->saveSettings(); m_navigationWidget->saveSettings(m_settings); @@ -1271,7 +1272,7 @@ void MainWindow::aboutToShowRecentFiles() foreach (const QString &fileName, m_fileManager->recentFiles()) { hasRecentFiles = true; QAction *action = aci->menu()->addAction( - Utils::withTildeHomePath(fileName)); + QDir::toNativeSeparators(Utils::withTildeHomePath(fileName))); action->setData(fileName); connect(action, SIGNAL(triggered()), this, SLOT(openRecentFile())); }