commit:     b652780039e7ae6fef23c60bccb0a2d5064e8ca4
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 23 15:25:23 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Jun 23 15:29:42 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b6527800

kde-plasma/powerdevil: Fix random inhibition issues

KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=423131
Package-Manager: Portage-2.3.102, Repoman-2.3.23
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 ...owerdevil-5.18.5-fix-powermgmt-inhibition.patch | 80 ++++++++++++++++++++++
 kde-plasma/powerdevil/powerdevil-5.18.5-r1.ebuild  | 69 +++++++++++++++++++
 2 files changed, 149 insertions(+)

diff --git 
a/kde-plasma/powerdevil/files/powerdevil-5.18.5-fix-powermgmt-inhibition.patch 
b/kde-plasma/powerdevil/files/powerdevil-5.18.5-fix-powermgmt-inhibition.patch
new file mode 100644
index 00000000000..cb6e27b7a97
--- /dev/null
+++ 
b/kde-plasma/powerdevil/files/powerdevil-5.18.5-fix-powermgmt-inhibition.patch
@@ -0,0 +1,80 @@
+From d21102cc6c7a4db204a29f376ce5eb316ef57a6e Mon Sep 17 00:00:00 2001
+From: Kai Uwe Broulik <k...@privat.broulik.de>
+Date: Fri, 19 Jun 2020 19:51:06 +0200
+Subject: [PATCH] Watch DBus service right away to discard pending inhibitions
+ reliably
+
+PowerDevil delays applying a power management inhibition by 5 seconds to avoid 
brief inhibitions
+to e.g. wake up the screen and similar.
+However, when an inhibition was posted and the process then quit, we would 
then still
+enforce the inhibition as it wasn't explicitly revoked.
+Fix this by always watching the inhibition sender and remove it from pending 
when the
+service goes away.
+
+BUG: 423131
+FIXED-IN: 5.18.6
+---
+ daemon/powerdevilpolicyagent.cpp | 26 ++++++++++++--------------
+ 1 file changed, 12 insertions(+), 14 deletions(-)
+
+diff --git a/daemon/powerdevilpolicyagent.cpp 
b/daemon/powerdevilpolicyagent.cpp
+index a7d92dfd..2c2b1152 100644
+--- a/daemon/powerdevilpolicyagent.cpp
++++ b/daemon/powerdevilpolicyagent.cpp
+@@ -513,6 +513,11 @@ uint 
PolicyAgent::addInhibitionWithExplicitDBusService(uint types, const QString
+ 
+     const int cookie = m_lastCookie; // when the Timer below fires, 
m_lastCookie might be different already
+ 
++    if (!m_busWatcher.isNull() && !service.isEmpty()) {
++        m_cookieToBusService.insert(cookie, service);
++        m_busWatcher.data()->addWatchedService(service);
++    }
++
+     m_pendingInhibitions.append(cookie);
+ 
+     qCDebug(POWERDEVIL) << "Scheduling inhibition from" << service << appName 
<< "with cookie"
+@@ -532,11 +537,6 @@ uint 
PolicyAgent::addInhibitionWithExplicitDBusService(uint types, const QString
+ 
+         m_cookieToAppName.insert(cookie, qMakePair<QString, QString>(appName, 
reason));
+ 
+-        if (!m_busWatcher.isNull() && !service.isEmpty()) {
+-            m_cookieToBusService.insert(cookie, service);
+-            m_busWatcher.data()->addWatchedService(service);
+-        }
+-
+         addInhibitionTypeHelper(cookie, static_cast< 
PolicyAgent::RequiredPolicies >(types));
+ 
+         Q_EMIT InhibitionsChanged({ {qMakePair(appName, reason)} }, {});
+@@ -596,22 +596,20 @@ void PolicyAgent::ReleaseInhibition(uint cookie)
+ {
+     qCDebug(POWERDEVIL) << "Releasing inhibition with cookie " << cookie;
+ 
+-    if (m_pendingInhibitions.contains(cookie)) {
++    QString service = m_cookieToBusService.take(cookie);
++    if (!m_busWatcher.isNull() && !service.isEmpty() && 
!m_cookieToBusService.key(service)) {
++        // no cookies from service left
++        m_busWatcher.data()->removeWatchedService(service);
++    }
++
++    if (m_pendingInhibitions.removeOne(cookie)) {
+         qCDebug(POWERDEVIL) << "It was only scheduled for inhibition but not 
enforced yet, just discarding it";
+-        m_pendingInhibitions.removeOne(cookie);
+         return;
+     }
+ 
+     Q_EMIT InhibitionsChanged(QList<InhibitionInfo>(), { 
{m_cookieToAppName.value(cookie).first} });
+     m_cookieToAppName.remove(cookie);
+ 
+-
+-    QString service = m_cookieToBusService.take(cookie);
+-    if (!m_busWatcher.isNull() && !service.isEmpty() && 
!m_cookieToBusService.key(service)) {
+-        // no cookies from service left
+-        m_busWatcher.data()->removeWatchedService(service);
+-    }
+-
+     // Look through all of the inhibition types
+     bool notify = false;
+     if (m_typesToCookie[ChangeProfile].contains(cookie)) {
+-- 
+GitLab
+

diff --git a/kde-plasma/powerdevil/powerdevil-5.18.5-r1.ebuild 
b/kde-plasma/powerdevil/powerdevil-5.18.5-r1.ebuild
new file mode 100644
index 00000000000..79f0394f5fe
--- /dev/null
+++ b/kde-plasma/powerdevil/powerdevil-5.18.5-r1.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+ECM_HANDBOOK="forceoptional"
+KFMIN=5.66.0
+PVCUT=$(ver_cut 1-3)
+QTMIN=5.12.3
+inherit ecm kde.org
+
+DESCRIPTION="Power management for KDE Plasma Shell"
+HOMEPAGE="https://invent.kde.org/plasma/powerdevil";
+
+LICENSE="GPL-2" # TODO: CHECK
+SLOT="5"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
+IUSE="brightness-control +wireless"
+
+DEPEND="
+       >=kde-frameworks/kactivities-${KFMIN}:5
+       >=kde-frameworks/kauth-${KFMIN}:5[policykit]
+       >=kde-frameworks/kcompletion-${KFMIN}:5
+       >=kde-frameworks/kconfig-${KFMIN}:5
+       >=kde-frameworks/kconfigwidgets-${KFMIN}:5
+       >=kde-frameworks/kcoreaddons-${KFMIN}:5
+       >=kde-frameworks/kcrash-${KFMIN}:5
+       >=kde-frameworks/kdbusaddons-${KFMIN}:5
+       >=kde-frameworks/kglobalaccel-${KFMIN}:5
+       >=kde-frameworks/ki18n-${KFMIN}:5
+       >=kde-frameworks/kidletime-${KFMIN}:5
+       >=kde-frameworks/kio-${KFMIN}:5
+       >=kde-frameworks/knotifications-${KFMIN}:5
+       >=kde-frameworks/knotifyconfig-${KFMIN}:5
+       >=kde-frameworks/kservice-${KFMIN}:5
+       >=kde-frameworks/kwayland-${KFMIN}:5
+       >=kde-frameworks/kwidgetsaddons-${KFMIN}:5
+       >=kde-frameworks/kxmlgui-${KFMIN}:5
+       >=kde-frameworks/solid-${KFMIN}:5
+       >=kde-plasma/libkscreen-${PVCUT}:5
+       >=kde-plasma/libkworkspace-${PVCUT}:5
+       >=dev-qt/qtdbus-${QTMIN}:5
+       >=dev-qt/qtgui-${QTMIN}:5
+       >=dev-qt/qtwidgets-${QTMIN}:5
+       >=dev-qt/qtx11extras-${QTMIN}:5
+       virtual/libudev:=
+       x11-libs/libxcb
+       brightness-control? ( app-misc/ddcutil )
+       wireless? (
+               >=kde-frameworks/bluez-qt-${KFMIN}:5
+               >=kde-frameworks/networkmanager-qt-${KFMIN}:5
+       )
+"
+RDEPEND="${DEPEND}
+       >=kde-plasma/kde-cli-tools-${PVCUT}:5
+       >=sys-power/upower-0.9.23
+"
+
+PATCHES=( "${FILESDIR}/${P}-fix-powermgmt-inhibition.patch" ) # KDE-Bug 423131
+
+src_configure() {
+       local mycmakeargs=(
+               -DHAVE_DDCUTIL=$(usex brightness-control)
+               $(cmake_use_find_package wireless KF5BluezQt)
+               $(cmake_use_find_package wireless KF5NetworkManagerQt)
+       )
+
+       ecm_src_configure
+}

Reply via email to