diff --git a/components/mobileshell/qml/homescreen/DeviceLock.qml b/components/mobileshell/qml/homescreen/DeviceLock.qml new file mode 100644 index 00000000..c6b57bfa --- /dev/null +++ b/components/mobileshell/qml/homescreen/DeviceLock.qml @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2025 Florian RICHER +// 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 + } +} + diff --git a/components/mobileshell/qml/homescreen/DoubleTapToSleep.qml b/components/mobileshell/qml/homescreen/DoubleTapToSleep.qml deleted file mode 100644 index 8681f8da..00000000 --- a/components/mobileshell/qml/homescreen/DoubleTapToSleep.qml +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Florian RICHER -// 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 - } - } -} - diff --git a/containments/homescreens/folio/foliosettings.cpp b/containments/homescreens/folio/foliosettings.cpp index 3b1cbc09..9faeb751 100644 --- a/containments/homescreens/folio/foliosettings.cpp +++ b/containments/homescreens/folio/foliosettings.cpp @@ -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(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) diff --git a/containments/homescreens/folio/foliosettings.h b/containments/homescreens/folio/foliosettings.h index 1eb8e704..f3743010 100644 --- a/containments/homescreens/folio/foliosettings.h +++ b/containments/homescreens/folio/foliosettings.h @@ -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}; }; diff --git a/containments/homescreens/folio/package/contents/ui/FavouritesBar.qml b/containments/homescreens/folio/package/contents/ui/FavouritesBar.qml index 9b90fb67..f8a75cc0 100644 --- a/containments/homescreens/folio/package/contents/ui/FavouritesBar.qml +++ b/containments/homescreens/folio/package/contents/ui/FavouritesBar.qml @@ -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 { diff --git a/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml b/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml index 887bdb03..9eb8218a 100644 --- a/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml +++ b/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml @@ -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 diff --git a/containments/homescreens/folio/package/contents/ui/HomeScreenPages.qml b/containments/homescreens/folio/package/contents/ui/HomeScreenPages.qml index 7a8715c5..0493fbc1 100644 --- a/containments/homescreens/folio/package/contents/ui/HomeScreenPages.qml +++ b/containments/homescreens/folio/package/contents/ui/HomeScreenPages.qml @@ -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 { diff --git a/containments/homescreens/folio/package/contents/ui/settings/SettingsWindow.qml b/containments/homescreens/folio/package/contents/ui/settings/SettingsWindow.qml index c0de1a04..6bdda6a5 100644 --- a/containments/homescreens/folio/package/contents/ui/settings/SettingsWindow.qml +++ b/containments/homescreens/folio/package/contents/ui/settings/SettingsWindow.qml @@ -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; } } } diff --git a/containments/homescreens/halcyon/halcyonsettings.cpp b/containments/homescreens/halcyon/halcyonsettings.cpp index d6114161..f0608ebc 100644 --- a/containments/homescreens/halcyon/halcyonsettings.cpp +++ b/containments/homescreens/halcyon/halcyonsettings.cpp @@ -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); } \ No newline at end of file diff --git a/containments/homescreens/halcyon/halcyonsettings.h b/containments/homescreens/halcyon/halcyonsettings.h index a3dc2665..5fa13869 100644 --- a/containments/homescreens/halcyon/halcyonsettings.h +++ b/containments/homescreens/halcyon/halcyonsettings.h @@ -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; }; \ No newline at end of file diff --git a/containments/homescreens/halcyon/package/contents/ui/HomeScreen.qml b/containments/homescreens/halcyon/package/contents/ui/HomeScreen.qml index 74454bf0..0d400393 100644 --- a/containments/homescreens/halcyon/package/contents/ui/HomeScreen.qml +++ b/containments/homescreens/halcyon/package/contents/ui/HomeScreen.qml @@ -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 { diff --git a/containments/homescreens/halcyon/package/contents/ui/settings/SettingsWindow.qml b/containments/homescreens/halcyon/package/contents/ui/settings/SettingsWindow.qml index ea3b8f36..987b8c46 100644 --- a/containments/homescreens/halcyon/package/contents/ui/settings/SettingsWindow.qml +++ b/containments/homescreens/halcyon/package/contents/ui/settings/SettingsWindow.qml @@ -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; } } }