From 925834d2f380dd85336f852795226e2ac6d8ec42 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 18 Apr 2018 09:02:22 +0200 Subject: Introduced an aborted hook to safe the draft before going down. --- components/kube/qml/ViewManager.qml | 12 ++++++++++-- framework/qml/View.qml | 16 ++++++++++++++++ views/composer/qml/View.qml | 11 +++++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/components/kube/qml/ViewManager.qml b/components/kube/qml/ViewManager.qml index eff0f3f7..517d8de3 100644 --- a/components/kube/qml/ViewManager.qml +++ b/components/kube/qml/ViewManager.qml @@ -33,12 +33,20 @@ StackView { property var viewDict: new Object function getView(name, replaceView) { - if (!replaceView && name in viewDict) { + if (name in viewDict) { var item = viewDict[name] if (item) { - return item + if (replaceView) { + if (item && item.aborted) { + //Call the aborted hook on the view + item.aborted() + } + } else { + return item + } } } + var component = Qt.createComponent(extensionModel.findSource(name, "View.qml")) if (component.status == Component.Ready) { var o = component.createObject(root) diff --git a/framework/qml/View.qml b/framework/qml/View.qml index b0c108fc..f4a34701 100644 --- a/framework/qml/View.qml +++ b/framework/qml/View.qml @@ -31,12 +31,28 @@ FocusScope { property int count: contentItems.length default property alias contentItems: content.data + property bool __aborted: false + //This signal will be emitted once all initial properties have been set and the view is ready to load signal setup() Controls2.StackView.onActivated: { root.setup() } + //This signal will be emitted before destruction if the view was not done + signal aborted() + onAborted: { + __aborted = true + } + + //This signal will be emitted when the view is done + signal done() + onDone: { + if (!__aborted) { + Kube.Fabric.postMessage(Kube.Messages.componentDone, {}) + } + } + onCurrentIndexChanged: showRelevantSplits() Component.onCompleted: showRelevantSplits() diff --git a/views/composer/qml/View.qml b/views/composer/qml/View.qml index 85e8b559..9afc5316 100644 --- a/views/composer/qml/View.qml +++ b/views/composer/qml/View.qml @@ -39,7 +39,7 @@ Kube.View { htmlBody: html.checked sign: signCheckbox.checked encrypt: encryptCheckbox.checked - onDone: Kube.Fabric.postMessage(Kube.Messages.componentDone, {}) + onDone: root.done() property bool foundAllKeys: composerController.to.foundAllKeys && composerController.cc.foundAllKeys && composerController.bcc.foundAllKeys @@ -55,6 +55,13 @@ Kube.View { Kube.Fabric.postMessage(Kube.Messages.synchronize, {"type": "contacts"}) } + onAborted: { + //Avoid loosing the message + if (composerController.saveAsDraftAction.enabled) { + composerController.saveAsDraftAction.execute() + } + } + function loadMessage(message, loadType) { if (message) { switch(loadType) { @@ -488,7 +495,7 @@ Kube.View { Kube.Button { width: saveDraftButton.width text: qsTr("Discard") - onClicked: Kube.Fabric.postMessage(Kube.Messages.componentDone, {}) + onClicked: root.done() } Kube.Button { -- cgit v1.2.3