diff options
Diffstat (limited to 'source/kde/kdebase-workspace/kcmshell_root_privilege.patch')
-rw-r--r-- | source/kde/kdebase-workspace/kcmshell_root_privilege.patch | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/source/kde/kdebase-workspace/kcmshell_root_privilege.patch b/source/kde/kdebase-workspace/kcmshell_root_privilege.patch new file mode 100644 index 00000000..f81a98ed --- /dev/null +++ b/source/kde/kdebase-workspace/kcmshell_root_privilege.patch @@ -0,0 +1,43 @@ +--- 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 <KCModuleProxy> + #include <KStandardGuiItem> + #include <KDialogButtonBox> ++#include <KStandardDirs> + #include <kauthaction.h> + + #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<KCModuleInfo*> modules; + if ( menuItem->children().empty() ) { + modules << &menuItem->item(); |