From 768f70e05ff4d8521f439d1e9410750bdf98b584 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 5 Oct 2016 14:42:44 +0200 Subject: Make FileDialog remember the folder Task-number: QTBUG-54310 Change-Id: I9beef4d983c5fcea4e969cae5090686dfc1d37c6 Reviewed-by: Shawn Rutledge --- src/dialogs/qquickabstractfiledialog.cpp | 16 ++++++++++++++-- src/dialogs/qquickabstractfiledialog_p.h | 3 +++ src/dialogs/qquickplatformfiledialog.cpp | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/dialogs/qquickabstractfiledialog.cpp b/src/dialogs/qquickabstractfiledialog.cpp index 26c7218b..4f0cdb9a 100644 --- a/src/dialogs/qquickabstractfiledialog.cpp +++ b/src/dialogs/qquickabstractfiledialog.cpp @@ -112,20 +112,32 @@ QUrl QQuickAbstractFileDialog::folder() const return m_options->initialDirectory(); } -void QQuickAbstractFileDialog::setFolder(const QUrl &f) +static QUrl fixupFolder(const QUrl &f) { QString lf = f.toLocalFile(); while (lf.startsWith("//")) lf.remove(0, 1); if (lf.isEmpty()) lf = QDir::currentPath(); - QUrl u = QUrl::fromLocalFile(lf); + return QUrl::fromLocalFile(lf); +} + +void QQuickAbstractFileDialog::setFolder(const QUrl &f) +{ + QUrl u = fixupFolder(f); if (m_dlgHelper) m_dlgHelper->setDirectory(u); m_options->setInitialDirectory(u); emit folderChanged(); } +void QQuickAbstractFileDialog::updateFolder(const QUrl &f) +{ + QUrl u = fixupFolder(f); + m_options->setInitialDirectory(u); + emit folderChanged(); +} + void QQuickAbstractFileDialog::setNameFilters(const QStringList &f) { m_options->setNameFilters(f); diff --git a/src/dialogs/qquickabstractfiledialog_p.h b/src/dialogs/qquickabstractfiledialog_p.h index 8f094783..f6796d73 100644 --- a/src/dialogs/qquickabstractfiledialog_p.h +++ b/src/dialogs/qquickabstractfiledialog_p.h @@ -114,6 +114,9 @@ Q_SIGNALS: void sidebarVisibleChanged(); void shortcutsChanged(); +protected Q_SLOTS: + void updateFolder(const QUrl &f); + protected: void updateModes(); void addShortcut(const QString &name, const QString &visibleName, const QString &path); diff --git a/src/dialogs/qquickplatformfiledialog.cpp b/src/dialogs/qquickplatformfiledialog.cpp index 2f200b80..aff0a694 100644 --- a/src/dialogs/qquickplatformfiledialog.cpp +++ b/src/dialogs/qquickplatformfiledialog.cpp @@ -210,7 +210,7 @@ QPlatformFileDialogHelper *QQuickPlatformFileDialog::helper() if (!m_dlgHelper) return m_dlgHelper; m_dlgHelper->setOptions(m_options); - connect(m_dlgHelper, SIGNAL(directoryEntered(QUrl)), this, SIGNAL(folderChanged())); + connect(m_dlgHelper, SIGNAL(directoryEntered(QUrl)), this, SLOT(updateFolder(QUrl))); connect(m_dlgHelper, SIGNAL(filterSelected(QString)), this, SIGNAL(filterSelected())); connect(m_dlgHelper, SIGNAL(accept()), this, SLOT(accept())); connect(m_dlgHelper, SIGNAL(reject()), this, SLOT(reject())); -- cgit v1.2.1