shift-shell/containments/homescreens/folio/qml/DelegateDropArea.qml
Devin Lin 4c76f55b5c folio: Refactor and implement support for proper drag & drop
This refactors the homescreen state object to isolate drag & drop from
swipe states, allowing for using proper system-level drag & drop for delegate
movement. This then ports the new applet list to use it.
2025-12-13 21:24:05 -05:00

57 lines
1.4 KiB
QML

// SPDX-FileCopyrightText: 2025 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
DropArea {
id: root
property Folio.HomeScreen folio
property Folio.HomeScreenState homeScreenState: folio.HomeScreenState
keys: ["text/x-plasmoidservicename"]
property real prevX
property real prevY
onEntered: (drag) => {
drag.accept();
const widthOffset = folio.HomeScreenState.pageCellWidth / 2;
const heightOffset = folio.HomeScreenState.pageCellHeight / 2;
homeScreenState.startDelegateWidgetListDrag(
drag.x - widthOffset,
drag.y - heightOffset,
widthOffset,
heightOffset,
drag.getDataAsString("text/x-plasmoidservicename")
);
homeScreenState.dragStart();
prevX = drag.x;
prevY = drag.y;
}
onDropped: (drop) => {
drop.accept();
dropWaitTimer.restart();
}
onExited: {
homeScreenState.dragCancel();
}
onPositionChanged: (drag) => {
drag.accept();
homeScreenState.dragMove(drag.x - prevX, drag.y - prevY);
prevX = drag.x;
prevY = drag.y;
}
// HACK: Seems to crash otherwise, Qt bug?
Timer {
id: dropWaitTimer
interval: 10
onTriggered: {
homeScreenState.dragDrop();
}
}
}