mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
This adds support for touchpad scrolling in various shell components, such as the lockscreen, homescreen and action drawer. Currently TODO because it appears to be very buggy when there is a control underneath that also accepts touchpad input (ex. flickable). The touchpad scroll start appears to get called by Qt, but not the end event, so I am unable to "let go" of the flick. Not sure if it's a wayland issue. This also appears to not work in the nested KWin session, not sure if it's because of libinput or something
65 lines
2.1 KiB
QML
65 lines
2.1 KiB
QML
/*
|
|
* SPDX-FileCopyrightText: 2021-2022 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.visible) {
|
|
// 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.visible = true;
|
|
}
|
|
|
|
function startSwipeWithPoint(point) {
|
|
// if the user swiped from the top left, otherwise it's from the top right
|
|
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);
|
|
}
|