summaryrefslogtreecommitdiffstats
path: root/src/widgets/dialogs/qdialog.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2011-11-02 15:35:18 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-04 01:54:02 +0100
commit720093ebd915d81d9cd24bd36a9d3bacfefa059b (patch)
tree51f2ffb410444e531cbee5aaa2bd03d1ef2c78b2 /src/widgets/dialogs/qdialog.cpp
parent24971fbef0c8ad5c8a01b3eaf829f10a14899a1a (diff)
QWidgets: Delayed creation of the QPlatformDialogHelper.
- Create helper only once and ensure deletion - Move nativeDialogInUse into QDialogPrivate, ensuring the native modal helper is called from QDialog::exec() only if it is true Change-Id: Id92b278bb051ce254458f276fbf7075689a7d491 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src/widgets/dialogs/qdialog.cpp')
-rw-r--r--src/widgets/dialogs/qdialog.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp
index 38609a97ed..28feb6b104 100644
--- a/src/widgets/dialogs/qdialog.cpp
+++ b/src/widgets/dialogs/qdialog.cpp
@@ -73,6 +73,21 @@ extern bool qt_wince_is_smartphone(); //is defined in qguifunctions_wce.cpp
QT_BEGIN_NAMESPACE
+QPlatformDialogHelper *QDialogPrivate::platformHelper() const
+{
+ // Delayed creation of the platform, ensuring that
+ // that qobject_cast<> on the dialog works in the plugin.
+ if (!m_platformHelperCreated) {
+ m_platformHelperCreated = true;
+ QDialog *dialog = const_cast<QDialog *>(q_func());
+ m_platformHelper = QGuiApplicationPrivate::platformIntegration()
+ ->createPlatformDialogHelper(dialog);
+ if (m_platformHelper)
+ m_platformHelper->d_ptr = const_cast<QDialogPrivate *>(this);
+ }
+ return m_platformHelper;
+}
+
/*!
\class QDialog
\brief The QDialog class is the base class of dialog windows.
@@ -252,10 +267,6 @@ QDialog::QDialog(QWidget *parent, Qt::WindowFlags f)
: QWidget(*new QDialogPrivate, parent,
f | ((f & Qt::WindowType_Mask) == 0 ? Qt::Dialog : Qt::WindowType(0)))
{
- Q_D(QDialog);
- d->platformHelper = QGuiApplicationPrivate::platformIntegration()->createPlatformDialogHelper(this);
- if (d->platformHelper)
- d->platformHelper->d_ptr = d_func();
#ifdef Q_WS_WINCE
if (!qt_wince_is_smartphone())
setWindowFlags(windowFlags() | Qt::WindowOkButtonHint | QFlag(qt_wince_is_mobile() ? 0 : Qt::WindowCancelButtonHint));
@@ -515,8 +526,8 @@ int QDialog::exec()
}
show();
- if (d->platformHelper)
- d->platformHelper->platformNativeDialogModalHelp();
+ if (d->nativeDialogInUse)
+ d->platformHelper()->platformNativeDialogModalHelp();
QEventLoop eventLoop;
d->eventLoop = &eventLoop;