diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2014-08-21 16:26:47 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@digia.com> | 2014-08-25 15:24:03 +0200 |
commit | 45484e3f70cfb430e861754253f46fae1d745fda (patch) | |
tree | 054030386bdf0a8d095e3d45db95e3e26b6a136d | |
parent | bb844065944049d836736192505ea28973f39444 (diff) | |
download | qtquickcontrols-45484e3f70cfb430e861754253f46fae1d745fda.tar.gz |
Dialogs must know when they are closed by the operating system
The dialog cannot be opened again if it does not know that it was
closed. So whenever there is a native window, the visibleChanged signal
must be connected.
Task-number: QTBUG-40855
Change-Id: I0726b7568937a19deba067d43ce72b0579f7c4c5
Reviewed-by: Liang Qi <liang.qi@digia.com>
-rw-r--r-- | src/dialogs/qquickabstractdialog.cpp | 6 | ||||
-rw-r--r-- | src/dialogs/qquickabstractdialog_p.h | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/dialogs/qquickabstractdialog.cpp b/src/dialogs/qquickabstractdialog.cpp index 847fb697..0fc9361d 100644 --- a/src/dialogs/qquickabstractdialog.cpp +++ b/src/dialogs/qquickabstractdialog.cpp @@ -65,6 +65,7 @@ QQuickAbstractDialog::QQuickAbstractDialog(QObject *parent) QGuiApplicationPrivate::platformIntegration()-> hasCapability(QPlatformIntegration::WindowManagement)) , m_hasAspiredPosition(false) + , m_visibleChangedConnected(false) { } @@ -145,12 +146,15 @@ void QQuickAbstractDialog::setVisible(bool v) if (m_sizeAspiration.height() > 0) m_dialogWindow->setHeight(m_sizeAspiration.height()); } - connect(m_dialogWindow, SIGNAL(visibleChanged(bool)), this, SLOT(visibleChanged(bool))); connect(m_dialogWindow, SIGNAL(xChanged(int)), this, SLOT(setX(int))); connect(m_dialogWindow, SIGNAL(yChanged(int)), this, SLOT(setY(int))); connect(m_dialogWindow, SIGNAL(widthChanged(int)), this, SLOT(setWidth(int))); connect(m_dialogWindow, SIGNAL(heightChanged(int)), this, SLOT(setHeight(int))); } + if (!m_visibleChangedConnected) { + connect(m_dialogWindow, SIGNAL(visibleChanged(bool)), this, SLOT(visibleChanged(bool))); + m_visibleChangedConnected = true; + } } if (m_windowDecoration) { m_windowDecoration->setProperty("dismissOnOuterClick", (m_modality == Qt::NonModal)); diff --git a/src/dialogs/qquickabstractdialog_p.h b/src/dialogs/qquickabstractdialog_p.h index a905b097..5af3216c 100644 --- a/src/dialogs/qquickabstractdialog_p.h +++ b/src/dialogs/qquickabstractdialog_p.h @@ -160,6 +160,7 @@ protected: // variables for pure-QML implementations only bool m_hasNativeWindows; QRect m_sizeAspiration; bool m_hasAspiredPosition; + bool m_visibleChangedConnected; static QQmlComponent *m_decorationComponent; |