diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2011-11-02 15:35:18 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-04 01:54:02 +0100 |
commit | 720093ebd915d81d9cd24bd36a9d3bacfefa059b (patch) | |
tree | 51f2ffb410444e531cbee5aaa2bd03d1ef2c78b2 /src/widgets/dialogs/qdialog.cpp | |
parent | 24971fbef0c8ad5c8a01b3eaf829f10a14899a1a (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.cpp | 23 |
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; |