on xenial help sign in
Fix pull to refresh on short windows
24e6f42Andrea Cimitan
qml/Dash/PullToRefreshScopeStyle.qml+20−1
@@ -24,7 +24,17 @@ import Ubuntu.Components.Styles 1.3
24 * a subclass of the Ambiance version with a hidden ActivityIndicator.
24 * a subclass of the Ambiance version with a hidden ActivityIndicator.
25 */
25 */
26PullToRefreshStyle {
26PullToRefreshStyle {
27+ id: pullToRefreshScopeStyle
28+ readonly property Item rootItem: QuickUtils.rootItem(pullToRefreshScopeStyle)
29+ readonly property bool timerEnabled: activationThreshold > rootItem.height / 3
30+ property bool timerTriggered: false
27− releaseToRefresh: styledItem.target.originY - styledItem.target.contentY > activationThreshold
31+ releaseToRefresh: timerTriggered || styledItem.target.originY - styledItem.target.contentY > activationThreshold
32+
33+ Timer {
34+ id: timer
35+ interval: 1000
36+ onTriggered: pullToRefreshScopeStyle.timerTriggered = true
37+ }
28
38
29 Connections {
39 Connections {
30 property bool willRefresh: false
40 property bool willRefresh: false
@@ -34,6 +44,15 @@ PullToRefreshStyle {
34 if (!styledItem.target.dragging && releaseToRefresh) {
44 if (!styledItem.target.dragging && releaseToRefresh) {
35 willRefresh = true
45 willRefresh = true
36 }
46 }
47+
48+ if (!timerEnabled) return;
49+
50+ if (styledItem.target.dragging) {
51+ timer.start()
52+ } else {
53+ timer.stop()
54+ pullToRefreshScopeStyle.timerTriggered = false
55+ }
37 }
56 }
38 onContentYChanged: {
57 onContentYChanged: {
39 if (styledItem.target.originY - styledItem.target.contentY == 0 && willRefresh) {
58 if (styledItem.target.originY - styledItem.target.contentY == 0 && willRefresh) {
tests/qmltests/Dash/tst_GenericScopeView.qml+28
@@ -583,6 +583,34 @@ Item {
583
583
584 spy.wait()
584 spy.wait()
585 compare(spy.count, 1)
585 compare(spy.count, 1)
586+
587+ // test short swipe doesn't refresh on tall window
588+ mouseFlick(genericScopeView,
589+ genericScopeView.width/2, units.gu(10),
590+ genericScopeView.width/2, units.gu(15),
591+ true, false)
592+ mouseRelease(genericScopeView)
593+ compare(spy.count, 1)
594+
595+ // resize window, repeat the test
596+ var initialHeight = shell.height
597+ shell.height = units.gu(30)
598+ waitForRendering(shell)
599+ mouseFlick(genericScopeView,
600+ genericScopeView.width/2, units.gu(10),
601+ genericScopeView.width/2, units.gu(15),
602+ true, false)
603+
604+ tryCompare(pullToRefresh, "releaseToRefresh", true)
605+
606+ mouseRelease(genericScopeView)
607+ tryCompare(pullToRefresh, "releaseToRefresh", false)
608+
609+ spy.wait()
610+ compare(spy.count, 2)
611+
612+ shell.height = initialHeight
613+ waitForRendering(shell)
586 }
614 }
587
615
588 function test_item_noninteractive() {
616 function test_item_noninteractive() {