mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
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.
57 lines
1.4 KiB
QML
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();
|
|
}
|
|
}
|
|
}
|