From 17b5cc32dc56552ac3ae7285f7ffdb194b907ffd Mon Sep 17 00:00:00 2001 From: Adasauce Date: Fri, 14 Feb 2020 16:24:53 -0400 Subject: [PATCH 1/2] use the standard system download path for downloads QFileDialog's dir arg (which was set to the incoming file name from the Matrix download) can take a full path to suggest. By prepending QStandardPaths::DownloadLocation, it opens to the system's download folder and proposes the filename as the download name. Using QStandardPaths should make this work on other platforms, and from what I read, its possible for this to return an empty string on platforms where it doesn't support it, so this should essentially revert to the previous functionality if Qt can't determine the system's download location. --- src/timeline/TimelineModel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index f084b4dd..625377fb 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1298,10 +1298,12 @@ TimelineModel::saveMedia(QString eventId) const dialogTitle = tr("Save file"); } - QString filterString = QMimeDatabase().mimeTypeForName(mimeType).filterString(); + const QString filterString = QMimeDatabase().mimeTypeForName(mimeType).filterString(); + const QString downloadsFolder = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + const QString openLocation = downloadsFolder + "/" + originalFilename; - auto filename = QFileDialog::getSaveFileName( - manager_->getWidget(), dialogTitle, originalFilename, filterString); + const QString filename = QFileDialog::getSaveFileName( + manager_->getWidget(), dialogTitle, openLocation, filterString); if (filename.isEmpty()) return; From cb360508226a320846660709f26457a54782b164 Mon Sep 17 00:00:00 2001 From: Adasauce Date: Fri, 14 Feb 2020 21:35:26 -0400 Subject: [PATCH 2/2] use QStandardPaths locations for all file dialogs. --- src/TextInputWidget.cpp | 3 ++- src/UserSettingsPage.cpp | 8 ++++++-- src/dialogs/RoomSettings.cpp | 7 +++++-- src/timeline/TimelineModel.cpp | 3 ++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/TextInputWidget.cpp b/src/TextInputWidget.cpp index ce0c7cb8..11f7ddda 100644 --- a/src/TextInputWidget.cpp +++ b/src/TextInputWidget.cpp @@ -626,8 +626,9 @@ TextInputWidget::command(QString command, QString args) void TextInputWidget::openFileSelection() { + const QString homeFolder = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); const auto fileName = - QFileDialog::getOpenFileName(this, tr("Select a file"), "", tr("All Files (*)")); + QFileDialog::getOpenFileName(this, tr("Select a file"), homeFolder, tr("All Files (*)")); if (fileName.isEmpty()) return; diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index a0f37c26..166a0a67 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -513,7 +514,9 @@ UserSettingsPage::paintEvent(QPaintEvent *) void UserSettingsPage::importSessionKeys() { - auto fileName = QFileDialog::getOpenFileName(this, tr("Open Sessions File"), "", ""); + const QString homeFolder = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + const QString fileName = + QFileDialog::getOpenFileName(this, tr("Open Sessions File"), homeFolder, ""); QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { @@ -572,7 +575,8 @@ UserSettingsPage::exportSessionKeys() } // Open file dialog to save the file. - auto fileName = + const QString homeFolder = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + const QString fileName = QFileDialog::getSaveFileName(this, tr("File to save the exported session keys"), "", ""); QFile file(fileName); diff --git a/src/dialogs/RoomSettings.cpp b/src/dialogs/RoomSettings.cpp index 69d5a9c2..cc10ac91 100644 --- a/src/dialogs/RoomSettings.cpp +++ b/src/dialogs/RoomSettings.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -740,8 +741,10 @@ RoomSettings::resetErrorLabel() void RoomSettings::updateAvatar() { - const auto fileName = - QFileDialog::getOpenFileName(this, tr("Select an avatar"), "", tr("All Files (*)")); + const QString picturesFolder = + QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); + const QString fileName = QFileDialog::getOpenFileName( + this, tr("Select an avatar"), picturesFolder, tr("All Files (*)")); if (fileName.isEmpty()) return; diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 625377fb..104d564b 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1299,7 +1299,8 @@ TimelineModel::saveMedia(QString eventId) const } const QString filterString = QMimeDatabase().mimeTypeForName(mimeType).filterString(); - const QString downloadsFolder = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + const QString downloadsFolder = + QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); const QString openLocation = downloadsFolder + "/" + originalFilename; const QString filename = QFileDialog::getSaveFileName(