From 2e09e597ab3df5a13f89e945a0a90724d5c5a3f0 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sun, 14 Aug 2016 11:01:38 +0200 Subject: Platform: create platform dialog instances lazily on demand Change-Id: Ie963cb5c082b49205f7b7244ace3b88254ec37c7 Reviewed-by: J-P Nurmi --- src/imports/platform/qquickplatformdialog.cpp | 41 ++++++++++++++------------- 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'src/imports/platform/qquickplatformdialog.cpp') 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(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 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() { } -- cgit v1.2.3