mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
lockscreen: Add DoubleTap to Lock in Lockscreen
Thx @devinlin to help me fix the MouseArea ^^ Can fix https://invent.kde.org/teams/plasma-mobile/issues/-/issues/90
This commit is contained in:
parent
975b6bd3bb
commit
a329099b83
5 changed files with 113 additions and 1 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
ecm_add_qml_module(shellsettingsplugin URI org.kde.plasma.private.mobileshell.shellsettingsplugin GENERATE_PLUGIN_SOURCE)
|
ecm_add_qml_module(shellsettingsplugin URI org.kde.plasma.private.mobileshell.shellsettingsplugin GENERATE_PLUGIN_SOURCE)
|
||||||
target_sources(shellsettingsplugin PRIVATE mobileshellsettings.cpp)
|
target_sources(shellsettingsplugin PRIVATE kwinsettings.cpp mobileshellsettings.cpp)
|
||||||
|
|
||||||
target_link_libraries(shellsettingsplugin PRIVATE
|
target_link_libraries(shellsettingsplugin PRIVATE
|
||||||
Qt::Qml
|
Qt::Qml
|
||||||
|
|
|
||||||
36
components/shellsettingsplugin/kwinsettings.cpp
Normal file
36
components/shellsettingsplugin/kwinsettings.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2025 Florian RICHER <florian.richer@protonmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "kwinsettings.h"
|
||||||
|
|
||||||
|
const QString CONFIG_FILE = QStringLiteral("kwinrc");
|
||||||
|
const QString WAYLAND_CONFIG_GROUP = QStringLiteral("Wayland");
|
||||||
|
|
||||||
|
KWinSettings::KWinSettings(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
, m_config{KSharedConfig::openConfig(CONFIG_FILE, KConfig::SimpleConfig)}
|
||||||
|
{
|
||||||
|
m_configWatcher = KConfigWatcher::create(m_config);
|
||||||
|
connect(m_configWatcher.data(), &KConfigWatcher::configChanged, this, [this](const KConfigGroup &group, const QByteArrayList &names) -> void {
|
||||||
|
Q_UNUSED(names)
|
||||||
|
if (group.name() == WAYLAND_CONFIG_GROUP) {
|
||||||
|
Q_EMIT doubleTapWakeupChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KWinSettings::doubleTapWakeup() const
|
||||||
|
{
|
||||||
|
auto group = KConfigGroup{m_config, WAYLAND_CONFIG_GROUP};
|
||||||
|
return group.readEntry("DoubleTapWakeup", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KWinSettings::setDoubleTapWakeup(bool enabled)
|
||||||
|
{
|
||||||
|
auto group = KConfigGroup{m_config, WAYLAND_CONFIG_GROUP};
|
||||||
|
group.writeEntry("DoubleTapWakeup", enabled, KConfigGroup::Notify);
|
||||||
|
m_config->sync();
|
||||||
|
}
|
||||||
44
components/shellsettingsplugin/kwinsettings.h
Normal file
44
components/shellsettingsplugin/kwinsettings.h
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2025 Florian RICHER <florian.richer@protonmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <KConfigGroup>
|
||||||
|
#include <KConfigWatcher>
|
||||||
|
#include <KSharedConfig>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qqmlintegration.h>
|
||||||
|
|
||||||
|
class KWinSettings : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
QML_NAMED_ELEMENT(KWinSettings)
|
||||||
|
QML_SINGLETON
|
||||||
|
|
||||||
|
Q_PROPERTY(bool doubleTapWakeup READ doubleTapWakeup WRITE setDoubleTapWakeup NOTIFY doubleTapWakeupChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
KWinSettings(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether Double Tap to Wakeup is enabled.
|
||||||
|
*/
|
||||||
|
bool doubleTapWakeup() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether Double Tap to Wakeup is enabled.
|
||||||
|
*
|
||||||
|
* @param enabled
|
||||||
|
*/
|
||||||
|
void setDoubleTapWakeup(bool enabled);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void doubleTapWakeupChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
KConfigWatcher::Ptr m_configWatcher;
|
||||||
|
KSharedConfig::Ptr m_config;
|
||||||
|
};
|
||||||
|
|
@ -61,6 +61,20 @@ KCM.SimpleKCM {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FormCard.FormDelegateSeparator { above: autoHidePanels; below: doubleTapWakeup }
|
||||||
|
|
||||||
|
FormCard.FormSwitchDelegate {
|
||||||
|
id: doubleTapWakeup
|
||||||
|
text: i18n("Double Tap to Wakeup")
|
||||||
|
description: i18n("When active, it allow to wakeup the device just with double tap when the screen is off.")
|
||||||
|
checked: ShellSettings.KWinSettings.doubleTapWakeup
|
||||||
|
onCheckedChanged: {
|
||||||
|
if (checked != ShellSettings.KWinSettings.doubleTapWakeup) {
|
||||||
|
ShellSettings.KWinSettings.doubleTapWakeup = checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FormCard.FormHeader {
|
FormCard.FormHeader {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import org.kde.notificationmanager as Notifications
|
||||||
import org.kde.plasma.private.mobileshell as MobileShell
|
import org.kde.plasma.private.mobileshell as MobileShell
|
||||||
import org.kde.plasma.private.mobileshell.dpmsplugin as DPMS
|
import org.kde.plasma.private.mobileshell.dpmsplugin as DPMS
|
||||||
import org.kde.plasma.components 3.0 as PC3
|
import org.kde.plasma.components 3.0 as PC3
|
||||||
|
import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings
|
||||||
|
|
||||||
import org.kde.kirigami 2.12 as Kirigami
|
import org.kde.kirigami 2.12 as Kirigami
|
||||||
|
|
||||||
|
|
@ -207,6 +208,23 @@ Item {
|
||||||
color: Qt.rgba(0, 0, 0, 0.5)
|
color: Qt.rgba(0, 0, 0, 0.5)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
// Disable "double tap to lock" to avoid accidental locking
|
||||||
|
// when the keypad is open, and the user is typing their password.
|
||||||
|
enabled: flickable.openFactor < 0.1
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
onDoubleClicked: (mouse) => {
|
||||||
|
if (ShellSettings.KWinSettings.doubleTapWakeup) {
|
||||||
|
deviceLock.triggerLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MobileShell.DeviceLock {
|
||||||
|
id: deviceLock
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Keypad {
|
Keypad {
|
||||||
id: keypad
|
id: keypad
|
||||||
visible: !root.lockScreenState.canBeUnlocked // don't show for passwordless login
|
visible: !root.lockScreenState.canBeUnlocked // don't show for passwordless login
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue