From 3e605ee375916b319a64cf220fbde664f79cb937991adfb2238ba12a50da9516 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Mon, 17 Jun 2024 09:56:40 +0000 Subject: [PATCH] Accepting request 1181276 from home:Vogtinator:plasma6 - Add patch to revert feature until new polkit rules got whitelisted: * 0001-Revert-Added-setting-for-battery-conservation-mode-L.patch OBS-URL: https://build.opensuse.org/request/show/1181276 OBS-URL: https://build.opensuse.org/package/show/KDE:Frameworks/powerdevil6?expand=0&rev=20 --- ...ting-for-battery-conservation-mode-L.patch | 748 ++++++++++++++++++ powerdevil6.changes | 6 + powerdevil6.spec | 2 + 3 files changed, 756 insertions(+) create mode 100644 0001-Revert-Added-setting-for-battery-conservation-mode-L.patch diff --git a/0001-Revert-Added-setting-for-battery-conservation-mode-L.patch b/0001-Revert-Added-setting-for-battery-conservation-mode-L.patch new file mode 100644 index 0000000..539b19a --- /dev/null +++ b/0001-Revert-Added-setting-for-battery-conservation-mode-L.patch @@ -0,0 +1,748 @@ +From 93066eb9ec30ec23ca0eba8eebf4148533f5bd90 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Mon, 17 Jun 2024 11:49:22 +0200 +Subject: [PATCH] Revert "Added setting for battery conservation mode (Lenovo)" + +This reverts commit 53f688de8eff37a52efed55b52d9e51f5217a185. +--- + daemon/chargethreshold_helper_actions.actions | 120 ------------- + daemon/chargethresholdhelper.cpp | 52 ------ + daemon/chargethresholdhelper.h | 4 - + daemon/dbus/org.kde.Solid.PowerManagement.xml | 6 - + daemon/powerdevilcore.cpp | 30 ---- + daemon/powerdevilcore.h | 4 - + kcmodule/profiles/ExternalServiceSettings.cpp | 158 +++++------------- + kcmodule/profiles/ExternalServiceSettings.h | 20 --- + kcmodule/profiles/PowerKCM.cpp | 6 - + kcmodule/profiles/PowerKCM.h | 3 - + kcmodule/profiles/ui/GlobalConfig.qml | 16 +- + 11 files changed, 43 insertions(+), 376 deletions(-) + +Index: powerdevil-6.1.0/daemon/chargethreshold_helper_actions.actions +=================================================================== +--- powerdevil-6.1.0.orig/daemon/chargethreshold_helper_actions.actions ++++ powerdevil-6.1.0/daemon/chargethreshold_helper_actions.actions +@@ -231,111 +231,3 @@ Description[zh_CN]=请进行身份验证 + Description[zh_TW]=認證以設定電池充電限制。 + Policy=auth_admin + Persistence=session +- +-[org.kde.powerdevil.chargethresholdhelper.getconservationmode] +-Name=Check battery conservation mode +-Name[ar]=تحقق من وضع الحفاظ على البطارية +-Name[bg]=Проверка на режима за пестене на батерията +-Name[ca]=Comprova el mode de conservació de la bateria +-Name[ca@valencia]=Comprova el mode de conservació de la bateria +-Name[en_GB]=Check battery conservation mode +-Name[eo]=Kontroli baterikonservan reĝimon +-Name[es]=Comprobar el modo de conservación de la batería +-Name[eu]=Egiaztatu bateriaren kontserbazio-modua +-Name[fr]=Vérifier le mode d'économie d'énergie +-Name[he]=בדיקת מצב שימור סוללה +-Name[hu]=Akkumulátorkíméló mód ellenőrzése +-Name[ia]=Verifica le modo de conservation de batteria +-Name[it]=Controlla la modalità di risparmio della batteria +-Name[ka]=ელემენტის შენახვის რეჟიმის შემოწმება +-Name[lt]=Tikrinti akumuliatoriaus saugojimo veikseną +-Name[nl]=Conserveringsmodus van batterij controleren +-Name[pl]=Odczytaj tryb zarządzania baterią +-Name[sk]=Skontrolovať režim ochrany batérie +-Name[sl]=Preverite način varčevanja z baterijo +-Name[tr]=Pil Tasarrufu Kipini Denetle +-Name[uk]=Перевірка режиму консервації акумулятора +-Name[x-test]=xxCheck battery conservation modexx +-Name[zh_CN]=检查节电模式模式 +-Name[zh_TW]=查看電池保護模式 +-Description=Authenticate to check the current state of battery conservation mode. +-Description[ar]=استوثق للتحقق من الحالة الحالية لوضع الحفاظ على البطارية. +-Description[bg]=Удостоверете автентичността си, за да проверите текущото състояние на режима за пестене на батерията. +-Description[ca]=Autenticació per a comprovar l'estat actual del mode de conservació de la bateria. +-Description[ca@valencia]=Autenticació per a comprovar l'estat actual del mode de conservació de la bateria. +-Description[en_GB]=Authenticate to check the current state of battery conservation mode. +-Description[eo]=Aŭtentiĝu por kontroli la aktualan staton de bateriokonserva reĝimo. +-Description[es]=Debe autenticarse para comprobar el estado actual del modo de conservación de la batería. +-Description[eu]=Kautotu bateriaren kontserbazio-moduaren uneko egoera egiaztatzeko. +-Description[fr]=S'authentifier pour vérifier l'état courant à la limite actuelle de charge de la batterie +-Description[he]=יש לעבור אימות כדי לבדוק את מה המצב הנוכחי של מצב שימור הסוללה. +-Description[hu]=Hitelesítés szükséges az akkumulátorkímélő mód jelenlegi állapotának ellenőrzéséhez. +-Description[ia]=Authentica per verificar le stato currente del modo de conservation de batteria. +-Description[it]=Autenticati per controllare lo stato attuale della modalità di risparmio della batteria. +-Description[ka]=გაიარეთ ავთენტიკაცია ელემენტის შენახვის მიმდინარე რეჟიმის მისაღებად. +-Description[lt]=Norint tikrinti akumuliatoriaus saugojimo veikseną, turi būti nustatyta tapatybė. +-Description[nl]=Authenticeren om de huidige status van de conserveringsmodus van de batterij te controleren. +-Description[pl]=Uwierzytelnij, aby odczytaj tryb zarządzania baterią. +-Description[sk]=Overenie totožnosti na zobrazenie aktuálneho režimu ochrany batérie. +-Description[sl]=Avtenticirajte se, da preverite trenutno stanje načina varčevanja baterije. +-Description[tr]=Pil tasarrufu kipinin geçerli durumunu denetlemek için kimliğinizi doğrulayın. +-Description[uk]=Пройдіть розпізнавання для перевірки поточного стану режиму консервації акумулятора. +-Description[x-test]=xxAuthenticate to check the current state of battery conservation mode.xx +-Description[zh_CN]=进行身份验证以检查节电模式的当前状态。 +-Description[zh_TW]=認證以查看目前的電池保護模式。 +-Policy=yes +-PolicyInactive=yes +- +-[org.kde.powerdevil.chargethresholdhelper.setconservationmode] +-Name=Set battery conservation mode +-Name[ar]=عيّن وضع الحفاظ على البطارية +-Name[bg]=Задаване на режим за пестене на батерията +-Name[ca]=Estableix el mode de conservació de la bateria +-Name[ca@valencia]=Establix el mode de conservació de la bateria +-Name[en_GB]=Set battery conservation mode +-Name[eo]=Agordi baterikonservan reĝimon +-Name[es]=Definir el modo de conservación de la batería +-Name[eu]=Ezarri bateriaren kontserbazio-modua +-Name[fr]=Définir le mode d'économie de la batterie +-Name[he]=הגדרת מצב שימור סוללה +-Name[hu]=Akkumulátorkímélő mód beállítása +-Name[ia]=Fixa le modo de conservation del batteria +-Name[it]=Imposta la modalità di risparmio della batteria +-Name[ka]=ელემენტის შენახვის რეჟიმის დაყენება +-Name[lt]=Nustatyti akumuliatoriaus saugojimo veikseną +-Name[nl]=De conserveringsmodus van de batterij instellen +-Name[pl]=Ustaw tryb zarządzania baterią +-Name[sk]=Nastaviť režim ochrany batérie +-Name[sl]=Nastavi način varčevanja baterije +-Name[tr]=Pil Tasarrufu Kipini Ayarla +-Name[uk]=Встановлення режиму консервації акумулятора +-Name[x-test]=xxSet battery conservation modexx +-Name[zh_CN]=设置节电模式 +-Name[zh_TW]=設定電池保護模式 +-Description=Authenticate to set the battery conservation mode. +-Description[ar]=استوثق لتعيين وضع الحفاظ على البطارية. +-Description[bg]=Удостоверете автентичността си, за да зададете режима за пестене на батерията. +-Description[ca]=Autenticació per a establir el mode de conservació de la bateria. +-Description[ca@valencia]=Autenticació per a establir el mode de conservació de la bateria. +-Description[en_GB]=Authenticate to set the battery conservation mode. +-Description[eo]=Aŭtentiĝu por meti la bateriokonservan reĝimon. +-Description[es]=Debe autenticarse para definir el modo de conservación de la batería. +-Description[eu]=Kautotu bateriaren kontserbazio-modua ezartzeko. +-Description[fr]=S'authentifier pour définir l'état d'économie de la batterie +-Description[he]=יש לעבור אימות כדי להגדיר את מצב שימור הסוללה. +-Description[hu]=Hitelesítés szükséges az akkumulátorkímélő mód beállításához. +-Description[ia]=Authentica per fixar le modo de conservation de batteria. +-Description[it]=Autenticati per impostare la modalità di risparmio della batteria. +-Description[ka]=გაიარეთ ავთენტიკაცია ელემენტის შენახვის დონის დასაყენებლად. +-Description[lt]=Norint nustatyti akumuliatoriaus saugojimo veikseną, turi būti nustatyta tapatybė. +-Description[nl]=Authenticeren om de conserveringsmodus van de batterij in te stellen. +-Description[pl]=Uwierzytelnij, aby ustawić tryb zarządzania baterią. +-Description[sk]=Overenie totožnosti na nastavenie režimu ochrany batérie. +-Description[sl]=Avtenticirajte se, da bi nastavili način varčevanje baterije. +-Description[tr]=Pil tasarrufu kipini ayarlamak için kimliğinizi doğrulayın. +-Description[uk]=Пройдіть розпізнавання для встановлення режиму консервації акумулятора. +-Description[x-test]=xxAuthenticate to set the battery conservation mode.xx +-Description[zh_CN]=进行身份验证以设置节电模式。 +-Description[zh_TW]=認證以設定電池保護模式。 +-Policy=auth_admin +-Persistence=session +Index: powerdevil-6.1.0/daemon/chargethresholdhelper.cpp +=================================================================== +--- powerdevil-6.1.0.orig/daemon/chargethresholdhelper.cpp ++++ powerdevil-6.1.0/daemon/chargethresholdhelper.cpp +@@ -1,6 +1,5 @@ + /* + * SPDX-FileCopyrightText: 2020 Kai Uwe Broulik +- * SPDX-FileCopyrightText: 2023 Fabian Arndt + * + * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + */ +@@ -17,7 +16,6 @@ + #include + + static const QString s_powerSupplySysFsPath = QStringLiteral("/sys/class/power_supply"); +-static const QString s_conservationModeSysFsPath = QStringLiteral("/sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode"); + + static const QString s_chargeStartThreshold = QStringLiteral("charge_control_start_threshold"); + static const QString s_chargeEndThreshold = QStringLiteral("charge_control_end_threshold"); +@@ -174,56 +172,6 @@ ActionReply ChargeThresholdHelper::setth + return reply; + } + +- return ActionReply(); +-} +- +-// This handles Lenovo's "battery conservation mode" that limits the threshold to a fixed value +-// This value differs from model to model (most 55-60%, others ~80%) and is unknown (last checked in Kernel 6.3) +-ActionReply ChargeThresholdHelper::getconservationmode(const QVariantMap &args) +-{ +- Q_UNUSED(args); +- +- QFile file(s_conservationModeSysFsPath); +- if (!file.open(QIODevice::ReadOnly)) { +- auto reply = ActionReply::HelperErrorReply(); +- reply.setErrorDescription(QStringLiteral("Battery conservation mode is not supported")); +- return reply; +- } +- +- int state = 0; +- QTextStream stream(&file); +- stream >> state; +- +- if (state < 0 || state > 1) { +- auto reply = ActionReply::HelperErrorReply(); +- reply.setErrorDescription(QStringLiteral("Battery conservation mode is in an invalid state")); +- return reply; +- } +- +- ActionReply reply; +- reply.setData({ +- {QStringLiteral("batteryConservationModeEnabled"), !!state} +- }); +- return reply; +-} +- +-ActionReply ChargeThresholdHelper::setconservationmode(const QVariantMap &args) +-{ +- const bool enabled = args.value(QStringLiteral("batteryConservationModeEnabled"), 0).toBool(); +- QFile file(s_conservationModeSysFsPath); +- +- if (!file.open(QIODevice::WriteOnly)) { +- auto reply = ActionReply::HelperErrorReply(); +- reply.setErrorDescription(QStringLiteral("Failed to open battery conservation mode file")); +- return reply; +- } +- +- if (file.write(QByteArray::number(enabled)) == -1) { +- auto reply = ActionReply::HelperErrorReply(); +- reply.setErrorDescription(QStringLiteral("Failed to set battery conservation mode")); +- return reply; +- } +- + return ActionReply(); + } + +Index: powerdevil-6.1.0/daemon/chargethresholdhelper.h +=================================================================== +--- powerdevil-6.1.0.orig/daemon/chargethresholdhelper.h ++++ powerdevil-6.1.0/daemon/chargethresholdhelper.h +@@ -1,6 +1,5 @@ + /* + * SPDX-FileCopyrightText: 2020 Kai Uwe Broulik +- * SPDX-FileCopyrightText: 2023 Fabian Arndt + * + * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + */ +@@ -22,7 +21,4 @@ public: + public Q_SLOTS: + ActionReply getthreshold(const QVariantMap &args); + ActionReply setthreshold(const QVariantMap &args); +- +- ActionReply getconservationmode(const QVariantMap &args); +- ActionReply setconservationmode(const QVariantMap &args); + }; +Index: powerdevil-6.1.0/daemon/dbus/org.kde.Solid.PowerManagement.xml +=================================================================== +--- powerdevil-6.1.0.orig/daemon/dbus/org.kde.Solid.PowerManagement.xml ++++ powerdevil-6.1.0/daemon/dbus/org.kde.Solid.PowerManagement.xml +@@ -31,9 +31,6 @@ + + + +- +- +- + + + +@@ -108,9 +105,6 @@ + + + +- +- +- + + + +Index: powerdevil-6.1.0/daemon/powerdevilcore.cpp +=================================================================== +--- powerdevil-6.1.0.orig/daemon/powerdevilcore.cpp ++++ powerdevil-6.1.0/daemon/powerdevilcore.cpp +@@ -70,7 +70,6 @@ Core::Core(QObject *parent) + discreteGpuJob->start(); + + readChargeThreshold(); +- readBatteryConservationMode(); + } + + Core::~Core() +@@ -271,7 +270,6 @@ void Core::reparseConfiguration() + } + + readChargeThreshold(); +- readBatteryConservationMode(); + } + + QString Core::currentProfile() const +@@ -954,29 +952,6 @@ void Core::readChargeThreshold() + job->start(); + } + +-void Core::readBatteryConservationMode() +-{ +- KAuth::Action action(QStringLiteral("org.kde.powerdevil.chargethresholdhelper.getconservationmode")); +- action.setHelperId(QStringLiteral("org.kde.powerdevil.chargethresholdhelper")); +- KAuth::ExecuteJob *job = action.execute(); +- connect(job, &KJob::result, this, [this, job] { +- if (job->error()) { +- qCWarning(POWERDEVIL) << "org.kde.powerdevil.chargethresholdhelper.getconservationmode failed" << job->errorText(); +- return; +- } +- +- const auto data = job->data(); +- const bool enabled = data.value(QStringLiteral("batteryConservationModeEnabled")).toBool(); +- if (m_batteryConservationModeEnabled != enabled) { +- m_batteryConservationModeEnabled = enabled; +- Q_EMIT batteryConservationModeChanged(enabled); +- } +- +- qCDebug(POWERDEVIL) << "Battery conservation mode is" << (enabled ? "enabled" : "disabled"); +- }); +- job->start(); +-} +- + SuspendController *Core::suspendController() + { + return m_suspendController.get(); +@@ -1021,11 +996,6 @@ bool Core::hasDualGpu() const + return m_hasDualGpu; + } + +-bool Core::isBatteryConservationModeEnabled() const +-{ +- return m_batteryConservationModeEnabled; +-} +- + int Core::chargeStartThreshold() const + { + return m_chargeStartThreshold; +Index: powerdevil-6.1.0/daemon/powerdevilcore.h +=================================================================== +--- powerdevil-6.1.0.orig/daemon/powerdevilcore.h ++++ powerdevil-6.1.0/daemon/powerdevilcore.h +@@ -105,7 +105,6 @@ public Q_SLOTS: + bool isLidPresent() const; + bool isActionSupported(const QString &actionName); + bool hasDualGpu() const; +- bool isBatteryConservationModeEnabled() const; + int chargeStartThreshold() const; + int chargeStopThreshold() const; + +@@ -124,7 +123,6 @@ Q_SIGNALS: + void batteryRemainingTimeChanged(qulonglong time); + void smoothedBatteryRemainingTimeChanged(qulonglong time); + void lidClosedChanged(bool closed); +- void batteryConservationModeChanged(bool enabled); + void chargeStartThresholdChanged(int threshold); + void chargeStopThresholdChanged(int threshold); + +@@ -139,7 +137,6 @@ private: + void triggerCriticalBatteryAction(); + + void readChargeThreshold(); +- void readBatteryConservationMode(); + + /** + * Computes the current global charge percentage. +@@ -150,7 +147,6 @@ private: + friend class Action; + + bool m_hasDualGpu; +- bool m_batteryConservationModeEnabled = false; + int m_chargeStartThreshold = 0; + int m_chargeStopThreshold = 100; + +Index: powerdevil-6.1.0/kcmodule/profiles/ExternalServiceSettings.cpp +=================================================================== +--- powerdevil-6.1.0.orig/kcmodule/profiles/ExternalServiceSettings.cpp ++++ powerdevil-6.1.0/kcmodule/profiles/ExternalServiceSettings.cpp +@@ -1,7 +1,6 @@ + /* + * SPDX-FileCopyrightText: 2008-2010 Dario Freddi + * SPDX-FileCopyrightText: 2023 Jakob Petsovits +- * SPDX-FileCopyrightText: 2024 Fabian Arndt + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +@@ -23,9 +22,6 @@ + #include + #include + +-// debug category for qCInfo() +-#include +- + namespace + { + constexpr int ChargeThresholdUnsupported = -1; +@@ -36,138 +32,81 @@ namespace PowerDevil + + ExternalServiceSettings::ExternalServiceSettings(QObject *parent) + : QObject(parent) +- , m_batteryConservationMode(false) + , m_chargeStartThreshold(ChargeThresholdUnsupported) + , m_chargeStopThreshold(ChargeThresholdUnsupported) +- , m_savedBatteryConservationMode(false) + , m_savedChargeStartThreshold(ChargeThresholdUnsupported) + , m_savedChargeStopThreshold(ChargeThresholdUnsupported) +- , m_isBatteryConservationModeSupported(false) + , m_chargeStopThresholdMightNeedReconnect(false) + { + } + +-void ExternalServiceSettings::executeChargeThresholdHelperAction(const QString &actionName, +- QWindow *parentWindowForKAuth, +- const QVariantMap &arguments, +- const std::function callback) ++void ExternalServiceSettings::load(QWindow *parentWindowForKAuth) + { +- KAuth::Action action(QStringLiteral("org.kde.powerdevil.chargethresholdhelper.") + actionName); ++ KAuth::Action action(QStringLiteral("org.kde.powerdevil.chargethresholdhelper.getthreshold")); + action.setHelperId(QStringLiteral("org.kde.powerdevil.chargethresholdhelper")); + action.setParentWindow(parentWindowForKAuth); +- action.setArguments(arguments); +- + KAuth::ExecuteJob *job = action.execute(); ++ + QPointer thisAlive(this); + QPointer jobAlive(job); + job->exec(); + +- if (!thisAlive || !jobAlive) { +- qCInfo(POWERDEVIL) << action.name() << "failed: was deleted during job execution"; +- return; +- } +- +- if (job->error()) { +- qCInfo(POWERDEVIL) << "KAuth action" << action.name() << "failed:" << job->errorText(); +- } +- callback(job); +-} +- +-void ExternalServiceSettings::load(QWindow *parentWindowForKAuth) +-{ +- // Battery thresholds (start / stop) +- executeChargeThresholdHelperAction("getthreshold", parentWindowForKAuth, {}, [&](KAuth::ExecuteJob *job) { +- if (job->error()) { ++ if (thisAlive && jobAlive) { ++ if (!job->error()) { ++ const auto data = job->data(); ++ setSavedChargeStartThreshold(data.value(QStringLiteral("chargeStartThreshold")).toInt()); ++ setSavedChargeStopThreshold(data.value(QStringLiteral("chargeStopThreshold")).toInt()); ++ setChargeStopThreshold(m_savedChargeStopThreshold); ++ setChargeStartThreshold(m_savedChargeStartThreshold); ++ } else { ++ qWarning() << "org.kde.powerdevil.chargethresholdhelper.getthreshold failed:" << job->errorText(); + setSavedChargeStartThreshold(ChargeThresholdUnsupported); + setSavedChargeStopThreshold(ChargeThresholdUnsupported); +- return; +- } +- +- const auto data = job->data(); +- setSavedChargeStartThreshold(data.value(QStringLiteral("chargeStartThreshold")).toInt()); +- setSavedChargeStopThreshold(data.value(QStringLiteral("chargeStopThreshold")).toInt()); +- setChargeStopThreshold(m_savedChargeStopThreshold); +- setChargeStartThreshold(m_savedChargeStartThreshold); +- }); +- +- // Battery Conservation Mode (fixed) +- executeChargeThresholdHelperAction("getconservationmode", parentWindowForKAuth, {}, [&](KAuth::ExecuteJob *job) { +- if (job->error()) { +- setSavedBatteryConservationMode(false); +- m_isBatteryConservationModeSupported = false; +- return; + } +- +- const auto data = job->data(); +- setSavedBatteryConservationMode(data.value(QStringLiteral("batteryConservationModeEnabled")).toBool()); +- setBatteryConservationMode(m_batteryConservationMode); +- m_isBatteryConservationModeSupported = true; +- }); ++ } else { ++ qWarning() << "org.kde.powerdevil.chargethresholdhelper.getthreshold failed: was deleted during job execution"; ++ } + } + + void ExternalServiceSettings::save(QWindow *parentWindowForKAuth) + { +- // Battery threshold (start / stop) + if ((isChargeStartThresholdSupported() && m_chargeStartThreshold != m_savedChargeStartThreshold) + || (isChargeStopThresholdSupported() && m_chargeStopThreshold != m_savedChargeStopThreshold)) { + int newChargeStartThreshold = isChargeStartThresholdSupported() ? m_chargeStartThreshold : ChargeThresholdUnsupported; + int newChargeStopThreshold = isChargeStopThresholdSupported() ? m_chargeStopThreshold : ChargeThresholdUnsupported; + +- executeChargeThresholdHelperAction("setthreshold", +- parentWindowForKAuth, +- { +- {QStringLiteral("chargeStartThreshold"), newChargeStartThreshold}, +- {QStringLiteral("chargeStopThreshold"), newChargeStopThreshold}, +- }, +- [&](KAuth::ExecuteJob *job) { +- if (job->error()) { +- setChargeStopThreshold(m_savedChargeStopThreshold); +- setChargeStartThreshold(m_savedChargeStartThreshold); +- return; +- } +- +- setSavedChargeStartThreshold(newChargeStartThreshold); +- setSavedChargeStopThreshold(newChargeStopThreshold); +- }); +- } +- +- // Battery Conservation Mode (fixed) +- if (isBatteryConservationModeSupported() && m_batteryConservationMode != m_savedBatteryConservationMode) { +- executeChargeThresholdHelperAction("setconservationmode", +- parentWindowForKAuth, +- { +- {QStringLiteral("batteryConservationModeEnabled"), m_batteryConservationMode}, +- }, +- [&](KAuth::ExecuteJob *job) { +- if (job->error()) { +- setBatteryConservationMode(m_savedBatteryConservationMode); +- return; +- } +- +- setSavedBatteryConservationMode(m_batteryConservationMode); +- }); ++ KAuth::Action action(QStringLiteral("org.kde.powerdevil.chargethresholdhelper.setthreshold")); ++ action.setHelperId(QStringLiteral("org.kde.powerdevil.chargethresholdhelper")); ++ action.setArguments({ ++ {QStringLiteral("chargeStartThreshold"), newChargeStartThreshold}, ++ {QStringLiteral("chargeStopThreshold"), newChargeStopThreshold}, ++ }); ++ action.setParentWindow(parentWindowForKAuth); ++ KAuth::ExecuteJob *job = action.execute(); ++ ++ QPointer thisAlive(this); ++ QPointer jobAlive(job); ++ job->exec(); ++ ++ if (thisAlive && jobAlive) { ++ if (!job->error()) { ++ setSavedChargeStartThreshold(newChargeStartThreshold); ++ setSavedChargeStopThreshold(newChargeStopThreshold); ++ } else { ++ qWarning() << "org.kde.powerdevil.chargethresholdhelper.setthreshold failed:" << job->errorText(); ++ } ++ setChargeStopThreshold(m_savedChargeStopThreshold); ++ setChargeStartThreshold(m_savedChargeStartThreshold); ++ } else { ++ qWarning() << "org.kde.powerdevil.chargethresholdhelper.setthreshold failed: was deleted during job execution"; ++ } + } + } + + bool ExternalServiceSettings::isSaveNeeded() const + { + return (isChargeStartThresholdSupported() && m_chargeStartThreshold != m_savedChargeStartThreshold) +- || (isChargeStopThresholdSupported() && m_chargeStopThreshold != m_savedChargeStopThreshold) +- || (isBatteryConservationModeSupported() && m_batteryConservationMode != m_savedBatteryConservationMode); +-} +- +-bool ExternalServiceSettings::isBatteryConservationModeSupported() const +-{ +- return m_isBatteryConservationModeSupported; +-} +- +-void ExternalServiceSettings::setSavedBatteryConservationMode(bool enabled) +-{ +- bool wasSavedBatteryConservationModeSupported = isBatteryConservationModeSupported(); +- m_savedBatteryConservationMode = enabled; +- if (wasSavedBatteryConservationModeSupported != isBatteryConservationModeSupported()) { +- Q_EMIT isBatteryConservationModeSupportedChanged(); +- } ++ || (isChargeStopThresholdSupported() && m_chargeStopThreshold != m_savedChargeStopThreshold); + } + + bool ExternalServiceSettings::isChargeStartThresholdSupported() const +@@ -198,21 +137,6 @@ void ExternalServiceSettings::setSavedCh + } + } + +-bool ExternalServiceSettings::batteryConservationMode() const +-{ +- return m_batteryConservationMode; +-} +- +-void ExternalServiceSettings::setBatteryConservationMode(bool enabled) +-{ +- if (enabled == m_batteryConservationMode) { +- return; +- } +- m_batteryConservationMode = enabled; +- Q_EMIT batteryConservationModeChanged(); +- Q_EMIT settingsChanged(); +-} +- + int ExternalServiceSettings::chargeStartThreshold() const + { + return m_chargeStartThreshold; +Index: powerdevil-6.1.0/kcmodule/profiles/ExternalServiceSettings.h +=================================================================== +--- powerdevil-6.1.0.orig/kcmodule/profiles/ExternalServiceSettings.h ++++ powerdevil-6.1.0/kcmodule/profiles/ExternalServiceSettings.h +@@ -1,6 +1,5 @@ + /* + * SPDX-FileCopyrightText: 2023 Jakob Petsovits +- * SPDX-FileCopyrightText: 2024 Fabian Arndt + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +@@ -8,7 +7,6 @@ + #pragma once + + #include +-#include + + class QWindow; + +@@ -21,28 +19,23 @@ class ExternalServiceSettings : public Q + + Q_PROPERTY(int chargeStartThreshold READ chargeStartThreshold WRITE setChargeStartThreshold NOTIFY chargeStartThresholdChanged) + Q_PROPERTY(int chargeStopThreshold READ chargeStopThreshold WRITE setChargeStopThreshold NOTIFY chargeStopThresholdChanged) +- Q_PROPERTY(int batteryConservationMode READ batteryConservationMode WRITE setBatteryConservationMode NOTIFY batteryConservationModeChanged) + + public: + explicit ExternalServiceSettings(QObject *parent); + + bool isSaveNeeded() const; + +- bool batteryConservationMode() const; + int chargeStartThreshold() const; + int chargeStopThreshold() const; + +- bool isBatteryConservationModeSupported() const; + bool isChargeStartThresholdSupported() const; + bool isChargeStopThresholdSupported() const; +- + bool chargeStopThresholdMightNeedReconnect() const; + + public Q_SLOTS: + void load(QWindow *parentWindowForKAuth = nullptr); + void save(QWindow *parentWindowForKAuth = nullptr); + +- void setBatteryConservationMode(bool); + void setChargeStartThreshold(int); + void setChargeStopThreshold(int); + +@@ -50,36 +43,23 @@ Q_SIGNALS: + void settingsChanged(); + + // settings, which in addition to their own signal also trigger settingsChanged() +- void batteryConservationModeChanged(); + void chargeStartThresholdChanged(); + void chargeStopThresholdChanged(); + + // not settings per se, so these don't trigger settingsChanged() +- void isBatteryConservationModeSupportedChanged(); + void isChargeStartThresholdSupportedChanged(); + void isChargeStopThresholdSupportedChanged(); + void chargeStopThresholdMightNeedReconnectChanged(); + + private: +- void setSavedBatteryConservationMode(bool); + void setSavedChargeStartThreshold(int); + void setSavedChargeStopThreshold(int); + void setChargeStopThresholdMightNeedReconnect(bool); + +- void executeChargeThresholdHelperAction(const QString &actionName, +- QWindow *parentWindowForKAuth, +- const QVariantMap &arguments, +- const std::function callback); +- +- bool m_batteryConservationMode; + int m_chargeStartThreshold; + int m_chargeStopThreshold; +- +- bool m_savedBatteryConservationMode; + int m_savedChargeStartThreshold; + int m_savedChargeStopThreshold; +- +- bool m_isBatteryConservationModeSupported; + bool m_chargeStopThresholdMightNeedReconnect; + }; + +Index: powerdevil-6.1.0/kcmodule/profiles/PowerKCM.cpp +=================================================================== +--- powerdevil-6.1.0.orig/kcmodule/profiles/PowerKCM.cpp ++++ powerdevil-6.1.0/kcmodule/profiles/PowerKCM.cpp +@@ -151,7 +151,6 @@ PowerKCM::PowerKCM(QObject *parent, cons + this, + &PowerKCM::isChargeStartThresholdSupportedChanged); + connect(m_externalServiceSettings, &ExternalServiceSettings::isChargeStopThresholdSupportedChanged, this, &PowerKCM::isChargeStopThresholdSupportedChanged); +- connect(m_externalServiceSettings, &ExternalServiceSettings::isBatteryConservationModeSupportedChanged, this, &PowerKCM::isBatteryConservationModeSupportedChanged); + connect(m_externalServiceSettings, + &ExternalServiceSettings::chargeStopThresholdMightNeedReconnectChanged, + this, +@@ -291,11 +290,6 @@ void PowerKCM::setSupportsBatteryProfile + Q_EMIT supportsBatteryProfilesChanged(); + } + +-bool PowerKCM::isBatteryConservationModeSupported() const +-{ +- return m_externalServiceSettings->isBatteryConservationModeSupported(); +-} +- + bool PowerKCM::isChargeStartThresholdSupported() const + { + return m_externalServiceSettings->isChargeStartThresholdSupported(); +Index: powerdevil-6.1.0/kcmodule/profiles/PowerKCM.h +=================================================================== +--- powerdevil-6.1.0.orig/kcmodule/profiles/PowerKCM.h ++++ powerdevil-6.1.0/kcmodule/profiles/PowerKCM.h +@@ -65,7 +65,6 @@ class PowerKCM : public KQuickManagedCon + Q_PROPERTY(bool isLidPresent READ isLidPresent NOTIFY isLidPresentChanged) + Q_PROPERTY(bool isPowerButtonPresent READ isPowerButtonPresent NOTIFY isPowerButtonPresentChanged) + +- Q_PROPERTY(bool isBatteryConservationModeSupported READ isBatteryConservationModeSupported NOTIFY isBatteryConservationModeSupportedChanged) + Q_PROPERTY(bool isChargeStartThresholdSupported READ isChargeStartThresholdSupported NOTIFY isChargeStartThresholdSupportedChanged) + Q_PROPERTY(bool isChargeStopThresholdSupported READ isChargeStopThresholdSupported NOTIFY isChargeStopThresholdSupportedChanged) + Q_PROPERTY(bool chargeStopThresholdMightNeedReconnect READ chargeStopThresholdMightNeedReconnect NOTIFY chargeStopThresholdMightNeedReconnectChanged) +@@ -97,7 +96,6 @@ public: + bool isLidPresent() const; + bool isPowerButtonPresent() const; + +- bool isBatteryConservationModeSupported() const; + bool isChargeStartThresholdSupported() const; + bool isChargeStopThresholdSupported() const; + bool chargeStopThresholdMightNeedReconnect() const; +@@ -127,7 +125,6 @@ Q_SIGNALS: + void isLidPresentChanged(); + void isPowerButtonPresentChanged(); + +- void isBatteryConservationModeSupportedChanged(); + void isChargeStartThresholdSupportedChanged(); + void isChargeStopThresholdSupportedChanged(); + void chargeStopThresholdMightNeedReconnectChanged(); +Index: powerdevil-6.1.0/kcmodule/profiles/ui/GlobalConfig.qml +=================================================================== +--- powerdevil-6.1.0.orig/kcmodule/profiles/ui/GlobalConfig.qml ++++ powerdevil-6.1.0/kcmodule/profiles/ui/GlobalConfig.qml +@@ -221,18 +221,7 @@ Kirigami.ScrollablePage { + id: chargeLimitHeader + Kirigami.FormData.label: i18nc("@title:group", "Charge Limit") + Kirigami.FormData.isSection: true +- visible: chargeStopThresholdSpin.visible || chargeStartThresholdSpin.visible || batteryConservationModeCheck.visible +- } +- +- QQC2.CheckBox { +- id: batteryConservationModeCheck +- visible: kcm.isBatteryConservationModeSupported +- checked: externalSettings.batteryConservationMode +- onToggled: externalSettings.batteryConservationMode = checked +- +- Kirigami.FormData.label: i18nc("@label:checkbox", "&Battery protection:") +- text: i18nc("@text:checkbox", "Limit the maximum battery charge") +- Accessible.name: text ++ visible: chargeStopThresholdSpin.visible || chargeStartThresholdSpin.visible + } + + QQC2.SpinBox { +@@ -330,8 +319,7 @@ Kirigami.ScrollablePage { + Kirigami.FormData.isSection: true + // iFixit suggests keeping the charge between 40-80%, Battery University lists 25-85% as a decent tradeoff. + // Show this reminder only when high charge thresholds are configured. +- visible: (chargeLimitHeader.visible && !chargeStopThresholdReconnectMessage.visible && chargeStopThresholdSpin.value > 85) +- || (batteryConservationModeCheck.visible && !batteryConservationModeCheck.checked) ++ visible: chargeLimitHeader.visible && !chargeStopThresholdReconnectMessage.visible && chargeStopThresholdSpin.value > 85 + implicitWidth: Kirigami.Units.gridUnit * 16 + text: i18nc("@info", "Regularly charging the battery close to 100%, or fully discharging it, may accelerate deterioration of battery health. By limiting the maximum battery charge, you can help extend the battery lifespan.") + } diff --git a/powerdevil6.changes b/powerdevil6.changes index 401a159..ebc89fc 100644 --- a/powerdevil6.changes +++ b/powerdevil6.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Jun 17 09:43:38 UTC 2024 - Fabian Vogt + +- Add patch to revert feature until new polkit rules got whitelisted: + * 0001-Revert-Added-setting-for-battery-conservation-mode-L.patch + ------------------------------------------------------------------- Thu Jun 13 10:58:59 UTC 2024 - Fabian Vogt diff --git a/powerdevil6.spec b/powerdevil6.spec index 5d3a94a..38ca24e 100644 --- a/powerdevil6.spec +++ b/powerdevil6.spec @@ -36,6 +36,8 @@ Source: %{rname}-%{version}.tar.xz Source1: %{rname}-%{version}.tar.xz.sig Source2: plasma.keyring %endif +# PATCH-BREAK-OPENSUSE waiting for review (boo#1226424) +Patch1: 0001-Revert-Added-setting-for-battery-conservation-mode-L.patch BuildRequires: kf6-extra-cmake-modules >= %{kf6_version} # Needed by FindLibcap.cmake BuildRequires: libcap-progs