summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2014-08-21 16:26:47 +0200
committerShawn Rutledge <shawn.rutledge@digia.com>2014-08-25 15:24:03 +0200
commit45484e3f70cfb430e861754253f46fae1d745fda (patch)
tree054030386bdf0a8d095e3d45db95e3e26b6a136d
parentbb844065944049d836736192505ea28973f39444 (diff)
downloadqtquickcontrols-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.cpp6
-rw-r--r--src/dialogs/qquickabstractdialog_p.h1
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;