From 868342ffc9743dec348d15624d39e818c39c8a2a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 6 Dec 2021 23:38:39 +0100 Subject: [PATCH] Allow swiping between views in single page mode Allows access to spaces on mobile for example --- resources/qml/ChatPage.qml | 34 ++++++++++++++++++++- resources/qml/components/AdaptiveLayout.qml | 10 +++--- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/resources/qml/ChatPage.qml b/resources/qml/ChatPage.qml index 22a04b74..0b0c8533 100644 --- a/resources/qml/ChatPage.qml +++ b/resources/qml/ChatPage.qml @@ -21,7 +21,39 @@ Rectangle { anchors.fill: parent singlePageMode: communityListC.preferredWidth + roomListC.preferredWidth + timlineViewC.minimumWidth > width - pageIndex: (Rooms.currentRoom || Rooms.currentRoomPreview.roomid) ? 2 : 1 + pageIndex: 1 + + Component.onCompleted: initializePageIndex() + onSinglePageModeChanged: initializePageIndex() + + function initializePageIndex() { + if (!singlePageMode) + adaptiveView.pageIndex = 0; + else if (Rooms.currentRoom || Rooms.currentRoomPreview.roomid) + adaptiveView.pageIndex = 2; + else + adaptiveView.pageIndex = 1; + } + + Connections { + target: Rooms + function onCurrentRoomChanged() { + adaptiveView.initializePageIndex(); + } + } + + Connections { + target: Communities + function onCurrentTagIdChanged() { + adaptiveView.initializePageIndex(); + } + } + + onPageIndexChanged: { + if (adaptiveView.pageIndex == 1 && (Rooms.currentRoom || Rooms.currentRoomPreview.roomid)) { + Rooms.resetCurrentRoom(); + } + } AdaptiveLayoutElement { id: communityListC diff --git a/resources/qml/components/AdaptiveLayout.qml b/resources/qml/components/AdaptiveLayout.qml index 357a7831..756d3291 100644 --- a/resources/qml/components/AdaptiveLayout.qml +++ b/resources/qml/components/AdaptiveLayout.qml @@ -16,10 +16,12 @@ Container { property bool singlePageMode: width < 800 property int splitterGrabMargin: Nheko.paddingSmall - property int pageIndex: 0 + property alias pageIndex: view.currentIndex property Component handle property Component handleToucharea + onSinglePageModeChanged: if (!singlePageMode) pageIndex = 0 + anchors.fill: parent Component.onCompleted: { for (var i = 0; i < count - 1; i++) { @@ -103,9 +105,7 @@ Container { xAxis.minimum: splitter.minimumWidth - 1 xAxis.maximum: splitter.maximumWidth margin: container.splitterGrabMargin - //dragThreshold: 0 grabPermissions: PointerHandler.CanTakeOverFromAnything | PointerHandler.ApprovesTakeOverByHandlersOfSameType - //cursorShape: Qt.SizeHorCursor onActiveChanged: { if (!active) splitter.parent.preferredWidth = splitter.x; @@ -114,8 +114,6 @@ Container { } HoverHandler { - //cursorShape: Qt.SizeHorCursor - enabled: !container.singlePageMode margin: container.splitterGrabMargin } @@ -129,7 +127,7 @@ Container { snapMode: ListView.SnapOneItem orientation: ListView.Horizontal highlightRangeMode: ListView.StrictlyEnforceRange - interactive: false + interactive: singlePageMode highlightMoveDuration: container.singlePageMode ? 200 : 0 currentIndex: container.singlePageMode ? container.pageIndex : 0 }