improve reliability of memeory management when creating conflicts dialog
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Tue, 16 May 2023 09:30:45 +0000 (11:30 +0200)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Wed, 17 May 2023 06:43:54 +0000 (08:43 +0200)
use more automatyed memory management to reduce possible errors

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/gui/systray.cpp

index 4e14c2b5d2523bb43f869e88a3964f8553548ac1..08872c28925fcaca971ea5759440566d8ad63880 100644 (file)
@@ -287,38 +287,32 @@ void Systray::destroyEditFileLocallyLoadingDialog()
 
 void Systray::createResolveConflictsDialog(const OCC::ActivityList &allConflicts)
 {
-    const auto conflictsDialog = new QQmlComponent(_trayEngine, QStringLiteral("qrc:/qml/src/gui/ResolveConflictsDialog.qml"));
+    const auto conflictsDialog = std::make_unique<QQmlComponent>(_trayEngine, QStringLiteral("qrc:/qml/src/gui/ResolveConflictsDialog.qml"));
     const QVariantMap initialProperties{
                                         {"allConflicts", QVariant::fromValue(allConflicts)},
     };
 
     if(conflictsDialog->isError()) {
         qCWarning(lcSystray) << conflictsDialog->errorString();
-        delete conflictsDialog;
         return;
     }
 
     // This call dialog gets deallocated on close conditions
     // by a call from the QML side to the destroyDialog slot
-    auto dialog = conflictsDialog->createWithInitialProperties(initialProperties);
+    auto dialog = QScopedPointer(conflictsDialog->createWithInitialProperties(initialProperties));
     if (!dialog) {
-        delete dialog;
-        delete conflictsDialog;
         return;
     }
     dialog->setParent(QGuiApplication::instance());
 
-    auto dialogWindow = qobject_cast<QQuickWindow*>(dialog);
+    auto dialogWindow = qobject_cast<QQuickWindow*>(dialog.data());
     if (!dialogWindow) {
-        delete dialog;
-        delete conflictsDialog;
         return;
     }
     dialogWindow->show();
     dialogWindow->raise();
     dialogWindow->requestActivate();
-
-    delete conflictsDialog;
+    dialog.take();
 }
 
 bool Systray::raiseDialogs()