summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdebase/fix-kcontrol-yast.diff
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core/tdebase/fix-kcontrol-yast.diff')
-rw-r--r--opensuse/core/tdebase/fix-kcontrol-yast.diff63
1 files changed, 63 insertions, 0 deletions
diff --git a/opensuse/core/tdebase/fix-kcontrol-yast.diff b/opensuse/core/tdebase/fix-kcontrol-yast.diff
new file mode 100644
index 000000000..5902d904d
--- /dev/null
+++ b/opensuse/core/tdebase/fix-kcontrol-yast.diff
@@ -0,0 +1,63 @@
+Index: kcontrol/kcontrol/modules.cpp
+===================================================================
+--- kcontrol/kcontrol/modules.cpp.orig
++++ kcontrol/kcontrol/modules.cpp
+@@ -19,6 +19,7 @@
+
+ #include <unistd.h>
+ #include <sys/types.h>
++#include <stdlib.h>
+
+
+ #include <qlabel.h>
+@@ -59,6 +60,10 @@ ConfigModule::~ConfigModule()
+
+ ProxyWidget *ConfigModule::module()
+ {
++ KDesktopFile kd(service()->desktopEntryPath());
++ if ( !kd.readEntry("X-SuSE-YaST-Call").isEmpty() )
++ setenv("KCMYAST2_CALL", kd.readEntry("X-SuSE-YaST-Call").latin1(), 1 );
++
+ if (_module)
+ return _module;
+
+@@ -168,6 +173,7 @@ void ConfigModule::runAsRoot()
+ // prepare the process to run the kcmshell
+ QString cmd = service()->exec().stripWhiteSpace();
+ bool kdeshell = false;
++ bool proxy = false;
+ if (cmd.left(5) == "kdesu")
+ {
+ cmd = cmd.remove(0,5).stripWhiteSpace();
+@@ -185,6 +191,15 @@ void ConfigModule::runAsRoot()
+ kdeshell = true;
+ }
+
++ KDesktopFile kd(service()->desktopEntryPath());
++ if ( !kd.readEntry("X-SuSE-YaST-Call").isEmpty() ){
++ kdeshell = true;
++ proxy = true;
++ cmd=service()->desktopEntryPath();
++
++ setenv("KCMYAST2_CALL", kd.readEntry("X-SuSE-YaST-Call").latin1(), 1 );
++ }
++
+ // run the process
+ QString kdesu = KStandardDirs::findExe("kdesu");
+ if (!kdesu.isEmpty())
+@@ -196,12 +211,12 @@ void ConfigModule::runAsRoot()
+ // in that case the modules is started through kdesud and kdesu
+ // returns before the module is running and that doesn't work.
+ // We also don't have a way to close the module in that case.
+- *_rootProcess << "--n"; // Don't keep password.
++ *_rootProcess << "--n" << "-t"; // Don't keep password.
+ if (kdeshell) {
+- *_rootProcess << QString("%1 %2 --embed %3 --lang %4").arg(locate("exe", "kcmshell")).arg(cmd).arg(_embedWidget->winId()).arg(KGlobal::locale()->language());
++ *_rootProcess << QString("%1 %2 %3 %4 --lang %5").arg(locate("exe", "kcmshell")).arg(cmd).arg(proxy?"--embed-proxy":"--embed").arg(_embedWidget->winId()).arg(KGlobal::locale()->language());
+ }
+ else {
+- *_rootProcess << QString("%1 --embed %2 --lang %3").arg(cmd).arg(_embedWidget->winId()).arg( KGlobal::locale()->language() );
++ *_rootProcess << QString("%1 %2 %3 --lang %4").arg(cmd).arg(proxy?"--embed-proxy":"--embed").arg(_embedWidget->winId()).arg( KGlobal::locale()->language() );
+ }
+
+ connect(_rootProcess, SIGNAL(processExited(KProcess*)), this, SLOT(rootExited(KProcess*)));