diff options
Diffstat (limited to 'src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp')
-rw-r--r-- | src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp index 2a3585464f..4af91ded27 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp @@ -71,6 +71,9 @@ Q_SIGNALS: protected: static void onResponse(QGtk3Dialog *dialog, int response); +private slots: + void onParentWindowDestroyed(); + private: GtkWidget *gtkWidget; }; @@ -108,6 +111,8 @@ void QGtk3Dialog::exec() bool QGtk3Dialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) { + connect(parent, &QWindow::destroyed, this, &QGtk3Dialog::onParentWindowDestroyed, + Qt::UniqueConnection); setParent(parent); setFlags(flags); setModality(modality); @@ -146,6 +151,12 @@ void QGtk3Dialog::onResponse(QGtk3Dialog *dialog, int response) emit dialog->reject(); } +void QGtk3Dialog::onParentWindowDestroyed() +{ + // The QGtk3*DialogHelper classes own this object. Make sure the parent doesn't delete it. + setParent(0); +} + QGtk3ColorDialogHelper::QGtk3ColorDialogHelper() { d.reset(new QGtk3Dialog(gtk_color_chooser_dialog_new("", 0))); |