summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Moolle <vmoolle@ics.com>2015-12-27 21:13:31 +0300
committerVladimir Moolle <vmoolle@ics.com>2016-01-22 14:20:17 +0000
commitb834f742994e5dce69c3fdc161099f2ed20deff9 (patch)
tree9364ed02049ae38284bc89e98d5b0114b21c5874
parent148faf6278186986d1ca6afcdea0c361bcbf199e (diff)
downloadqtquickcontrols-b834f742994e5dce69c3fdc161099f2ed20deff9.tar.gz
Android: fix Dialog window decorations' dismiss-on-click behavior
This fixes the case when a modal dialog is instantiated in a visible state, which often means, the window decoration component has not been loaded yet. Previously, this led to dismissOnOuterClick property in DefaultWindowDecoration keeping its initial value of "true" and thus allowing dismissing the dialog via an outside click *the first time the dialog was hidden* (next times, the property would get updated and the behavior would be correct). Task-number: QTBUG-47369 Change-Id: I24c7c8a1eb785203a3b3f1d889b7e22480ea952f Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r--src/dialogs/qquickabstractdialog.cpp8
-rw-r--r--src/dialogs/qquickabstractdialog_p.h4
2 files changed, 10 insertions, 2 deletions
diff --git a/src/dialogs/qquickabstractdialog.cpp b/src/dialogs/qquickabstractdialog.cpp
index ba65bd8b..874b9be0 100644
--- a/src/dialogs/qquickabstractdialog.cpp
+++ b/src/dialogs/qquickabstractdialog.cpp
@@ -189,7 +189,7 @@ void QQuickAbstractDialog::setVisible(bool v)
}
}
if (m_windowDecoration) {
- m_windowDecoration->setProperty("dismissOnOuterClick", (m_modality == Qt::NonModal));
+ setDecorationDismissBehavior();
m_windowDecoration->setVisible(v);
} else if (m_dialogWindow) {
if (v) {
@@ -220,6 +220,7 @@ void QQuickAbstractDialog::decorationLoaded()
QVariant contentVariant;
contentVariant.setValue<QQuickItem*>(m_contentItem);
m_windowDecoration->setProperty("content", contentVariant);
+ setDecorationDismissBehavior();
connect(m_windowDecoration, SIGNAL(dismissed()), this, SLOT(reject()));
ok = true;
qCDebug(lcWindow) << "using synthetic window decoration" << m_windowDecoration << "from" << m_decorationComponent->url();
@@ -309,6 +310,11 @@ QQuickWindow *QQuickAbstractDialog::parentWindow()
return m_parentWindow;
}
+void QQuickAbstractDialog::setDecorationDismissBehavior()
+{
+ m_windowDecoration->setProperty("dismissOnOuterClick", (m_modality == Qt::NonModal));
+}
+
void QQuickAbstractDialog::setContentItem(QQuickItem *obj)
{
m_contentItem = obj;
diff --git a/src/dialogs/qquickabstractdialog_p.h b/src/dialogs/qquickabstractdialog_p.h
index 0fe7fa67..f153fb83 100644
--- a/src/dialogs/qquickabstractdialog_p.h
+++ b/src/dialogs/qquickabstractdialog_p.h
@@ -152,7 +152,9 @@ protected:
bool m_visible;
Qt::WindowModality m_modality;
-protected: // variables for pure-QML implementations only
+protected: // variables and methods for pure-QML implementations only
+ void setDecorationDismissBehavior();
+
QQuickItem *m_contentItem;
QWindow *m_dialogWindow;
QQuickItem *m_windowDecoration;