From bb95b8e3eb464d26ab3e78b49c8276277c929470 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 3 Mar 2015 14:06:39 +0100 Subject: Dialogs: override selectedUrls in QQPlatformfiledialog Rather than checking if a dialog helper is in use in QAbstractFileDialog, we override selectedUrls in QQuickPlatformFileDialog. Otherwise the version in QQuickFileDialog will be called first, which tries to return selectedUrls from the QML version (which might not be in use). Change-Id: If61647078ed2dd535384dcea67767bfc729edfe0 Reviewed-by: Shawn Rutledge --- src/dialogs/qquickabstractfiledialog.cpp | 7 ------- src/dialogs/qquickabstractfiledialog_p.h | 2 +- src/dialogs/qquickplatformfiledialog.cpp | 7 +++++++ src/dialogs/qquickplatformfiledialog_p.h | 1 + src/widgets/qquickqfiledialog.cpp | 7 +++++++ src/widgets/qquickqfiledialog_p.h | 2 ++ 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/dialogs/qquickabstractfiledialog.cpp b/src/dialogs/qquickabstractfiledialog.cpp index 9e1e605e..233a2db7 100644 --- a/src/dialogs/qquickabstractfiledialog.cpp +++ b/src/dialogs/qquickabstractfiledialog.cpp @@ -194,13 +194,6 @@ QUrl QQuickAbstractFileDialog::fileUrl() const return (urls.count() == 1) ? urls[0] : QUrl(); } -QList QQuickAbstractFileDialog::fileUrls() const -{ - if (m_dlgHelper) - return m_dlgHelper->selectedFiles(); - return QList(); -} - void QQuickAbstractFileDialog::updateModes() { // The 4 possible modes are AnyFile, ExistingFile, Directory, ExistingFiles diff --git a/src/dialogs/qquickabstractfiledialog_p.h b/src/dialogs/qquickabstractfiledialog_p.h index 054afbfe..c7320fd1 100644 --- a/src/dialogs/qquickabstractfiledialog_p.h +++ b/src/dialogs/qquickabstractfiledialog_p.h @@ -84,7 +84,7 @@ public: QStringList selectedNameFilterExtensions() const; int selectedNameFilterIndex() const; QUrl fileUrl() const; - virtual QList fileUrls() const; + virtual QList fileUrls() const = 0; bool sidebarVisible() const { return m_sidebarVisible; } public Q_SLOTS: diff --git a/src/dialogs/qquickplatformfiledialog.cpp b/src/dialogs/qquickplatformfiledialog.cpp index dcdeeadd..aacccc72 100644 --- a/src/dialogs/qquickplatformfiledialog.cpp +++ b/src/dialogs/qquickplatformfiledialog.cpp @@ -175,6 +175,13 @@ QQuickPlatformFileDialog::~QQuickPlatformFileDialog() delete m_dlgHelper; } +QList QQuickPlatformFileDialog::fileUrls() const +{ + if (m_dialogHelperInUse) + return m_dlgHelper->selectedFiles(); + return QQuickFileDialog::fileUrls(); +} + void QQuickPlatformFileDialog::setModality(Qt::WindowModality m) { #ifdef Q_OS_WIN diff --git a/src/dialogs/qquickplatformfiledialog_p.h b/src/dialogs/qquickplatformfiledialog_p.h index 0053a248..5a5cc75f 100644 --- a/src/dialogs/qquickplatformfiledialog_p.h +++ b/src/dialogs/qquickplatformfiledialog_p.h @@ -60,6 +60,7 @@ public: QQuickPlatformFileDialog(QObject *parent = 0); virtual ~QQuickPlatformFileDialog(); virtual void setModality(Qt::WindowModality m) Q_DECL_OVERRIDE; + virtual QList fileUrls() const Q_DECL_OVERRIDE; protected: QPlatformFileDialogHelper *helper(); diff --git a/src/widgets/qquickqfiledialog.cpp b/src/widgets/qquickqfiledialog.cpp index c922e78f..90d1ef9e 100644 --- a/src/widgets/qquickqfiledialog.cpp +++ b/src/widgets/qquickqfiledialog.cpp @@ -136,6 +136,13 @@ QPlatformFileDialogHelper *QQuickQFileDialog::helper() return m_dlgHelper; } +QList QQuickQFileDialog::fileUrls() const +{ + if (m_dialogHelperInUse) + return m_dlgHelper->selectedFiles(); + return QList(); +} + QFileDialogHelper::QFileDialogHelper() : QPlatformFileDialogHelper() { diff --git a/src/widgets/qquickqfiledialog_p.h b/src/widgets/qquickqfiledialog_p.h index d6214285..2747749e 100644 --- a/src/widgets/qquickqfiledialog_p.h +++ b/src/widgets/qquickqfiledialog_p.h @@ -61,6 +61,8 @@ public: QQuickQFileDialog(QObject *parent = 0); virtual ~QQuickQFileDialog(); + virtual QList fileUrls() const Q_DECL_OVERRIDE; + protected: QPlatformFileDialogHelper *helper(); -- cgit v1.2.1