[kde-workspace] monitor sleep settings reset, resulting in monitor turning off (kde#295164)

Rex Dieter rdieter at fedoraproject.org
Thu Oct 18 19:09:13 UTC 2012


commit fcfa9f6e451357dc811849e37c983bc9e3735ae9
Author: Rex Dieter <rdieter at fedoraproject.org>
Date:   Thu Oct 18 14:09:17 2012 -0500

    monitor sleep settings reset, resulting in monitor turning off (kde#295164)

 kde-workspace-r106793.patch |   47 +++++++++++++++++++++++++++++++++++++++++++
 kde-workspace-r106794.patch |   32 +++++++++++++++++++++++++++++
 kde-workspace.spec          |   11 +++++++++-
 3 files changed, 89 insertions(+), 1 deletions(-)
---
diff --git a/kde-workspace-r106793.patch b/kde-workspace-r106793.patch
new file mode 100644
index 0000000..12992c1
--- /dev/null
+++ b/kde-workspace-r106793.patch
@@ -0,0 +1,47 @@
+diff --git a/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp b/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp
+index a16bf7ee254b9a40c6f033c93e5ca63226469e6e..029d6d3910b7151a889ee79182a9c956e619f99e 100644
+--- a/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp
++++ b/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp
+@@ -68,6 +68,7 @@ K_EXPORT_PLUGIN(PowerDevilDPMSActionFactory("powerdevildpmsaction"))
+ 
+ PowerDevilDPMSAction::PowerDevilDPMSAction(QObject* parent, const QVariantList &args)
+     : Action(parent)
++    , m_idleTime(0)
+     , d(new Private)
+ {
+     setRequiredPolicies(PowerDevil::PolicyAgent::ChangeScreenSettings);
+@@ -147,6 +148,9 @@ void PowerDevilDPMSAction::onProfileLoad()
+     XFlush(dpy);
+     XSetErrorHandler(d->defaultHandler);
+ 
++    // An unloaded action will have m_idleTime = 0:
++    // DPMS enabled with zeroed timeouts is effectively disabled.
++    // So onProfileLoad is always safe
+     DPMSSetTimeouts(dpy, (CARD16)m_idleTime, (CARD16)(m_idleTime * 1.5), (CARD16)(m_idleTime * 2));
+ 
+     XFlush(dpy);
+@@ -194,6 +198,12 @@ bool PowerDevilDPMSAction::loadAction(const KConfigGroup& config)
+     return true;
+ }
+ 
++bool PowerDevilDPMSAction::onUnloadAction()
++{
++    m_idleTime = 0;
++    return Action::onUnloadAction();
++}
++
+ void PowerDevilDPMSAction::onUnavailablePoliciesChanged(PowerDevil::PolicyAgent::RequiredPolicies policies)
+ {
+     if (policies & PowerDevil::PolicyAgent::ChangeScreenSettings) {
+diff --git a/powerdevil/daemon/actions/dpms/powerdevildpmsaction.h b/powerdevil/daemon/actions/dpms/powerdevildpmsaction.h
+index ef734c47cef79fbc5573ec3683c30e415bbc8a2e..ad6add8b797eb4ecd59e407bade93862160ef23c 100644
+--- a/powerdevil/daemon/actions/dpms/powerdevildpmsaction.h
++++ b/powerdevil/daemon/actions/dpms/powerdevildpmsaction.h
+@@ -34,6 +34,7 @@ public:
+ 
+ protected:
+     virtual void onProfileUnload();
++    virtual bool onUnloadAction();
+     virtual void onWakeupFromIdle();
+     virtual void onIdleTimeout(int msec);
+     virtual void onProfileLoad();
diff --git a/kde-workspace-r106794.patch b/kde-workspace-r106794.patch
new file mode 100644
index 0000000..0be393a
--- /dev/null
+++ b/kde-workspace-r106794.patch
@@ -0,0 +1,32 @@
+diff --git a/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp b/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp
+index a16bf7ee254b9a40c6f033c93e5ca63226469e6e..4b8667da23e6739e5dd00917c3424778fd280f15 100644
+--- a/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp
++++ b/powerdevil/daemon/actions/dpms/powerdevildpmsaction.cpp
+@@ -121,6 +121,7 @@ void PowerDevilDPMSAction::onProfileUnload()
+     } else {
+         kDebug() << "Not performing DPMS action due to inhibition";
+     }
++    DPMSSetTimeouts(dpy, 0, 0, 0);
+ }
+ 
+ void PowerDevilDPMSAction::onWakeupFromIdle()
+@@ -185,6 +186,9 @@ void PowerDevilDPMSAction::triggerImpl(const QVariantMap& args)
+             DPMSForceLevel(dpy, DPMSModeSuspend);
+         }
+     }
++
++    // this leaves DPMS enabled but if it's meant to be disabled
++    // then the timeouts will be zero and so effectively disabled
+ }
+ 
+ bool PowerDevilDPMSAction::loadAction(const KConfigGroup& config)
+@@ -200,7 +204,8 @@ void PowerDevilDPMSAction::onUnavailablePoliciesChanged(PowerDevil::PolicyAgent:
+         // Inhibition triggered: disable DPMS
+         kDebug() << "Disabling DPMS due to inhibition";
+         Display *dpy = QX11Info::display();
+-        DPMSDisable(dpy);
++        DPMSSetTimeouts(dpy, 0, 0, 0);
++        DPMSDisable(dpy); // wakes the screen - do we want this?
+     } else {
+         // Inhibition removed: let's start again
+         onProfileLoad();
diff --git a/kde-workspace.spec b/kde-workspace.spec
index 04665b3..8359b06 100644
--- a/kde-workspace.spec
+++ b/kde-workspace.spec
@@ -11,7 +11,7 @@
 Summary: KDE Workspace
 Name:    kde-workspace
 Version: 4.9.2
-Release: 5%{?dist}
+Release: 6%{?dist}
 
 License: GPLv2
 URL:     https://projects.kde.org/projects/kde/kde-workspace
@@ -120,6 +120,10 @@ Patch59: kde-workspace-4.9.0-fontconfigdir.patch
 # Support for switching users with systemd - #859347
 Patch60: kde-workspace-4.9.2-systemd-switch-user.patch
 
+# DPMS timeout reset related fixes, https://bugs.kde.org/295164
+Patch61: kde-workspace-r106793.patch
+Patch62: kde-workspace-r106794.patch
+
 ## upstream patches
 # systemd_inhibit work-in-progress
 Patch100: kde-workspace-4.9.2-systemd_inhibit.patch
@@ -459,6 +463,8 @@ Requires: akonadi
 %patch58 -p1 -b .systemd-shutdown
 %patch59 -p1 -b fontconfigdir
 %patch60 -p1 -b .systemd-switch-user
+%patch61 -p1 -b .r106794
+%patch62 -p1 -b .r106794
 
 # upstream patches
 %patch100 -p1 -b .systemd_inhibit
@@ -1013,6 +1019,9 @@ fi
 
 
 %changelog
+* Thu Oct 18 2012 Rex Dieter <rdieter at fedoraproject.org> 4.9.2-6
+- monitor sleep settings reset, resulting in monitor turning off (kde#295164)
+
 * Mon Oct 08 2012 Martin Briza <mbriza at redhat.com> 4.9.2-5
 - Fixing user switching with SystemD (#859347), for LightDM
 


More information about the scm-commits mailing list