From: Matthieu Gallien Date: Thu, 4 May 2023 08:32:56 +0000 (+0200) Subject: prevent close of conflicts dialog on focus lost X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~44^2~16 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6efa9f81beaba1e7dc7d78402b25ff02af546a1d;p=nextcloud-desktop.git prevent close of conflicts dialog on focus lost Signed-off-by: Matthieu Gallien --- diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index 4228c7514..bf6422fe6 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -14,7 +14,7 @@ import QtQml 2.15 import QtQuick 2.15 -import QtQuick.Window 2.15 +import QtQuick.Window 2.15 as QtWindow import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQml.Models 2.15 @@ -22,12 +22,12 @@ import Style 1.0 import com.nextcloud.desktopclient 1.0 import "./tray" -Window { - id: root +QtWindow.Window { + id: conflictsDialog required property var allConflicts - flags: Qt.Dialog + flags: Qt.Window | Qt.Dialog visible: true width: 600 @@ -36,17 +36,9 @@ Window { minimumHeight: 800 title: qsTr('Solve sync conflicts') - onClosing: function() { + onClosing: function(close) { Systray.destroyDialog(root); - } - - Component.onCompleted: { - Systray.forceWindowInit(root); - Systray.positionNotificationWindow(root); - - root.show(); - root.raise(); - root.requestActivate(); + close.accepted = true } ColumnLayout { @@ -115,7 +107,7 @@ Window { SyncConflictsModel { id: realModel - conflictActivities: root.allConflicts + conflictActivities: conflictsDialog.allConflicts } ScrollView { diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 25276b84f..4e14c2b5d 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -287,19 +287,38 @@ void Systray::destroyEditFileLocallyLoadingDialog() void Systray::createResolveConflictsDialog(const OCC::ActivityList &allConflicts) { - const auto callDialog = new QQmlComponent(_trayEngine, QStringLiteral("qrc:/qml/src/gui/ResolveConflictsDialog.qml")); + const auto conflictsDialog = new QQmlComponent(_trayEngine, QStringLiteral("qrc:/qml/src/gui/ResolveConflictsDialog.qml")); const QVariantMap initialProperties{ {"allConflicts", QVariant::fromValue(allConflicts)}, }; - if(callDialog->isError()) { - qCWarning(lcSystray) << callDialog->errorString(); + 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 - callDialog->createWithInitialProperties(initialProperties); + auto dialog = conflictsDialog->createWithInitialProperties(initialProperties); + if (!dialog) { + delete dialog; + delete conflictsDialog; + return; + } + dialog->setParent(QGuiApplication::instance()); + + auto dialogWindow = qobject_cast(dialog); + if (!dialogWindow) { + delete dialog; + delete conflictsDialog; + return; + } + dialogWindow->show(); + dialogWindow->raise(); + dialogWindow->requestActivate(); + + delete conflictsDialog; } bool Systray::raiseDialogs()