--- kdebase-workspace-4.3.85/systemsettings/core/ModuleView.cpp~ 2009-12-11 00:14:03.000000000 +0100 +++ kdebase-workspace-4.3.85/systemsettings/core/ModuleView.cpp 2009-12-22 15:47:35.000000000 +0100 @@ -40,6 +40,7 @@ #include #include #include +#include #include #include "MenuItem.h" @@ -129,6 +130,32 @@ return; } + if ( menuItem->service()->property( "X-KDE-RootOnly", QVariant::Bool ).toBool() ) { + QString kdesu = KStandardDirs::findExe( "kdesu" ); + QString cmd = menuItem->service()->exec().trimmed(); + + /* Prepare the process to run the kcmshell */ + if ( cmd.left(5) == "kdesu" ) + { + cmd = cmd.remove(0,5).trimmed(); + + /* Remove all kdesu switches */ + while ( cmd.length() > 1 && cmd[ 0 ] == '-' ) + cmd = cmd.remove( 0, cmd.indexOf( ' ' ) ).trimmed(); + } + + if ( cmd.left(9) == "kcmshell4" ) + cmd = cmd.remove(0,9).trimmed(); + + QStringList args; + args << "-i" << QString( menuItem->service()->icon() ) << "-c" << QString( "%1 %2 --lang %3" ).arg( KStandardDirs::locate("exe", "kcmshell4") ).arg( cmd ).arg( KGlobal::locale()->language() ); + + kDebug() << "Starting root module: " << args; + QProcess::startDetached( kdesu, args ); + + return; + } + QList modules; if ( menuItem->children().empty() ) { modules << &menuItem->item();