diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2019-10-07 16:21:01 -0500 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-10-13 11:32:27 -0700 |
commit | d8cc8732bdaa8782a24a7e6dd53a393fea957f30 (patch) | |
tree | 81b189b1b00c054a2984627cbd607594adb16466 | |
parent | 4e4fcda91c858dd0a14d5b6c02528723831bac56 (diff) | |
download | subsurface-d8cc8732bdaa8782a24a7e6dd53a393fea957f30.tar.gz |
Mobile: use tri-state variable to improve the map hack
QML enums are a bit painful to use, so this uses poor man's emums
instead.
Basically what this changes is that a forced switch to the map doesn't
count as picking the map. That seems obviously correct, as otherwise you
could end up in a situation where a legitimate switch away from the map
is ignored.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | mobile-widgets/qml/main.qml | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/mobile-widgets/qml/main.qml b/mobile-widgets/qml/main.qml index e7678688d..94223c766 100644 --- a/mobile-widgets/qml/main.qml +++ b/mobile-widgets/qml/main.qml @@ -34,7 +34,6 @@ Kirigami.ApplicationWindow { property bool firstChange: true property int lastOrientation: undefined property int colWidth: undefined - property bool hackToOpenMap: false onNotificationTextChanged: { if (notificationText != "") { @@ -615,6 +614,13 @@ if you have network connectivity and want to sync your data to cloud storage."), } } + property int hackToOpenMap: 0 /* Otherpage */ + /* I really want an enum, but those are painful in QML, so let's use numbers + * 0 (Otherpage) - the last page selected was a non-map page + * 1 (MapSelected) - the map page was selected by the user + * 2 (MapForced) - the map page was forced by out hack + */ + pageStack.onCurrentItemChanged: { // This is called whenever the user navigates using the breadcrumbs in the header @@ -627,17 +633,24 @@ if you have network connectivity and want to sync your data to cloud storage."), // that undersired behavior if (pageStack.currentItem.objectName === mapPage.objectName) { // remember that we actively picked the mapPage - hackToOpenMap = true + if (hackToOpenMap !== 2 /* MapForced */ ) { + console.log("changed to map, hack on") + hackToOpenMap = 1 /* MapSelected */ + } else { + console.log("forced back to map, ignore") + } } else if (pageStack.currentItem.objectName !== mapPage.objectName && pageStack.lastItem.objectName === mapPage.objectName && - hackToOpenMap) { + hackToOpenMap === 1 /* MapSelected */) { // if we just picked the mapPage and are suddenly back on a different page // force things back to the mapPage + console.log("hack was on, map is last page, switching back to map, hack off") pageStack.currentIndex = pageStack.contentItem.contentChildren.length - 1 - hackToOpenMap = false + hackToOpenMap = 2 /* MapForced */ } else { // if we picked a different page reset the mapPage hack - hackToOpenMap = false + console.log("switched to " + pageStack.currentItem.objectName + " - hack off") + hackToOpenMap = 0 /* Otherpage */ } // disable the left swipe to go back when on the map page |