diff options
Diffstat (limited to 'opensuse/core/tdebase/ksmserver-kdeinit.diff')
-rw-r--r-- | opensuse/core/tdebase/ksmserver-kdeinit.diff | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/opensuse/core/tdebase/ksmserver-kdeinit.diff b/opensuse/core/tdebase/ksmserver-kdeinit.diff new file mode 100644 index 000000000..a21b92dc8 --- /dev/null +++ b/opensuse/core/tdebase/ksmserver-kdeinit.diff @@ -0,0 +1,67 @@ +--- ksmserver/server.h.sav 2009-07-23 11:44:55.000000000 +0200 ++++ ksmserver/server.h 2009-07-23 11:47:52.000000000 +0200 +@@ -145,7 +145,8 @@ private: + + KProcess* startApplication( QStringList command, + const QString& clientMachine = QString::null, +- const QString& userId = QString::null ); ++ const QString& userId = QString::null, ++ bool wm = false ); + void executeCommand( const QStringList& command ); + + bool isWM( const KSMClient* client ) const; +--- ksmserver/startup.cpp.sav 2009-07-23 11:44:54.000000000 +0200 ++++ ksmserver/startup.cpp 2009-07-23 11:45:49.000000000 +0200 +@@ -168,7 +168,7 @@ void KSMServer::launchWM( const QValueLi + // when we have a window manager, we start it first and give + // it some time before launching other processes. Results in a + // visually more appealing startup. +- wmProcess = startApplication( wmStartCommands[ 0 ] ); ++ wmProcess = startApplication( wmStartCommands[ 0 ], QString(), QString(), true ); + connect( wmProcess, SIGNAL( processExited( KProcess* )), SLOT( wmProcessChange())); + // there can be possibly more wm's (because of forking for multihead), + // but in such case care only about the process of the first one +--- ksmserver/server.cpp.sav 2009-07-23 11:51:33.000000000 +0200 ++++ ksmserver/server.cpp 2009-07-23 11:49:02.000000000 +0200 +@@ -101,7 +101,7 @@ KSMServer* KSMServer::self() + * to restart applications. + */ + KProcess* KSMServer::startApplication( QStringList command, const QString& clientMachine, +- const QString& userId ) ++ const QString& userId, bool wm ) + { + if ( command.isEmpty() ) + return NULL; +@@ -118,12 +118,26 @@ KProcess* KSMServer::startApplication( Q + command.prepend( clientMachine ); + command.prepend( xonCommand ); // "xon" by default + } +- KProcess* process = new KProcess( this ); +- *process << command; +- // make it auto-delete +- connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); +- process->start(); +- return process; ++// TODO this function actually should not use KProcess at all and use klauncher (kdeinit) instead. ++// Klauncher should also have support for tracking whether the launched process is still alive ++// or not, so this should be redone. For now, use KProcess for wm's, as they need to be tracked, ++// klauncher for the rest where ksmserver doesn't care. ++ if( wm ) { ++ KProcess* process = new KProcess( this ); ++ *process << command; ++ // make it auto-delete ++ connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); ++ process->start(); ++ return process; ++ } else { ++ int n = command.count(); ++ QCString app = command[0].latin1(); ++ QValueList<QCString> argList; ++ for ( int i=1; i < n; i++) ++ argList.append( QCString(command[i].latin1())); ++ DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList<QCString>" ) ); ++ return NULL; ++ } + } + + /*! Utility function to execute a command on the local machine. Used |