[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/workspace/kwin
From: Chani Armitage <chanika () gmail ! com>
Date: 2010-12-17 13:05:25
Message-ID: 20101217130525.472A2AC8A8 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1207295 by chani:
return false if anyone tries to start/stop an activity during logout
M +2 -0 org.kde.KWin.xml
M +21 -10 sm.cpp
M +2 -2 workspace.h
--- trunk/KDE/kdebase/workspace/kwin/org.kde.KWin.xml #1207294:1207295
@@ -75,9 +75,11 @@
<method name="dumpTiles"/>
<method name="stopActivity">
<arg type="s" direction="in"/>
+ <arg type="b" direction="out"/>
</method>
<method name="startActivity">
<arg type="s" direction="in"/>
+ <arg type="b" direction="out"/>
</method>
</interface>
</node>
--- trunk/KDE/kdebase/workspace/kwin/sm.cpp #1207294:1207295
@@ -205,10 +205,16 @@
//cg.writeEntry( "desktop", currentDesktop());
}
-void Workspace::stopActivity(const QString &id)
+bool Workspace::stopActivity(const QString &id)
{
+ if (sessionSaving()) {
+ return false; //ksmserver doesn't queue requests (yet)
+ //FIXME what about session *loading*?
+ }
//ugly hack to avoid dbus deadlocks
QMetaObject::invokeMethod(this, "reallyStopActivity", Qt::QueuedConnection, Q_ARG(QString, id));
+ //then lie and assume it worked.
+ return true;
}
void Workspace::reallyStopActivity(const QString &id)
@@ -335,25 +341,30 @@
addSessionInfo(cg);
}
-void Workspace::startActivity(const QString &id)
+bool Workspace::startActivity(const QString &id)
{
- if (!allActivities_.contains(id))
- return; //bogus id
+ if (sessionSaving()) {
+ return false; //ksmserver doesn't queue requests (yet)
+ }
+ if (!allActivities_.contains(id)) {
+ return false; //bogus id
+ }
loadSubSessionInfo(id);
QDBusInterface ksmserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface");
- if (ksmserver.isValid())
- {
+ if (ksmserver.isValid()) {
QDBusMessage reply = ksmserver.call("restoreSubSession", id);
- if (reply.type() == QDBusMessage::ErrorMessage)
+ if (reply.type() == QDBusMessage::ErrorMessage) {
kDebug() << "dbus error:" << reply.errorMessage();
- else
- kDebug() << "dbus succeeded";
+ return false;
}
- else
+ } else {
kDebug() << "couldn't get ksmserver interface";
+ return false;
}
+ return true;
+}
/*!
Returns a SessionInfo for client \a c. The returned session
--- trunk/KDE/kdebase/workspace/kwin/workspace.h #1207294:1207295
@@ -450,8 +450,8 @@
void toggleTiling();
void nextTileLayout();
void previousTileLayout();
- void stopActivity( const QString &id );
- void startActivity( const QString &id );
+ bool stopActivity( const QString &id );
+ bool startActivity( const QString &id );
void setCurrentScreen( int new_screen );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic