mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
open() alone does not set intendedToBeVisible, so the drawer immediately closes itself. Call the proper toggle path instead. Also hide the drag handle since convergence users click.
79 lines
2.6 KiB
QML
79 lines
2.6 KiB
QML
/*
|
|
* SPDX-FileCopyrightText: 2021-2024 Devin Lin <devin@kde.org>
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.0-or-later
|
|
*/
|
|
|
|
import QtQuick 2.15
|
|
|
|
import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings
|
|
import org.kde.plasma.private.mobileshell as MobileShell
|
|
|
|
/**
|
|
* Component that triggers the opening and closing of an ActionDrawer when dragged on with touch or mouse.
|
|
*/
|
|
MobileShell.SwipeArea {
|
|
id: root
|
|
mode: MobileShell.SwipeArea.VerticalOnly
|
|
|
|
required property ActionDrawer actionDrawer
|
|
|
|
function startSwipe() {
|
|
if (actionDrawer.intendedToBeVisible) {
|
|
// ensure the action drawer state is consistent
|
|
actionDrawer.closeImmediately();
|
|
}
|
|
actionDrawer.cancelAnimations();
|
|
actionDrawer.dragging = true;
|
|
actionDrawer.opened = false;
|
|
|
|
// must be after properties other are set, we cannot have actionDrawer.updateState() be called
|
|
actionDrawer.offset = 0;
|
|
actionDrawer.oldOffset = 0;
|
|
actionDrawer.intendedToBeVisible = true;
|
|
}
|
|
|
|
function startSwipeWithPoint(point) {
|
|
if (ShellSettings.Settings.convergenceModeEnabled) {
|
|
actionDrawer.openToPinnedMode = false;
|
|
} else if (point.x < root.width / 2) {
|
|
actionDrawer.openToPinnedMode = ShellSettings.Settings.actionDrawerTopLeftMode == ShellSettings.Settings.Pinned;
|
|
} else {
|
|
actionDrawer.openToPinnedMode = ShellSettings.Settings.actionDrawerTopRightMode == ShellSettings.Settings.Pinned;
|
|
}
|
|
|
|
startSwipe();
|
|
}
|
|
|
|
function endSwipe() {
|
|
actionDrawer.dragging = false;
|
|
actionDrawer.updateState();
|
|
}
|
|
|
|
function updateOffset(offsetY) {
|
|
actionDrawer.offset += offsetY;
|
|
}
|
|
|
|
anchors.fill: parent
|
|
|
|
onSwipeStarted: (point) => startSwipeWithPoint(point)
|
|
onSwipeEnded: endSwipe()
|
|
onSwipeMove: (totalDeltaX, totalDeltaY, deltaX, deltaY) => updateOffset(deltaY);
|
|
|
|
onTouchpadScrollStarted: (point) => startSwipeWithPoint(point)
|
|
onTouchpadScrollEnded: endSwipe()
|
|
onTouchpadScrollMove: (totalDeltaX, totalDeltaY, deltaX, deltaY) => updateOffset(deltaY);
|
|
|
|
// In convergence mode, allow click to toggle the action drawer (mouse-friendly)
|
|
onClicked: {
|
|
if (ShellSettings.Settings.convergenceModeEnabled) {
|
|
if (actionDrawer.intendedToBeVisible) {
|
|
actionDrawer.close();
|
|
} else {
|
|
actionDrawer.openToPinnedMode = false;
|
|
actionDrawer.intendedToBeVisible = true;
|
|
actionDrawer.open();
|
|
}
|
|
}
|
|
}
|
|
}
|