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
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
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 {
SyncConflictsModel {
id: realModel
- conflictActivities: root.allConflicts
+ conflictActivities: conflictsDialog.allConflicts
}
ScrollView {
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<QQuickWindow*>(dialog);
+ if (!dialogWindow) {
+ delete dialog;
+ delete conflictsDialog;
+ return;
+ }
+ dialogWindow->show();
+ dialogWindow->raise();
+ dialogWindow->requestActivate();
+
+ delete conflictsDialog;
}
bool Systray::raiseDialogs()