mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
doubletaptolock: Simplify, and use "lock" instead of "sleep"
This MR does several things as a followup to https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/748: - Use the word "lock" instead of "sleep" since we are locking the device, not putting it to sleep - Simplify usage by using existing MouseAreas instead of including our own for this feature (I encountered several focus captures in folio that prevented the SwipeArea from getting events)
This commit is contained in:
parent
f085843957
commit
d4f1c78d61
12 changed files with 83 additions and 120 deletions
21
components/mobileshell/qml/homescreen/DeviceLock.qml
Normal file
21
components/mobileshell/qml/homescreen/DeviceLock.qml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// SPDX-FileCopyrightText: 2025 Florian RICHER <florian.richer@protonmail.com>
|
||||
// SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.private.mobileshell.dpmsplugin as DPMS
|
||||
import org.kde.plasma.private.mobileshell.state as MobileShellState
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
function triggerLock() {
|
||||
MobileShellState.LockscreenDBusClient.lockScreen();
|
||||
__dpms.turnDpmsOff();
|
||||
}
|
||||
|
||||
property DPMS.DPMSUtil __dpms: DPMS.DPMSUtil {
|
||||
id: dpms
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2025 Florian RICHER <florian.richer@protonmail.com>
|
||||
// SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.private.mobileshell.dpmsplugin as DPMS
|
||||
import org.kde.plasma.private.mobileshell.state as MobileShellState
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property real doubleClickInterval: 400
|
||||
property int tapCount: 0
|
||||
property bool isSwiping: false
|
||||
|
||||
signal doubleTapped()
|
||||
|
||||
onDoubleTapped: {
|
||||
MobileShellState.LockscreenDBusClient.lockScreen()
|
||||
dpms.turnDpmsOff()
|
||||
}
|
||||
|
||||
DPMS.DPMSUtil {
|
||||
id: dpms
|
||||
}
|
||||
|
||||
// Workaround for double tap detection without capture events for HomeScreen
|
||||
Timer {
|
||||
id: doubleClickTimer
|
||||
interval: root.doubleClickInterval
|
||||
onTriggered: {
|
||||
root.tapCount = 0
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
propagateComposedEvents: true
|
||||
|
||||
onReleased: {
|
||||
mouse.accepted = false
|
||||
|
||||
if (root.isSwiping) {
|
||||
// Reset the isSwiping flag to re-enable double tap detection
|
||||
root.isSwiping = false
|
||||
return
|
||||
}
|
||||
|
||||
root.tapCount++;
|
||||
if (root.tapCount === 2) {
|
||||
root.doubleTapped()
|
||||
}
|
||||
|
||||
doubleClickTimer.restart()
|
||||
}
|
||||
|
||||
// If is swiping, we don't want to trigger the double tap
|
||||
onPositionChanged: {
|
||||
mouse.accepted = false
|
||||
doubleClickTimer.stop()
|
||||
root.tapCount = 0
|
||||
root.isSwiping = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ const QString CFG_KEY_DELEGATE_ICON_SIZE = QStringLiteral("delegateIconSize");
|
|||
const QString CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND = QStringLiteral("showFavoritesBarBackground");
|
||||
const QString CFG_KEY_PAGE_TRANSITION_EFFECT = QStringLiteral("pageTransitionEffect");
|
||||
const QString CFG_KEY_SHOW_WALLPAPER_BLUR = QStringLiteral("showWallpaperBlur");
|
||||
const QString CFG_KEY_DOUBLE_TAP_TO_SLEEP = QStringLiteral("doubleTapToSleep");
|
||||
const QString CFG_KEY_DOUBLE_TAP_TO_LOCK = QStringLiteral("doubleTapToLock");
|
||||
|
||||
FolioSettings::FolioSettings(HomeScreen *parent)
|
||||
: QObject{parent}
|
||||
|
|
@ -154,16 +154,16 @@ void FolioSettings::setShowWallpaperBlur(bool showWallpaperBlur)
|
|||
}
|
||||
}
|
||||
|
||||
bool FolioSettings::doubleTapToSleep() const
|
||||
bool FolioSettings::doubleTapToLock() const
|
||||
{
|
||||
return m_doubleTapToSleep;
|
||||
return m_doubleTapToLock;
|
||||
}
|
||||
|
||||
void FolioSettings::setDoubleTapToSleep(bool doubleTapToSleep)
|
||||
void FolioSettings::setDoubleTapToLock(bool doubleTapToLock)
|
||||
{
|
||||
if (m_doubleTapToSleep != doubleTapToSleep) {
|
||||
m_doubleTapToSleep = doubleTapToSleep;
|
||||
Q_EMIT doubleTapToSleepChanged();
|
||||
if (m_doubleTapToLock != doubleTapToLock) {
|
||||
m_doubleTapToLock = doubleTapToLock;
|
||||
Q_EMIT doubleTapToLockChanged();
|
||||
save();
|
||||
}
|
||||
}
|
||||
|
|
@ -183,7 +183,7 @@ void FolioSettings::save()
|
|||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, m_showFavouritesBarBackground);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)m_pageTransitionEffect);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, m_showWallpaperBlur);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_DOUBLE_TAP_TO_SLEEP, m_doubleTapToSleep);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, m_doubleTapToLock);
|
||||
|
||||
Q_EMIT m_homeScreen->configNeedsSaving();
|
||||
}
|
||||
|
|
@ -203,7 +203,7 @@ void FolioSettings::load()
|
|||
m_showFavouritesBarBackground = m_homeScreen->config().readEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, true);
|
||||
m_pageTransitionEffect = static_cast<PageTransitionEffect>(m_homeScreen->config().readEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)SlideTransition));
|
||||
m_showWallpaperBlur = m_homeScreen->config().readEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, true);
|
||||
m_doubleTapToSleep = m_homeScreen->config().readEntry(CFG_KEY_DOUBLE_TAP_TO_SLEEP, true);
|
||||
m_doubleTapToLock = m_homeScreen->config().readEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, true);
|
||||
|
||||
Q_EMIT homeScreenRowsChanged();
|
||||
Q_EMIT homeScreenColumnsChanged();
|
||||
|
|
@ -212,7 +212,7 @@ void FolioSettings::load()
|
|||
Q_EMIT lockLayoutChanged();
|
||||
Q_EMIT delegateIconSizeChanged();
|
||||
Q_EMIT showWallpaperBlurChanged();
|
||||
Q_EMIT doubleTapToSleepChanged();
|
||||
Q_EMIT doubleTapToLockChanged();
|
||||
}
|
||||
|
||||
bool FolioSettings::saveLayoutToFile(QString path)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class FolioSettings : public QObject
|
|||
Q_PROPERTY(
|
||||
FolioSettings::PageTransitionEffect pageTransitionEffect READ pageTransitionEffect WRITE setPageTransitionEffect NOTIFY pageTransitionEffectChanged)
|
||||
Q_PROPERTY(bool showWallpaperBlur READ showWallpaperBlur WRITE setShowWallpaperBlur NOTIFY showWallpaperBlurChanged)
|
||||
Q_PROPERTY(bool doubleTapToSleep READ doubleTapToSleep WRITE setDoubleTapToSleep NOTIFY doubleTapToSleepChanged)
|
||||
Q_PROPERTY(bool doubleTapToLock READ doubleTapToLock WRITE setDoubleTapToLock NOTIFY doubleTapToLockChanged)
|
||||
|
||||
public:
|
||||
FolioSettings(HomeScreen *parent = nullptr);
|
||||
|
|
@ -69,8 +69,8 @@ public:
|
|||
bool showWallpaperBlur() const;
|
||||
void setShowWallpaperBlur(bool showWallpaperBlur);
|
||||
|
||||
bool doubleTapToSleep() const;
|
||||
void setDoubleTapToSleep(bool doubleTapToSleep);
|
||||
bool doubleTapToLock() const;
|
||||
void setDoubleTapToLock(bool doubleTapToLock);
|
||||
|
||||
Q_INVOKABLE void load();
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ Q_SIGNALS:
|
|||
void showFavouritesBarBackgroundChanged();
|
||||
void pageTransitionEffectChanged();
|
||||
void showWallpaperBlurChanged();
|
||||
void doubleTapToSleepChanged();
|
||||
void doubleTapToLockChanged();
|
||||
|
||||
private:
|
||||
void save();
|
||||
|
|
@ -103,5 +103,5 @@ private:
|
|||
bool m_showFavouritesBarBackground{false};
|
||||
PageTransitionEffect m_pageTransitionEffect{SlideTransition};
|
||||
bool m_showWallpaperBlur{false};
|
||||
bool m_doubleTapToSleep{false};
|
||||
bool m_doubleTapToLock{false};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -27,14 +27,18 @@ MouseArea {
|
|||
haptics.buttonVibrate();
|
||||
}
|
||||
|
||||
onDoubleClicked: {
|
||||
if (folio.FolioSettings.doubleTapToLock) {
|
||||
deviceLock.triggerLock();
|
||||
}
|
||||
}
|
||||
|
||||
MobileShell.HapticsEffect {
|
||||
id: haptics
|
||||
}
|
||||
|
||||
MobileShell.DoubleTapToSleep {
|
||||
id: doubleTapToSleep
|
||||
enabled: folio.FolioSettings.doubleTapToSleep
|
||||
anchors.fill: parent
|
||||
MobileShell.DeviceLock {
|
||||
id: deviceLock
|
||||
}
|
||||
|
||||
Repeater {
|
||||
|
|
|
|||
|
|
@ -28,12 +28,6 @@ Item {
|
|||
id: haptics
|
||||
}
|
||||
|
||||
MobileShell.DoubleTapToSleep {
|
||||
id: doubleTapToSleep
|
||||
enabled: folio.FolioSettings.doubleTapToSleep
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
// background when in settings view (for rearranging pages)
|
||||
Rectangle {
|
||||
id: settingsViewBackground
|
||||
|
|
|
|||
|
|
@ -19,13 +19,23 @@ MouseArea {
|
|||
readonly property real verticalMargin: Math.round((folio.HomeScreenState.pageHeight - folio.HomeScreenState.pageContentHeight) / 2)
|
||||
readonly property real horizontalMargin: Math.round((folio.HomeScreenState.pageWidth - folio.HomeScreenState.pageContentWidth) / 2)
|
||||
|
||||
onPressAndHold: {
|
||||
folio.HomeScreenState.openSettingsView()
|
||||
haptics.buttonVibrate();
|
||||
}
|
||||
|
||||
onDoubleClicked: {
|
||||
if (folio.FolioSettings.doubleTapToLock) {
|
||||
deviceLock.triggerLock();
|
||||
}
|
||||
}
|
||||
|
||||
MobileShell.HapticsEffect {
|
||||
id: haptics
|
||||
}
|
||||
|
||||
onPressAndHold: {
|
||||
folio.HomeScreenState.openSettingsView()
|
||||
haptics.buttonVibrate();
|
||||
MobileShell.DeviceLock {
|
||||
id: deviceLock
|
||||
}
|
||||
|
||||
Repeater {
|
||||
|
|
|
|||
|
|
@ -234,15 +234,15 @@ Window {
|
|||
onCurrentValueChanged: folio.FolioSettings.pageTransitionEffect = currentValue
|
||||
}
|
||||
|
||||
FormCard.FormDelegateSeparator { above: pageTransitionCombobox; below: doubleTapToSleepSwitch }
|
||||
FormCard.FormDelegateSeparator { above: pageTransitionCombobox; below: doubleTapToLockSwitch }
|
||||
|
||||
FormCard.FormSwitchDelegate {
|
||||
id: doubleTapToSleepSwitch
|
||||
id: doubleTapToLockSwitch
|
||||
text: i18n("Double tap to lock device")
|
||||
checked: folio.FolioSettings.doubleTapToSleep
|
||||
checked: folio.FolioSettings.doubleTapToLock
|
||||
onCheckedChanged: {
|
||||
if (checked != folio.FolioSettings.doubleTapToSleep) {
|
||||
folio.FolioSettings.doubleTapToSleep = checked;
|
||||
if (checked != folio.FolioSettings.doubleTapToLock) {
|
||||
folio.FolioSettings.doubleTapToLock = checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include "halcyonsettings.h"
|
||||
|
||||
const QString CFG_KEY_SHOW_WALLPAPER_BLUR = QStringLiteral("showWallpaperBlur");
|
||||
const QString CFG_KEY_DOUBLE_TAP_TO_SLEEP = QStringLiteral("doubleTapToSleep");
|
||||
const QString CFG_KEY_DOUBLE_TAP_TO_LOCK = QStringLiteral("doubleTapToLock");
|
||||
|
||||
HalcyonSettings::HalcyonSettings(QObject *parent, KConfigGroup config)
|
||||
: QObject{parent}
|
||||
|
|
@ -27,16 +27,16 @@ void HalcyonSettings::setShowWallpaperBlur(bool showWallpaperBlur)
|
|||
}
|
||||
}
|
||||
|
||||
bool HalcyonSettings::doubleTapToSleep() const
|
||||
bool HalcyonSettings::doubleTapToLock() const
|
||||
{
|
||||
return m_doubleTapToSleep;
|
||||
return m_doubleTapToLock;
|
||||
}
|
||||
|
||||
void HalcyonSettings::setDoubleTapToSleep(bool doubleTapToSleep)
|
||||
void HalcyonSettings::setDoubleTapToLock(bool doubleTapToLock)
|
||||
{
|
||||
if (m_doubleTapToSleep != doubleTapToSleep) {
|
||||
m_doubleTapToSleep = doubleTapToSleep;
|
||||
Q_EMIT doubleTapToSleepChanged();
|
||||
if (m_doubleTapToLock != doubleTapToLock) {
|
||||
m_doubleTapToLock = doubleTapToLock;
|
||||
Q_EMIT doubleTapToLockChanged();
|
||||
save();
|
||||
}
|
||||
}
|
||||
|
|
@ -44,7 +44,7 @@ void HalcyonSettings::setDoubleTapToSleep(bool doubleTapToSleep)
|
|||
void HalcyonSettings::save()
|
||||
{
|
||||
m_config.writeEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, m_showWallpaperBlur);
|
||||
m_config.writeEntry(CFG_KEY_DOUBLE_TAP_TO_SLEEP, m_doubleTapToSleep);
|
||||
m_config.writeEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, m_doubleTapToLock);
|
||||
|
||||
m_config.sync();
|
||||
}
|
||||
|
|
@ -52,5 +52,5 @@ void HalcyonSettings::save()
|
|||
void HalcyonSettings::load()
|
||||
{
|
||||
m_showWallpaperBlur = m_config.readEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, false);
|
||||
m_doubleTapToSleep = m_config.readEntry(CFG_KEY_DOUBLE_TAP_TO_SLEEP, true);
|
||||
m_doubleTapToLock = m_config.readEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, true);
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ class HalcyonSettings : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool showWallpaperBlur READ showWallpaperBlur WRITE setShowWallpaperBlur NOTIFY showWallpaperBlurChanged)
|
||||
Q_PROPERTY(bool doubleTapToSleep READ doubleTapToSleep WRITE setDoubleTapToSleep NOTIFY doubleTapToSleepChanged)
|
||||
Q_PROPERTY(bool doubleTapToLock READ doubleTapToLock WRITE setDoubleTapToLock NOTIFY doubleTapToLockChanged)
|
||||
|
||||
public:
|
||||
HalcyonSettings(QObject *parent = nullptr, KConfigGroup config = {});
|
||||
|
|
@ -19,19 +19,19 @@ public:
|
|||
bool showWallpaperBlur() const;
|
||||
void setShowWallpaperBlur(bool blurWallpaper);
|
||||
|
||||
bool doubleTapToSleep() const;
|
||||
void setDoubleTapToSleep(bool doubleTapToSleep);
|
||||
bool doubleTapToLock() const;
|
||||
void setDoubleTapToLock(bool doubleTapToLock);
|
||||
|
||||
Q_SIGNALS:
|
||||
void showWallpaperBlurChanged();
|
||||
void doubleTapToSleepChanged();
|
||||
void doubleTapToLockChanged();
|
||||
|
||||
private:
|
||||
void save();
|
||||
void load();
|
||||
|
||||
bool m_showWallpaperBlur{false};
|
||||
bool m_doubleTapToSleep{true};
|
||||
bool m_doubleTapToLock{true};
|
||||
|
||||
KConfigGroup m_config;
|
||||
};
|
||||
|
|
@ -108,14 +108,14 @@ Item {
|
|||
|
||||
onLongPressed: root.openConfigure()
|
||||
onDoubleTapped: {
|
||||
if (Plasmoid.settings.doubleTapToSleep) {
|
||||
doubleTapToSleep.doubleTapped();
|
||||
if (Plasmoid.settings.doubleTapToLock) {
|
||||
deviceLock.triggerLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MobileShell.DoubleTapToSleep {
|
||||
id: doubleTapToSleep
|
||||
MobileShell.DeviceLock {
|
||||
id: deviceLock
|
||||
}
|
||||
|
||||
FavoritesView {
|
||||
|
|
|
|||
|
|
@ -103,10 +103,10 @@ Window {
|
|||
FormCard.FormSwitchDelegate {
|
||||
id: doubleTapToSleepSwitch
|
||||
text: i18n("Double tap to lock device")
|
||||
checked: Plasmoid.settings.doubleTapToSleep
|
||||
checked: Plasmoid.settings.doubleTapToLock
|
||||
onCheckedChanged: {
|
||||
if (checked != Plasmoid.settings.doubleTapToSleep) {
|
||||
Plasmoid.settings.doubleTapToSleep = checked;
|
||||
if (checked != Plasmoid.settings.doubleTapToLock) {
|
||||
Plasmoid.settings.doubleTapToLock = checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue