diff --git a/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml b/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml new file mode 100644 index 00000000..ffe88d77 --- /dev/null +++ b/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml @@ -0,0 +1,48 @@ +/* + * SPDX-FileCopyrightText: 2021 Marco Martin + * + * SPDX-License-Identifier: LGPL-2.0-or-later + */ + +import QtQuick 2.14 + +import org.kde.plasma.core 2.0 as PlasmaCore + +import ".." as Launcher + +DragHandler { + yAxis.enabled: enabled + xAxis.enabled: enabled + property Flickable mainFlickable + property Launcher.AppDrawer appDrawer + enum ScrollDirection { + None, + Horizontal, + Vertical + } + property real __initialMainFlickableX + property int __scrollDirection: DragGestureHandler.None + onTranslationChanged: {print(translation.x) + if (active) { + if (appDrawer.offset > PlasmaCore.Units.gridUnit) { + __scrollDirection = DragGestureHandler.Vertical; + } else if (Math.abs(mainFlickable.contentX - __initialMainFlickableX) > PlasmaCore.Units.gridUnit) { + __scrollDirection = DragGestureHandler.Horizontal; + } + if (__scrollDirection !== DragGestureHandler.Horizontal) { + appDrawer.offset = -translation.y; + } + if (__scrollDirection !== DragGestureHandler.Vertical) { + mainFlickable.contentX = Math.max(0, __initialMainFlickableX - translation.x); + } + } + } + onActiveChanged: { + if (active) { + __initialMainFlickableX = mainFlickable.contentX; + } else { + appDrawer.snapDrawerStatus(); + } + } +} + diff --git a/containments/homescreen/package/contents/ui/main.qml b/containments/homescreen/package/contents/ui/main.qml index dfdf6a9e..1b77b3a0 100644 --- a/containments/homescreen/package/contents/ui/main.qml +++ b/containments/homescreen/package/contents/ui/main.qml @@ -15,6 +15,8 @@ import org.kde.plasma.components 3.0 as PlasmaComponents import org.kde.draganddrop 2.0 as DragDrop import "launcher" as Launcher +//TODO: everything using this will eventually move in Launcher +import "launcher/private" as LauncherPrivate import org.kde.plasma.private.containmentlayoutmanager 1.0 as ContainmentLayoutManager @@ -163,7 +165,8 @@ Item { //bottomMargin: favoriteStrip.height contentWidth: appletsLayout.width contentHeight: height - interactive: !plasmoid.editMode && !launcherDragManager.active + //interactive: !plasmoid.editMode && !launcherDragManager.active + interactive: false signal cancelEditModeForItemsRequested onDragStarted: cancelEditModeForItemsRequested() @@ -173,22 +176,48 @@ Item { onContentYChanged: MobileShell.HomeScreenControls.homeScreenPosition = contentY + LauncherPrivate.DragGestureHandler { + appDrawer: appDrawer + mainFlickable: mainFlickable + enabled: root.focus && appDrawer.status !== Launcher.AppDrawer.Status.Open && !appletsLayout.editMode && !plasmoid.editMode && !launcherDragManager.active + } +/* DragHandler { target: mainFlickable - yAxis.enabled: !appletsLayout.editMode + yAxis.enabled: !appletsLayout.editMode && !plasmoid.editMode && !launcherDragManager.active + xAxis.enabled: yAxis.enabled enabled: root.focus && appDrawer.status !== Launcher.AppDrawer.Status.Open - onTranslationChanged: { + property real initialMainFlickableX + enum ScrollDirection { + None, + Horizontal, + Vertical + } + property int scrollDirection: None + onTranslationChanged: {print(translation.x) if (active) { - appDrawer.offset = -translation.y + if (appDrawer.offset > PlasmaCore.Units.gridUnit) { + scrollDirection = Vertical; + } else if (Math.abs(mainFlickable.contentX - initialMainFlickableX) > PlasmaCore.Units.gridUnit) { + scrollDirection = Horizontal; + } + if (scrollDirection !== Horizontal) { + appDrawer.offset = -translation.y; + } + if (scrollDirection !== Vertical) { + mainFlickable.contentX = Math.max(0, initialMainFlickableX - translation.x); + } } } onActiveChanged: { - if (!active) { + if (active) { + initialMainFlickableX = mainFlickable.contentX; + } else { appDrawer.snapDrawerStatus(); } } } - +*/ NumberAnimation { id: scrollAnim target: mainFlickable @@ -201,7 +230,7 @@ Item { // TODO: span on multiple pages DragDrop.DropArea { id: dropArea - width: mainFlickable.width + width: Math.max(mainFlickable.width, mainFlickable.width * Math.ceil(appletsLayout.childrenRect.width/mainFlickable.width)) height: mainFlickable.height + favoriteStrip.height onDragEnter: { @@ -297,7 +326,7 @@ Item { } signal appletsLayoutInteracted - +onChildrenRectChanged: print("AAAAAA"+childrenRect.width) TapHandler { target: mainFlickable enabled: appDrawer.status !== Launcher.AppDrawer.Status.Open @@ -362,6 +391,19 @@ Item { } } } + PlasmaComponents.PageIndicator { + anchors { + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + bottomMargin: PlasmaCore.Units.gridUnit * 2 + } + PlasmaCore.ColorScope.inherit: false + PlasmaCore.ColorScope.colorGroup: PlasmaCore.Theme.ComplementaryColorGroup + parent: mainFlickable + count: Math.ceil(dropArea.width / mainFlickable.width) + visible: count > 1 + currentIndex: Math.round(mainFlickable.contentX / mainFlickable.width) + } } Launcher.AppDrawer { diff --git a/containments/panel/package/contents/ui/main.qml b/containments/panel/package/contents/ui/main.qml index 971e0b9b..d1fbaaa9 100644 --- a/containments/panel/package/contents/ui/main.qml +++ b/containments/panel/package/contents/ui/main.qml @@ -232,6 +232,7 @@ Item { z: 4 Layout.alignment: Qt.AlignTop Layout.preferredWidth: slidingPanel.wideScreen ? Math.min(slidingPanel.width/2, units.gridUnit * 25) : panelContents.width + parentSlidingPanel: slidingPanel onCloseRequested: slidingPanel.hide() }