QColorDialogHelper: Force QWindow before setting flags
authorShawn Rutledge <shawn.rutledge@digia.com>
Wed, 19 Jun 2013 10:41:07 +0000 (12:41 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 19 Jun 2013 13:39:12 +0000 (15:39 +0200)
This needs the same fix as the one in the QFileDialogHelper (change
I7a3b2321f4a1bf179dced8e98598559f396386db).  However to be even safer,
we can check for a null pointer before calling any methods on the
QWindow.

Task-number: QTBUG-31834
Change-Id: I319326f06fb2c92dc898fd12be86b6c7b7f87e5a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>

src/imports/widgets/qquickqcolordialog.cpp
src/imports/widgets/qquickqfiledialog.cpp

index abe6ffd..d10eace 100644 (file)
@@ -68,8 +68,11 @@ public:
     virtual void exec() { m_dialog.exec(); }
 
     virtual bool show(Qt::WindowFlags f, Qt::WindowModality m, QWindow *parent) {
-        m_dialog.windowHandle()->setTransientParent(parent);
-        m_dialog.windowHandle()->setFlags(f);
+        m_dialog.winId();
+        QWindow *window = m_dialog.windowHandle();
+        Q_ASSERT(window);
+        window->setTransientParent(parent);
+        window->setFlags(f);
         m_dialog.setWindowModality(m);
         m_dialog.setWindowTitle(QPlatformColorDialogHelper::options()->windowTitle());
         m_dialog.setOptions((QColorDialog::ColorDialogOptions)((int)(QPlatformColorDialogHelper::options()->options())));
index 4c5e1b6..afb150b 100644 (file)
@@ -97,8 +97,10 @@ public:
 
     virtual bool show(Qt::WindowFlags f, Qt::WindowModality m, QWindow *parent) {
         m_dialog.winId();
-        m_dialog.windowHandle()->setTransientParent(parent);
-        m_dialog.windowHandle()->setFlags(f);
+        QWindow *window = m_dialog.windowHandle();
+        Q_ASSERT(window);
+        window->setTransientParent(parent);
+        window->setFlags(f);
         m_dialog.setWindowModality(m);
         m_dialog.show();
         return m_dialog.isVisible();