rpms/kdebase-workspace/devel kdebase-workspace-4.2.0-kde#177123.patch, NONE, 1.1 kdebase-workspace.spec, 1.185, 1.186
Rex Dieter
rdieter at fedoraproject.org
Thu Feb 19 21:07:20 UTC 2009
Author: rdieter
Update of /cvs/pkgs/rpms/kdebase-workspace/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv13417
Modified Files:
kdebase-workspace.spec
Added Files:
kdebase-workspace-4.2.0-kde#177123.patch
Log Message:
* Thu Feb 19 2009 Rex Dieter <rdieter at fedoraproject.org> - 4.2.0-13
- dpms issues (kdebug#177123)
kdebase-workspace-4.2.0-kde#177123.patch:
--- NEW FILE kdebase-workspace-4.2.0-kde#177123.patch ---
--- branches/KDE/4.2/kdebase/workspace/krunner/screensaver/xautolock.cpp 2009/01/26 15:13:13 916961
+++ branches/KDE/4.2/kdebase/workspace/krunner/screensaver/xautolock.cpp 2009/01/26 15:14:05 916962
@@ -228,7 +228,9 @@
#ifdef HAVE_DPMS
BOOL on;
CARD16 state;
+ CARD16 timeout1, timeout2, timeout3;
DPMSInfo( QX11Info::display(), &state, &on );
+ DPMSGetTimeouts( QX11Info::display(), &timeout1, &timeout2, &timeout3 );
// kDebug() << "DPMSInfo " << state << on;
// If DPMS is active, it makes XScreenSaverQueryInfo() report idle time
@@ -237,7 +239,10 @@
// this could prevent locking from working.
if(state == DPMSModeStandby || state == DPMSModeSuspend || state == DPMSModeOff)
activate = true;
- if(!on && mDPMS) {
+ // If we are DPMS-dependent and either DPMS is turned off completely or all
+ // three DPMS modes are turned off, don't activate (apps use this to turn off
+ // screensavers).
+ if(mDPMS && (!on || (timeout1 == 0 && timeout2 == 0 && timeout3 == 0 ))) {
activate = false;
resetTrigger();
}
--- branches/KDE/4.2/kdebase/workspace/krunner/lock/lockprocess.cc 2009/01/26 15:17:22 916963
+++ branches/KDE/4.2/kdebase/workspace/krunner/lock/lockprocess.cc 2009/01/26 15:18:52 916964
@@ -1104,7 +1104,6 @@
return; // no resuming with dialog visible or when not visible
if( mSuspended && mHackProc.state() == QProcess::Running )
{
- XForceScreenSaver(QX11Info::display(), ScreenSaverReset );
QPainter p( this );
p.drawPixmap( 0, 0, mSavedScreen );
p.end();
--- branches/KDE/4.2/kdebase/workspace/krunner/screensaver/saverengine.cpp 2009/01/26 15:17:22 916963
+++ branches/KDE/4.2/kdebase/workspace/krunner/screensaver/saverengine.cpp 2009/01/26 15:18:52 916964
@@ -46,7 +46,11 @@
// Save X screensaver parameters
XGetScreenSaver(QX11Info::display(), &mXTimeout, &mXInterval,
&mXBlanking, &mXExposures);
- // ... and disable it
+ // And disable it. The internal X screensaver is not used at all, but we use its
+ // internal idle timer (and it is also used by DPMS support in X). This timer must not
+ // be altered by this code, since e.g. resetting the counter after activating our
+ // screensaver would prevent DPMS from activating. We use the timer merely to detect
+ // user activity.
XSetScreenSaver(QX11Info::display(), 0, mXInterval, mXBlanking, mXExposures);
mState = Waiting;
@@ -87,7 +91,6 @@
void SaverEngine::Lock()
{
- bool ok = true;
if (mState == Waiting)
{
startLockProcess( ForceLock );
@@ -125,6 +128,7 @@
void SaverEngine::SimulateUserActivity()
{
+ XForceScreenSaver( QX11Info::display(), ScreenSaverReset );
if ( mXAutoLock && mState == Waiting )
{
mXAutoLock->resetTrigger();
@@ -323,6 +327,8 @@
//
void SaverEngine::idleTimeout()
{
+ if( mState != Waiting )
+ return; // already saving
startLockProcess( DefaultLock );
}
--- branches/KDE/4.2/kdebase/workspace/krunner/screensaver/xautolock.cpp 2009/01/26 15:17:22 916963
+++ branches/KDE/4.2/kdebase/workspace/krunner/screensaver/xautolock.cpp 2009/01/26 15:18:52 916964
@@ -83,8 +83,10 @@
mActive = false;
mTimerId = startTimer( CHECK_INTERVAL );
+ // This is an internal clock timer (in seconds), used instead of querying system time.
+ // It is incremented manually, preventing from problems with clock jumps.
+ // In other words, this is the 'now' time and the reference point for other times here.
mElapsed = 0;
-
}
//---------------------------------------------------------------------------
@@ -126,8 +128,6 @@
{
mActive = true;
resetTrigger();
- XSetScreenSaver(QX11Info::display(), mTimeout + 10, 100, PreferBlanking, DontAllowExposures); // We'll handle blanking
- kDebug() << "XSetScreenSaver" << mTimeout + 10;
}
//---------------------------------------------------------------------------
@@ -138,8 +138,6 @@
{
mActive = false;
resetTrigger();
- XSetScreenSaver(QX11Info::display(), 0, 100, PreferBlanking, DontAllowExposures); // No blanking at all
- kDebug() << "XSetScreenSaver 0";
}
//---------------------------------------------------------------------------
@@ -148,12 +146,15 @@
//
void XAutoLock::resetTrigger()
{
+ // Time of the last user activity (used only when the internal XScreensaver
+ // idle counter is not available).
mLastReset = mElapsed;
+ // Time when screensaver should be activated.
mTrigger = mElapsed + mTimeout;
#ifdef HAVE_XSCREENSAVER
mLastIdle = 0;
#endif
- XForceScreenSaver( QX11Info::display(), ScreenSaverReset );
+ // Do not reset the internal X screensaver here (no XForceScreenSaver())
}
//---------------------------------------------------------------------------
@@ -205,6 +206,9 @@
if (mMitInfo)
{
Display *d = QX11Info::display();
+ // Check user idle time. If it is smaller than before, it is either
+ // clock jump or user activity, so reset the trigger time. Checking whether
+ // there is user inactivity timeout is done below using mTrigger and mElapsed.
XScreenSaverQueryInfo(d, DefaultRootWindow(d), mMitInfo);
if (mLastIdle < mMitInfo->idle)
mLastIdle = mMitInfo->idle;
@@ -218,12 +222,11 @@
bool activate = false;
- // kDebug() << now << mTrigger;
+ // This is the test whether to activate screensaver. If we have reached the time
+ // and for the whole timeout period there was no activity (which would change mTrigger
+ // again), activate.
if (mElapsed >= mTrigger)
- {
- resetTrigger();
activate = true;
- }
#ifdef HAVE_DPMS
BOOL on;
@@ -237,6 +240,8 @@
// that is always smaller than DPMS timeout (X bug I guess). So if DPMS
// saving is active, simply always activate our saving too, otherwise
// this could prevent locking from working.
+ // X.Org 7.4: With this version activating DPMS resets the screensaver idle timer,
+ // so keep this. It probably makes sense to always do this anyway.
if(state == DPMSModeStandby || state == DPMSModeSuspend || state == DPMSModeOff)
activate = true;
// If we are DPMS-dependent and either DPMS is turned off completely or all
--- branches/KDE/4.2/kdebase/workspace/krunner/screensaver/xautolock.cpp 2009/01/26 15:21:51 916966
+++ branches/KDE/4.2/kdebase/workspace/krunner/screensaver/xautolock.cpp 2009/01/26 15:22:44 916967
@@ -253,10 +253,15 @@
}
#endif
-#ifdef HAVE_XSCREENSAVER
- if (mMitInfo && mMitInfo->state == ScreenSaverDisabled)
- activate = false;
-#endif
+ // Do not check whether internal X screensaver is enabled or disabled, since we
+ // have disabled it ourselves. Some apps might try to disable it too to prevent
+ // screensavers, but then our logic breaks[*]. Those apps need to disable DPMS anyway,
+ // or they will still have problems, so the DPMS code above should be enough.
+ // Besides, I doubt other screensaver implementations check this either.
+ // [*] We can't run with X screensaver enabled, since then sooner or later
+ // the internal screensaver will activate instead of our screensaver and we cannot
+ // prevent its activation by resetting the idle counter since that would also
+ // reset DPMS saving.
if(mActive && activate)
emit timeout();
--- branches/KDE/4.2/kdebase/workspace/krunner/screensaver/saverengine.cpp 2009/02/07 12:33:52 922627
+++ branches/KDE/4.2/kdebase/workspace/krunner/screensaver/saverengine.cpp 2009/02/07 12:35:42 922628
@@ -67,6 +67,24 @@
SIGNAL(serviceOwnerChanged(QString,QString,QString)),
SLOT(serviceOwnerChanged(QString,QString,QString)));
+ // Also receive updates triggered through the DBus (from powerdevil) see Bug #177123
+ QStringList modules;
+ QDBusInterface kdedInterface("org.kde.kded", "/kded", "org.kde.kded");
+ QDBusReply<QStringList> reply = kdedInterface.call("loadedModules");
+
+ if (!reply.isValid()) {
+ return;
+ }
+
+ modules = reply.value();
+
+ if (modules.contains("powerdevil")) {
+ if (!QDBusConnection::sessionBus().connect("org.kde.kded", "/modules/powerdevil", "org.kde.PowerDevil",
+ "DPMSconfigUpdated", this, SLOT(configure()))) {
+ kDebug() << "error!";
+ }
+ }
+
// I make it a really random number to avoid
// some assumptions in clients, but just increase
// while gnome-ss creates a random number every time
--- branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/CMakeLists.txt 2009/02/07 12:33:52 922627
+++ branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/CMakeLists.txt 2009/02/07 12:35:42 922628
@@ -17,11 +17,11 @@
kde4_add_kcfg_files(kded_powerdevil_SRCS ../PowerDevilSettings.kcfgc)
set(screensaver_xml "${KDEBASE_WORKSPACE_SOURCE_DIR}/krunner/dbus/org.freedesktop.ScreenSaver.xml")
-set(kscreensaver_xml ${KDEBASE_WORKSPACE_SOURCE_DIR}/krunner/dbus/org.kde.screensaver.xml)
+#set(kscreensaver_xml ${KDEBASE_WORKSPACE_SOURCE_DIR}/krunner/dbus/org.kde.screensaver.xml)
set(ksmserver_xml ${KDEBASE_WORKSPACE_SOURCE_DIR}/ksmserver/org.kde.KSMServerInterface.xml)
qt4_add_dbus_interface(kded_powerdevil_SRCS ${screensaver_xml} screensaver_interface )
-qt4_add_dbus_interface(kded_powerdevil_SRCS ${kscreensaver_xml} kscreensaver_interface )
+#qt4_add_dbus_interface(kded_powerdevil_SRCS ${kscreensaver_xml} kscreensaver_interface )
qt4_add_dbus_interface(kded_powerdevil_SRCS ${ksmserver_xml} ksmserver_interface )
qt4_add_dbus_adaptor( kded_powerdevil_SRCS org.kde.PowerDevil.xml PowerDevilDaemon.h PowerDevilDaemon )
--- branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/PowerDevilDaemon.cpp 2009/02/07 12:33:52 922627
+++ branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/PowerDevilDaemon.cpp 2009/02/07 12:35:42 922628
@@ -50,7 +50,7 @@
#include <solid/processor.h>
#include "screensaver_interface.h"
-#include "kscreensaver_interface.h"
+//#include "kscreensaver_interface.h"
#include "ksmserver_interface.h"
#include <config-powerdevil.h>
@@ -109,7 +109,8 @@
OrgFreedesktopScreenSaverInterface * screenSaverIface;
OrgKdeKSMServerInterfaceInterface * ksmServerIface;
- OrgKdeScreensaverInterface * kscreenSaverIface;
+// Now we send a signal to trigger the configuration of Kscreensaver (Bug #177123) and we don't need the interface anymore
+// OrgKdeScreensaverInterface * kscreenSaverIface;
KComponentData applicationData;
KSharedConfig::Ptr profilesConfig;
@@ -174,9 +175,13 @@
QDBusConnection::sessionBus(), this);
d->ksmServerIface = new OrgKdeKSMServerInterfaceInterface("org.kde.ksmserver", "/KSMServer",
QDBusConnection::sessionBus(), this);
- d->kscreenSaverIface = new OrgKdeScreensaverInterface("org.freedesktop.ScreenSaver", "/ScreenSaver",
- QDBusConnection::sessionBus(), this);
+ /* Not needed anymore; I am not sure if we will need that in a future, so I leave it here
+ * just in case.
+ *
+ * d->kscreenSaverIface = new OrgKdeScreensaverInterface("org.freedesktop.ScreenSaver", "/ScreenSaver",
+ * QDBusConnection::sessionBus(), this);
+ */
connect(d->notifier, SIGNAL(buttonPressed(int)), this, SLOT(buttonPressed(int)));
connect(d->notifier, SIGNAL(batteryRemainingTimeChanged(int)), this, SLOT(batteryRemainingTimeChanged(int)));
connect(d->lockHandler, SIGNAL(streamCriticalNotification(const QString&, const QString&,
@@ -490,13 +495,13 @@
int suspend = 60 * settings->readEntry("DPMSSuspend").toInt();
int poff = 60 * settings->readEntry("DPMSPowerOff").toInt();
- if (settings->readEntry("DPMSStandbyEnabled", false)) {
+ if (!settings->readEntry("DPMSStandbyEnabled", false)) {
standby = 0;
}
- if (settings->readEntry("DPMSSuspendEnabled", false)) {
+ if (!settings->readEntry("DPMSSuspendEnabled", false)) {
suspend = 0;
}
- if (settings->readEntry("DPMSPowerOffEnabled", false)) {
+ if (!settings->readEntry("DPMSPowerOffEnabled", false)) {
poff = 0;
}
@@ -508,7 +513,8 @@
}
// The screen saver depends on the DPMS settings
- d->kscreenSaverIface->configure();
+ // Emit a signal so that Kscreensaver knows it has to re-configure itself
+ emit DPMSconfigUpdated();
#endif
}
@@ -850,7 +856,7 @@
* We make an intensive use of qMin/qMax here to determine the minimum time.
*/
- kDebug() << "Polling started, idle time is" << idle << "seconds";
+ // kDebug() << "Polling started, idle time is" << idle << "seconds";
KConfigGroup * settings = getCurrentProfile();
@@ -860,7 +866,7 @@
if (!settings->readEntry("dimOnIdle", false) && !settings->readEntry("turnOffIdle", false) &&
settings->readEntry("idleAction").toInt() == None) {
- kDebug() << "Stopping timer";
+ // kDebug() << "Stopping timer";
POLLER_CALL(d->pollLoader->poller(), stopCatchingTimeouts());
return;
}
@@ -885,13 +891,13 @@
minTime = qMin(minTime, minDimTime);
}
- kDebug() << "Minimum time is" << minTime << "seconds";
+ // kDebug() << "Minimum time is" << minTime << "seconds";
if (idle < minTime) {
d->status = NoAction;
int remaining = minTime - idle;
POLLER_CALL(d->pollLoader->poller(), setNextTimeout(remaining * 1000));
- kDebug() << "Nothing to do, next event in" << remaining << "seconds";
+ // kDebug() << "Nothing to do, next event in" << remaining << "seconds";
return;
}
@@ -1302,7 +1308,6 @@
Solid::Control::PowerManager::setBrightness(b);
return;
}
-
Solid::Control::PowerManager::setBrightness(value);
}
@@ -1352,7 +1357,7 @@
}
if (PowerDevilSettings::manageDPMS()) {
- QTimer::singleShot(300, this, SLOT(setUpDPMS()));
+ setUpDPMS();
}
}
--- branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/PowerDevilDaemon.h 2009/02/07 12:33:52 922627
+++ branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/PowerDevilDaemon.h 2009/02/07 12:35:42 922628
@@ -112,8 +112,6 @@
void cleanUpTimer();
- void setUpDPMS();
-
void emitCriticalNotification(const QString &evid, const QString &message = QString(),
const char *slot = 0, const QString &iconname = "dialog-error");
@@ -125,10 +123,13 @@
void stateChanged(int, bool);
void profileChanged(const QString &, const QStringList &);
+ void DPMSconfigUpdated();
private:
void lockScreen();
+ void setUpDPMS();
+
KConfigGroup *getCurrentProfile(bool forcereload = false);
void applyProfile();
--- branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/org.kde.PowerDevil.xml 2009/02/07 12:33:52 922627
+++ branches/KDE/4.2/kdebase/workspace/powerdevil/daemon/org.kde.PowerDevil.xml 2009/02/07 12:35:42 922628
@@ -59,6 +59,7 @@
<arg type="s" direction="out" />
<arg type="as" direction="out" />
</signal>
-
+ <signal name="DPMSconfigUpdated">
+ </signal>
</interface>
-</node>
\ No newline at end of file
+</node>
Index: kdebase-workspace.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kdebase-workspace/devel/kdebase-workspace.spec,v
retrieving revision 1.185
retrieving revision 1.186
diff -u -r1.185 -r1.186
--- kdebase-workspace.spec 18 Feb 2009 15:35:05 -0000 1.185
+++ kdebase-workspace.spec 19 Feb 2009 21:06:50 -0000 1.186
@@ -8,7 +8,7 @@
Name: kdebase-workspace
Version: 4.2.0
-Release: 12%{?dist}
+Release: 13%{?dist}
Source0: ftp://ftp.kde.org/pub/kde/stable/%{version}/src/kdebase-workspace-%{version}.tar.bz2
License: GPLv2
Group: User Interface/Desktops
@@ -45,6 +45,8 @@
# http://websvn.kde.org/?view=rev&revision=915366
# fix shutdown dialog not centered, sometimes entirely off screen (from 4.2.1)
Patch105: kdebase-workspace-4.2.0-kde#181199.patch
+# http://bugs.kde.org.177123 dpms issues
+Patch106: kdebase-workspace-4.2.0-kde#177123.patch
# FIXME: "inconsistent naming System Monitor vs KSysGuard" http://bugs.kde.org/162151
@@ -223,6 +225,8 @@
%patch103 -p1 -b .kde#180576
%patch104 -p1 -b .kdm-qt45
%patch105 -p0 -b .kde#181199
+%patch106 -p5 -b .kde#177123
+
%build
@@ -368,7 +372,11 @@
%{_kde4_appsdir}/plasma_scriptengine_python
%{_kde4_datadir}/kde4/services/plasma-scriptengine*python.desktop
+
%changelog
+* Thu Feb 19 2009 Rex Dieter <rdieter at fedoraproject.org> - 4.2.0-13
+- dpms issues (kdebug#177123)
+
* Wed Feb 18 2009 Than Ngo <than at redhat.com> - 4.2.0-12
- drop the BR on PyKDE4, it's just needed for runtime
- python-applet subpackage
More information about the fedora-extras-commits
mailing list