From d21096fa6e10fe03e524a1b0beeb0b16a0c22681 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik <kde@privat.broulik.de> Date: Sat, 11 Feb 2017 17:03:46 +0100 Subject: [PATCH] Fix adding files to data project In cf01ff3159dbddb97e0e67246dee16441a64984a this broke by randomly using QSharedPointer in the wrong way. There was only this one item being referenced, once it fell out of scope it got deleted, and then by the time the event loop returned and the queued invocation was processed, the object was already gone. Just use WA_DeleteOnClose which will clean up nicely once we're done. BUG: 375016 Differential Revision: https://phabricator.kde.org/D4571 --- src/projects/k3bdataurladdingdialog.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/projects/k3bdataurladdingdialog.cpp b/src/projects/k3bdataurladdingdialog.cpp index 28986e9..9ad6976 100644 --- a/src/projects/k3bdataurladdingdialog.cpp +++ b/src/projects/k3bdataurladdingdialog.cpp @@ -50,7 +50,6 @@ #include <QtWidgets/QLabel> #include <QtWidgets/QLayout> #include <QtWidgets/QInputDialog> -#include <QSharedPointer> #include <unistd.h> @@ -144,8 +143,9 @@ void K3b::DataUrlAddingDialog::addUrls( const QList<QUrl>& urls, QWidget* parent ) { if( !urls.isEmpty() ) { - QSharedPointer<DataUrlAddingDialog> dlgPtr = QSharedPointer<DataUrlAddingDialog>(new DataUrlAddingDialog( urls, dir, parent )); - QMetaObject::invokeMethod( dlgPtr.data(), "slotStartAddUrls", Qt::QueuedConnection ); + auto *dlg = new DataUrlAddingDialog( urls, dir, parent ); + dlg->setAttribute(Qt::WA_DeleteOnClose); + QMetaObject::invokeMethod( dlg, "slotStartAddUrls", Qt::QueuedConnection ); } } @@ -155,8 +155,9 @@ void K3b::DataUrlAddingDialog::moveItems( const QList<K3b::DataItem*>& items, QWidget* parent ) { if( !items.isEmpty() ) { - QSharedPointer<DataUrlAddingDialog> dlgPtr = QSharedPointer<DataUrlAddingDialog>(new DataUrlAddingDialog( items, dir, false, parent )); - QMetaObject::invokeMethod( dlgPtr.data(), "slotStartCopyMoveItems", Qt::QueuedConnection ); + auto *dlg = new DataUrlAddingDialog( items, dir, false, parent ); + dlg->setAttribute(Qt::WA_DeleteOnClose); + QMetaObject::invokeMethod( dlg, "slotStartCopyMoveItems", Qt::QueuedConnection ); } } @@ -166,8 +167,9 @@ void K3b::DataUrlAddingDialog::copyItems( const QList<K3b::DataItem*>& items, QWidget* parent ) { if( !items.isEmpty() ) { - QSharedPointer<DataUrlAddingDialog> dlgPtr = QSharedPointer<DataUrlAddingDialog>(new DataUrlAddingDialog( items, dir, true, parent )); - QMetaObject::invokeMethod( dlgPtr.data(), "slotStartCopyMoveItems", Qt::QueuedConnection ); + auto *dlg = new DataUrlAddingDialog( items, dir, true, parent ); + dlg->setAttribute(Qt::WA_DeleteOnClose); + QMetaObject::invokeMethod( dlg, "slotStartCopyMoveItems", Qt::QueuedConnection ); } }