resetting state when my page is pop()-ed
Dirk Hohndel
dirk at hohndel.org
Sat Feb 6 20:12:31 UTC 2016
On Sat, Feb 06, 2016 at 07:38:12AM -0800, Dirk Hohndel wrote:
> On Sat, Feb 06, 2016 at 04:01:01PM +0100, kde at privat.broulik.de wrote:
> >
> > in the apps I wrote I have a onBackRequested signal on my Page class which
> > can also be used to reject the back button event (eg. event.accepted =
> > false); I think something like this could be added to Plasma Mobile
> > Components, too.
>
> That may be just beyond my QML skills (still a steep learning curve
> ahead), but I'll give it a try.
Yeah, as expected, the whole signals thing doesn't work for me at all.
But the way I tend to cope with the ridiculously bad documentation of QML
is to simply imitate things that someone else already wrote.
The patch below allows you to define a popAction for a page and if that is
present, it is executed when the page is popped.
Note that this only executes the popAction for the top page (but that
said, I have never been able to get the multiple page pop to work where
you tell it which page to pop down to... I think this is broken or the way
it is used is totally non-intuitive).
Anyway, maybe this could be added to plasma-mobile.
/D
>From 83de1e8ba2c7e72897dd8798367daa5f0a33d928 Mon Sep 17 00:00:00 2001
From: Dirk Hohndel <dirk at hohndel.org>
Date: Sat, 6 Feb 2016 11:44:09 -0800
Subject: [PATCH] Add popAction to page
This allows a page to reset state or clean up after itself if it gets
popped of the stack (for example when the user presses the back button on
Android).
Signed-off-by: Dirk Hohndel <dirk at hohndel.org>
---
components/mobilecomponents/qml/Page.qml | 5 +++++
components/mobilecomponents/qml/PageRow.qml | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/components/mobilecomponents/qml/Page.qml b/components/mobilecomponents/qml/Page.qml
index 28afbd3..ac90505 100644
--- a/components/mobilecomponents/qml/Page.qml
+++ b/components/mobilecomponents/qml/Page.qml
@@ -52,6 +52,11 @@ Rectangle {
*/
property QtObject mainAction
+ /**
+ * An optional single action when the page is popped
+ */
+ property QtObject popAction
+
Layout.fillWidth: true
color: "transparent"
}
diff --git a/components/mobilecomponents/qml/PageRow.qml b/components/mobilecomponents/qml/PageRow.qml
index c331ee5..379d01b 100644
--- a/components/mobilecomponents/qml/PageRow.qml
+++ b/components/mobilecomponents/qml/PageRow.qml
@@ -62,6 +62,7 @@ Item {
//A column is wide enough for 30 characters
property int columnWidth: Math.round(parent.width/(Units.gridUnit*30)) > 0 ? parent.width/Math.round(parent.width/(Units.gridUnit*30)) : width
property alias clip: scrollArea.clip
+ property QtObject action: pageStack.lastVisiblePage ? pageStack.lastVisiblePage.popAction : null
// Indicates whether there is an ongoing page transition.
property bool busy: internal.ongoingTransitionCount > 0
@@ -96,6 +97,10 @@ Item {
function pop(page, immediate)
{
scrollToLevel(depth-1);
+ if (actualRoot.action && actualRoot.action.trigger) {
+ actualRoot.action.trigger()
+ }
+
return Engine.pop(page, immediate);
}
--
1.9.1
More information about the Plasma-devel
mailing list