diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-08-14 11:01:38 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-08-14 09:25:42 +0000 |
commit | 2e09e597ab3df5a13f89e945a0a90724d5c5a3f0 (patch) | |
tree | f671841761cc372ddb1499574172564dd1378505 /src/imports/platform/qquickplatformdialog.cpp | |
parent | deb0921b8240a0240e595896debb973a6104935a (diff) |
Platform: create platform dialog instances lazily on demand
Change-Id: Ie963cb5c082b49205f7b7244ace3b88254ec37c7
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src/imports/platform/qquickplatformdialog.cpp')
-rw-r--r-- | src/imports/platform/qquickplatformdialog.cpp | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/src/imports/platform/qquickplatformdialog.cpp b/src/imports/platform/qquickplatformdialog.cpp index 5f28ca05..68321554 100644 --- a/src/imports/platform/qquickplatformdialog.cpp +++ b/src/imports/platform/qquickplatformdialog.cpp @@ -94,31 +94,16 @@ QQuickPlatformDialog::QQuickPlatformDialog(QObject *parent) QQuickPlatformDialog::~QQuickPlatformDialog() { - delete m_handle; - m_handle = nullptr; + destroy(); } QPlatformDialogHelper *QQuickPlatformDialog::handle() const { + if (!m_handle) + const_cast<QQuickPlatformDialog *>(this)->create(); return m_handle; } -void QQuickPlatformDialog::setHandle(QPlatformDialogHelper *handle) -{ - if (m_handle == handle) - return; - - if (m_handle) { - disconnect(m_handle, &QPlatformDialogHelper::accept, this, &QQuickPlatformDialog::accept); - disconnect(m_handle, &QPlatformDialogHelper::reject, this, &QQuickPlatformDialog::reject); - } - m_handle = handle; - if (handle) { - connect(handle, &QPlatformDialogHelper::accept, this, &QQuickPlatformDialog::accept); - connect(handle, &QPlatformDialogHelper::reject, this, &QQuickPlatformDialog::reject); - } -} - /*! \default \qmlproperty list<Object> Qt.labs.platform::Dialog::data @@ -245,7 +230,7 @@ void QQuickPlatformDialog::setVisible(bool visible) */ void QQuickPlatformDialog::open() { - if (!m_handle || m_visible) + if (m_visible || !create()) return; applyOptions(); @@ -308,6 +293,24 @@ void QQuickPlatformDialog::componentComplete() setParentWindow(findParentWindow()); } +bool QQuickPlatformDialog::create() +{ + if (!m_handle) { + m_handle = createHelper(); + if (m_handle) { + connect(m_handle, &QPlatformDialogHelper::accept, this, &QQuickPlatformDialog::accept); + connect(m_handle, &QPlatformDialogHelper::reject, this, &QQuickPlatformDialog::reject); + } + } + return m_handle; +} + +void QQuickPlatformDialog::destroy() +{ + delete m_handle; + m_handle = nullptr; +} + void QQuickPlatformDialog::applyOptions() { } |