Opening recent files wasn't opening with right encoding (Windows)

Confusion between native and internal path representation (i.e.
backslashes). File names should always be "portable" internally.

Reviewed-by: Robert Loehning
This commit is contained in:
con
2010-10-19 11:07:20 +02:00
parent 8f647ca9ca
commit 3a82e22982
3 changed files with 38 additions and 27 deletions

View File

@@ -159,25 +159,7 @@ FileManager::FileManager(QMainWindow *mw)
connect(core, SIGNAL(contextChanged(Core::IContext*,Core::Context)), connect(core, SIGNAL(contextChanged(Core::IContext*,Core::Context)),
this, SLOT(syncWithEditor(Core::IContext*))); this, SLOT(syncWithEditor(Core::IContext*)));
const QSettings *s = core->settings(); readSettings();
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();
} }
FileManager::~FileManager() FileManager::~FileManager()
@@ -994,11 +976,16 @@ void FileManager::addToRecentFiles(const QString &fileName)
{ {
if (fileName.isEmpty()) if (fileName.isEmpty())
return; return;
QString prettyFileName(QDir::toNativeSeparators(fileName)); QString unifiedForm(fixFileName(fileName));
d->m_recentFiles.removeAll(prettyFileName); 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) if (d->m_recentFiles.count() > d->m_maxRecentFiles)
d->m_recentFiles.removeLast(); 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; return d->m_recentFiles;
} }
void FileManager::saveRecentFiles() void FileManager::saveSettings()
{ {
QSettings *s = Core::ICore::instance()->settings(); QSettings *s = Core::ICore::instance()->settings();
s->beginGroup(QLatin1String(settingsGroupC)); s->beginGroup(QLatin1String(settingsGroupC));
@@ -1023,6 +1010,29 @@ void FileManager::saveRecentFiles()
s->endGroup(); 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, The current file is e.g. the file currently opened when an editor is active,

View File

@@ -74,8 +74,7 @@ public:
// recent files // recent files
void addToRecentFiles(const QString &fileName); void addToRecentFiles(const QString &fileName);
QStringList recentFiles() const; QStringList recentFiles() const;
void saveRecentFiles(); void saveSettings();
// current file // current file
void setCurrentFile(const QString &filePath); void setCurrentFile(const QString &filePath);
@@ -133,6 +132,7 @@ private slots:
void syncWithEditor(Core::IContext *context); void syncWithEditor(Core::IContext *context);
private: private:
void readSettings();
void dump(); void dump();
void addFileInfo(IFile *file); void addFileInfo(IFile *file);
void removeFileInfo(IFile *file); void removeFileInfo(IFile *file);

View File

@@ -82,6 +82,7 @@
#include <QtCore/QTimer> #include <QtCore/QTimer>
#include <QtCore/QtPlugin> #include <QtCore/QtPlugin>
#include <QtCore/QUrl> #include <QtCore/QUrl>
#include <QtCore/QDir>
#include <QtGui/QApplication> #include <QtGui/QApplication>
#include <QtGui/QCloseEvent> #include <QtGui/QCloseEvent>
@@ -1208,7 +1209,7 @@ void MainWindow::writeSettings()
m_settings->endGroup(); m_settings->endGroup();
m_fileManager->saveRecentFiles(); m_fileManager->saveSettings();
m_actionManager->saveSettings(m_settings); m_actionManager->saveSettings(m_settings);
m_editorManager->saveSettings(); m_editorManager->saveSettings();
m_navigationWidget->saveSettings(m_settings); m_navigationWidget->saveSettings(m_settings);
@@ -1271,7 +1272,7 @@ void MainWindow::aboutToShowRecentFiles()
foreach (const QString &fileName, m_fileManager->recentFiles()) { foreach (const QString &fileName, m_fileManager->recentFiles()) {
hasRecentFiles = true; hasRecentFiles = true;
QAction *action = aci->menu()->addAction( QAction *action = aci->menu()->addAction(
Utils::withTildeHomePath(fileName)); QDir::toNativeSeparators(Utils::withTildeHomePath(fileName)));
action->setData(fileName); action->setData(fileName);
connect(action, SIGNAL(triggered()), this, SLOT(openRecentFile())); connect(action, SIGNAL(triggered()), this, SLOT(openRecentFile()));
} }