From: Matthieu Gallien Date: Tue, 16 May 2023 09:30:45 +0000 (+0200) Subject: improve reliability of memeory management when creating conflicts dialog X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~44^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=14bce6fdc26c5b28cf77d16bad8a14cb2aca1288;p=nextcloud-desktop.git improve reliability of memeory management when creating conflicts dialog use more automatyed memory management to reduce possible errors Signed-off-by: Matthieu Gallien --- 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()