diff --git a/Telegram/SourceFiles/gui/filedialog.cpp b/Telegram/SourceFiles/gui/filedialog.cpp index 0fc5348ae0..70fae16a0f 100644 --- a/Telegram/SourceFiles/gui/filedialog.cpp +++ b/Telegram/SourceFiles/gui/filedialog.cpp @@ -19,6 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "gui/filedialog.h" #include "application.h" +#include "localstorage.h" void filedialogInit() { if (cDialogLastPath().isEmpty()) { @@ -67,13 +68,22 @@ void filedialogInit() { // multipleFiles: 1 - multi open, 0 - single open, -1 - single save, -2 - select dir bool _filedialogGetFiles(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, int multipleFiles, QString startFile = QString()) { + + filedialogInit(); + #if defined Q_OS_LINUX || defined Q_OS_MAC // use native remoteContent = QByteArray(); + if (startFile.isEmpty() || startFile.at(0) != '/') { + startFile = cDialogLastPath() + '/' + startFile; + } QString file; if (multipleFiles >= 0) { files = QFileDialog::getOpenFileNames(App::wnd() ? App::wnd()->filedialogParent() : 0, caption, startFile, filter); QString path = files.isEmpty() ? QString() : QFileInfo(files.back()).absoluteDir().absolutePath(); - if (!path.isEmpty()) cSetDialogLastPath(path); + if (!path.isEmpty() && path != cDialogLastPath()) { + cSetDialogLastPath(path); + Local::writeUserSettings(); + } return !files.isEmpty(); } else if (multipleFiles < -1) { file = QFileDialog::getExistingDirectory(App::wnd() ? App::wnd()->filedialogParent() : 0, caption); @@ -87,14 +97,15 @@ bool _filedialogGetFiles(QStringList &files, QByteArray &remoteContent, const QS return false; } else { QString path = QFileInfo(file).absoluteDir().absolutePath(); - if (!path.isEmpty()) cSetDialogLastPath(path); + if (!path.isEmpty() && path != cDialogLastPath()) { + cSetDialogLastPath(path); + Local::writeUserSettings(); + } files = QStringList(file); return true; } #endif - filedialogInit(); - // hack for fast non-native dialog create QFileDialog dialog(App::wnd() ? App::wnd()->filedialogParent() : 0, caption, cDialogHelperPathFinal(), filter); @@ -130,7 +141,11 @@ bool _filedialogGetFiles(QStringList &files, QByteArray &remoteContent, const QS int res = dialog.exec(); - cSetDialogLastPath(dialog.directory().absolutePath()); + QString path = dialog.directory().absolutePath(); + if (path != cDialogLastPath()) { + cSetDialogLastPath(path); + Local::writeUserSettings(); + } if (res == QDialog::Accepted) { if (multipleFiles > 0) { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index b6eb1e296f..cda652ea9b 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -431,7 +431,11 @@ QString saveFileName(const QString &title, const QString &filter, const QString if (!name.isEmpty() && name.at(0) == QChar::fromLatin1('.')) { name = filedialogDefaultName(prefix, name); } else if (dir.path() != qsl(".")) { - cSetDialogLastPath(dir.absolutePath()); + QString path = dir.absolutePath(); + if (path != cDialogLastPath()) { + cSetDialogLastPath(path); + Local::writeUserSettings(); + } } return filedialogGetSaveFile(name, title, filter, name) ? name : QString(); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 9feffa3f19..647a5ff4b9 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -920,6 +920,14 @@ namespace { cSetRecentEmojisPreload(v); } break; + case dbiDialogLastPath: { + QString path; + stream >> path; + if (!_checkStreamStatus(stream)) return false; + + cSetDialogLastPath(path); + } break; + default: LOG(("App Error: unknown blockId in _readSetting: %1").arg(blockId)); return false; @@ -1130,6 +1138,7 @@ namespace { uint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + cGetRecentEmojis().size() * (sizeof(uint32) + sizeof(ushort)); + size += sizeof(quint32) + _stringSize(cDialogLastPath()); EncryptedDescriptor data(size); data.stream << quint32(dbiSendKey) << qint32(cCtrlEnter() ? dbiskCtrlEnter : dbiskEnter); @@ -1144,6 +1153,7 @@ namespace { data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); data.stream << quint32(dbiEmojiTab) << qint32(cEmojiTab()); + data.stream << quint32(dbiDialogLastPath) << cDialogLastPath(); RecentEmojiPreload v; v.reserve(cGetRecentEmojis().size()); diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 93c54ac6b2..44ad248b27 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -259,6 +259,7 @@ enum DataBlockId { dbiLangFile = 32, dbiTileBackground = 33, dbiAutoLock = 34, + dbiDialogLastPath = 35, dbiEncryptedWithSalt = 333, dbiEncrypted = 444,