summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2014-10-30 15:29:13 +0100
committerShawn Rutledge <shawn.rutledge@digia.com>2014-10-30 15:36:47 +0100
commit41e66ea6daa47d940365a458e7a12977bb32c690 (patch)
tree44affbaf9282e2451f080379a41522279264aabf
parent3a851dfd4078b3ca9f9c1b06424b136cc6f852c5 (diff)
downloadqtquickcontrols-41e66ea6daa47d940365a458e7a12977bb32c690.tar.gz
Dialogs: FileDialog can only be modal on Windows
The autotest has been failing on Windows because of this. Change-Id: I6ec42a256455d7a71a522fa7e75dc44f93b741ea Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r--src/dialogs/qquickplatformfiledialog.cpp15
-rw-r--r--src/dialogs/qquickplatformfiledialog_p.h1
-rw-r--r--tests/auto/dialogs/tst_dialogs.cpp4
3 files changed, 20 insertions, 0 deletions
diff --git a/src/dialogs/qquickplatformfiledialog.cpp b/src/dialogs/qquickplatformfiledialog.cpp
index 7ed4e3fb..141f701d 100644
--- a/src/dialogs/qquickplatformfiledialog.cpp
+++ b/src/dialogs/qquickplatformfiledialog.cpp
@@ -172,6 +172,21 @@ QQuickPlatformFileDialog::~QQuickPlatformFileDialog()
delete m_dlgHelper;
}
+void QQuickPlatformFileDialog::setModality(Qt::WindowModality m)
+{
+#ifdef Q_OS_WIN
+ // A non-modal native file dialog is not possible on Windows, so
+ // be stubborn about it. Emit modalityChanged() whether it changed
+ // or not, to ensure that anything which depends on the property
+ // will re-read the actual current value.
+ if (m != Qt::ApplicationModal)
+ m = Qt::ApplicationModal;
+ if (m == m_modality)
+ emit modalityChanged();
+#endif
+ QQuickAbstractFileDialog::setModality(m);
+}
+
QPlatformFileDialogHelper *QQuickPlatformFileDialog::helper()
{
QQuickItem *parentItem = qobject_cast<QQuickItem *>(parent());
diff --git a/src/dialogs/qquickplatformfiledialog_p.h b/src/dialogs/qquickplatformfiledialog_p.h
index 411a7824..f21d0140 100644
--- a/src/dialogs/qquickplatformfiledialog_p.h
+++ b/src/dialogs/qquickplatformfiledialog_p.h
@@ -56,6 +56,7 @@ class QQuickPlatformFileDialog : public QQuickAbstractFileDialog
public:
QQuickPlatformFileDialog(QObject *parent = 0);
virtual ~QQuickPlatformFileDialog();
+ virtual void setModality(Qt::WindowModality m) Q_DECL_OVERRIDE;
protected:
QPlatformFileDialogHelper *helper();
diff --git a/tests/auto/dialogs/tst_dialogs.cpp b/tests/auto/dialogs/tst_dialogs.cpp
index 34af7e0c..acf04c5c 100644
--- a/tests/auto/dialogs/tst_dialogs.cpp
+++ b/tests/auto/dialogs/tst_dialogs.cpp
@@ -124,7 +124,11 @@ void tst_dialogs::fileDialogNonModal()
QTest::mouseClick(window, Qt::LeftButton, 0, QPoint(1000, 100)); // hide
QTRY_VERIFY(spyVisibilityChanged.count() > visibilityChangedCount);
QCOMPARE(dlg->property("visible").toBool(), false);
+#ifdef Q_OS_WIN
+ QCOMPARE(dlg->property("modality").toInt(), (int)Qt::ApplicationModal);
+#else
QCOMPARE(dlg->property("modality").toInt(), (int)Qt::NonModal);
+#endif
}
void tst_dialogs::fileDialogNameFilters()