[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