From 5be8125c629c558a6f2aae269942da81fc464a45 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 20 Aug 2020 11:44:56 +0200 Subject: [PATCH] fix logic for open/close top panel --- .../package/contents/ui/SlidingPanel.qml | 30 ++++++++++++++++--- .../panel/package/contents/ui/main.qml | 3 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/containments/panel/package/contents/ui/SlidingPanel.qml b/containments/panel/package/contents/ui/SlidingPanel.qml index 6c241f2f..cd27be66 100644 --- a/containments/panel/package/contents/ui/SlidingPanel.qml +++ b/containments/panel/package/contents/ui/SlidingPanel.qml @@ -45,18 +45,33 @@ NanoShell.FullScreenOverlay { //width: Screen.width //height: Screen.height + enum MovementDirection { + None = 0, + Up, + Down + } + property int direction: SlidingPanel.MovementDirection.None + function open() { window.showFullScreen(); - open.running = true; + openAnim.restart(); } function close() { - closeAnim.running = true; + closeAnim.restart(); } function updateState() { - if (offset < openThreshold) { + if (window.direction === SlidingPanel.MovementDirection.None) { + if (offset < openThreshold) { + close(); + } else { + openAnim.restart(); + } + } else if (offset > openThreshold && window.direction === SlidingPanel.MovementDirection.Down) { + openAnim.restart(); + } else if (mainFlickable.contentY > openThreshold) { close(); } else { - openAnim.running = true; + openAnim.restart(); } } Timer { @@ -163,8 +178,15 @@ NanoShell.FullScreenOverlay { } //no loop as those 2 values compute to exactly the same onContentYChanged: { + if (contentY === oldContentY) { + window.direction = SlidingPanel.MovementDirection.None; + } else { + window.direction = contentY > oldContentY ? SlidingPanel.MovementDirection.Up : SlidingPanel.MovementDirection.Down; + } window.offset = -contentY + contentArea.height + oldContentY = contentY; } + property real oldContentY boundsBehavior: Flickable.StopAtBounds contentWidth: window.width contentHeight: window.height*2 diff --git a/containments/panel/package/contents/ui/main.qml b/containments/panel/package/contents/ui/main.qml index c124f4c0..4b340c40 100644 --- a/containments/panel/package/contents/ui/main.qml +++ b/containments/panel/package/contents/ui/main.qml @@ -262,6 +262,7 @@ Item { } onPositionChanged: { slidingPanel.offset = Math.min(slidingPanel.contentItem.height, slidingPanel.offset + (mouse.y - oldMouseY)); + oldMouseY = mouse.y; } onReleased: { @@ -274,7 +275,7 @@ Item { id: slidingPanel width: plasmoid.availableScreenRect.width height: plasmoid.availableScreenRect.height - openThreshold: units.gridUnit * 10 + openThreshold: units.gridUnit * 2 headerHeight: root.height onClosed: quickSettings.closed()