/* * SPDX-FileCopyrightText: 2021 Devin Lin * * SPDX-License-Identifier: LGPL-2.0-or-later */ import QtQuick 2.15 import QtQuick.Layouts 1.15 import org.kde.taskmanager 0.1 as TaskManager import org.kde.plasma.core 2.1 as PlasmaCore import org.kde.plasma.components 3.0 as PlasmaComponents import org.kde.plasma.private.nanoshell 2.0 as NanoShell import org.kde.plasma.private.mobileshell 1.0 as MobileShell Flickable { id: root required property var homeScreenState // we use flickable solely for capturing flicks, not positioning elements contentWidth: width + 99999 contentHeight: height + 99999 contentX: startContentX contentY: startContentY readonly property real startContentX: contentWidth / 2 readonly property real startContentY: contentHeight / 2 // update position from flickable movement property real oldContentX property real oldContentY onContentXChanged: { homeScreenState.updatePositionWithOffset(contentX - oldContentX, 0); oldContentX = contentX; } onContentYChanged: { homeScreenState.updatePositionWithOffset(0, -(contentY - oldContentY)); oldContentY = contentY; } onMovementStarted: homeScreenState.cancelAnimations(); onMovementEnded: { if (!homeScreenState.animationsRunning) { homeScreenState.updateState(); } resetPosition(); } onFlickEnded: { homeScreenState.cancelEditModeForItemsRequested() resetPosition(); } onDragStarted: homeScreenState.cancelEditModeForItemsRequested() onDragEnded: homeScreenState.cancelEditModeForItemsRequested() onFlickStarted: { homeScreenState.cancelEditModeForItemsRequested(); root.cancelFlick(); } onDraggingChanged: { if (!dragging) { resetPosition(); if (!homeScreenState.animationsRunning) { homeScreenState.updateState(); } } else { homeScreenState.cancelAnimations(); } } function resetPosition() { oldContentX = startContentX; contentX = startContentX; oldContentY = startContentY; contentY = startContentY; } }