From 14bce6fdc26c5b28cf77d16bad8a14cb2aca1288 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Tue, 16 May 2023 11:30:45 +0200 Subject: [PATCH] improve reliability of memeory management when creating conflicts dialog use more automatyed memory management to reduce possible errors Signed-off-by: Matthieu Gallien --- src/gui/systray.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 4e14c2b5d..08872c289 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -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(_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(dialog); + auto dialogWindow = qobject_cast(dialog.data()); if (!dialogWindow) { - delete dialog; - delete conflictsDialog; return; } dialogWindow->show(); dialogWindow->raise(); dialogWindow->requestActivate(); - - delete conflictsDialog; + dialog.take(); } bool Systray::raiseDialogs() -- 2.30.2