From 1101599e5893b995e7b6f622242c8b69f663f500 Mon Sep 17 00:00:00 2001 From: Devin Lin Date: Thu, 10 Feb 2022 23:20:04 -0500 Subject: [PATCH] quicksettings: Add caffeine quicksetting --- quicksettings/CMakeLists.txt | 1 + quicksettings/caffeine/contents/ui/main.qml | 71 +++++++++++++++++++++ quicksettings/caffeine/metadata.desktop | 18 ++++++ 3 files changed, 90 insertions(+) create mode 100644 quicksettings/caffeine/contents/ui/main.qml create mode 100644 quicksettings/caffeine/metadata.desktop diff --git a/quicksettings/CMakeLists.txt b/quicksettings/CMakeLists.txt index f25fe9ec..998d065e 100644 --- a/quicksettings/CMakeLists.txt +++ b/quicksettings/CMakeLists.txt @@ -2,4 +2,5 @@ # SPDX-License-Identifier: GPL-2.0-or-later plasma_install_package(airplanemode org.kde.plasma.airplanemode quicksettings) +plasma_install_package(caffeine org.kde.plasma.caffeine quicksettings) add_subdirectory(nightcolor) diff --git a/quicksettings/caffeine/contents/ui/main.qml b/quicksettings/caffeine/contents/ui/main.qml new file mode 100644 index 00000000..ae61aa6d --- /dev/null +++ b/quicksettings/caffeine/contents/ui/main.qml @@ -0,0 +1,71 @@ +/* + * SPDX-FileCopyrightText: 2022 Devin Lin + * + * SPDX-License-Identifier: LGPL-2.0-or-later + */ + +import org.kde.plasma.private.mobileshell 1.0 as MobileShell +import org.kde.plasma.core 2.0 as PlasmaCore + +MobileShell.QuickSetting { + text: i18n("Caffeine") + icon: "system-suspend-hibernate" + status: enabled ? i18n("Tap to disable sleep suspension") : i18n("Tap to suspend sleep") + enabled: false + + PlasmaCore.DataSource { + id: pmSource + engine: "powermanagement" + connectedSources: sources + onSourceAdded: { + disconnectSource(source); + connectSource(source); + } + onSourceRemoved: { + disconnectSource(source); + } + } + + property int cookie1: -1 + property int cookie2: -1 + + function toggle() { + let inhibit = !enabled; + const service = pmSource.serviceForSource("PowerDevil"); + if (inhibit) { + const reason = i18n("Plasma Mobile has enabled system-wide inhibition"); + const op1 = service.operationDescription("beginSuppressingSleep"); + op1.reason = reason; + const op2 = service.operationDescription("beginSuppressingScreenPowerManagement"); + op2.reason = reason; + + const job1 = service.startOperationCall(op1); + job1.finished.connect(job => { + cookie1 = job.result; + }); + + const job2 = service.startOperationCall(op2); + job2.finished.connect(job => { + cookie2 = job.result; + }); + } else { + const op1 = service.operationDescription("stopSuppressingSleep"); + op1.cookie = cookie1; + const op2 = service.operationDescription("stopSuppressingScreenPowerManagement"); + op2.cookie = cookie2; + + const job1 = service.startOperationCall(op1); + job1.finished.connect(job => { + cookie1 = -1; + }); + + const job2 = service.startOperationCall(op2); + job2.finished.connect(job => { + cookie2 = -1; + }); + + } + enabled = inhibit; + } +} + diff --git a/quicksettings/caffeine/metadata.desktop b/quicksettings/caffeine/metadata.desktop new file mode 100644 index 00000000..fd6d8d84 --- /dev/null +++ b/quicksettings/caffeine/metadata.desktop @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2022 Devin Lin +# SPDX-License-Identifier: GPL-2.0-or-later + +[Desktop Entry] +Name=Caffeine +Icon=system-suspend-hibernate + +Type=Service +X-KDE-ServiceTypes=KPackage/GenericQML + +X-KDE-PluginInfo-Author=Devin Lin +X-KDE-PluginInfo-Email=devin@kde.org +X-KDE-PluginInfo-Name=org.kde.plasma.caffeine +X-KDE-PluginInfo-Version=0.1 +X-KDE-PluginInfo-Website=https://kde.org +X-KDE-PluginInfo-License=GPL + +