From 3c109e3d106e7348cea31ea1be7ce0aaadee307d Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 10 Mar 2019 23:01:11 +0900 Subject: Fixed bug 925 ("SAK driven secure dialog is not available for use" message in .xsession-errors even when SAK is disabled). Signed-off-by: Michele Calgaro --- kdesktop/lockeng.cc | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/kdesktop/lockeng.cc b/kdesktop/lockeng.cc index 4683ad495..f02e51440 100644 --- a/kdesktop/lockeng.cc +++ b/kdesktop/lockeng.cc @@ -139,14 +139,29 @@ SaverEngine::SaverEngine() connect(&mLockProcess, TQT_SIGNAL(processExited(TDEProcess *)), TQT_SLOT(lockProcessExited())); - mSAKProcess = new TDEProcess; - *mSAKProcess << "tdmtsak"; - connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); - - TQTimer::singleShot( 0, this, TQT_SLOT(handleSecureDialog()) ); - configure(); + // Create SAK process only if SAK is enabled + KSimpleConfig *config; + struct stat st; + if (stat( KDE_CONFDIR "/tdm/tdmdistrc" , &st) == 0) { + config = new KSimpleConfig( TQString::fromLatin1( KDE_CONFDIR "/tdm/tdmdistrc" )); + } + else { + config = new KSimpleConfig( TQString::fromLatin1( KDE_CONFDIR "/tdm/tdmrc" )); + } + config->setGroup("X-:*-Greeter"); + bool useSAKProcess = false; +#ifdef BUILD_TSAK + useSAKProcess = config->readBoolEntry("UseSAK", false) && KDesktopSettings::useTDESAK(); +#endif + if (useSAKProcess) { + mSAKProcess = new TDEProcess; + *mSAKProcess << "tdmtsak"; + connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited())); + TQTimer::singleShot( 0, this, TQT_SLOT(handleSecureDialog()) ); + } + mLockProcess.clearArguments(); TQString path = TDEStandardDirs::findExe( "kdesktop_lock" ); if( path.isEmpty()) @@ -173,14 +188,6 @@ SaverEngine::SaverEngine() } // lock the desktop if required - KSimpleConfig *config; - struct stat st; - if (stat( KDE_CONFDIR "/tdm/tdmdistrc" , &st) == 0) { - config = new KSimpleConfig( TQString::fromLatin1( KDE_CONFDIR "/tdm/tdmdistrc" )); - } - else { - config = new KSimpleConfig( TQString::fromLatin1( KDE_CONFDIR "/tdm/tdmrc" )); - } config->setGroup("X-:0-Core"); bool autoLoginEnable = config->readBoolEntry("AutoLoginEnable", false); bool autoLoginLocked = config->readBoolEntry("AutoLoginLocked", false); @@ -454,11 +461,17 @@ void SaverEngine::enableExports() void SaverEngine::handleSecureDialog() { // Wait for SAK press - if (!mSAKProcess->isRunning()) mSAKProcess->start(); + if (mSAKProcess && !mSAKProcess->isRunning()) { + mSAKProcess->start(); + } } void SaverEngine::slotSAKProcessExited() { + if (!mSAKProcess) { + printf("[kdesktop] SAK process does not exist. Something went wrong. Ignoring...\n"); fflush(stdout); + return; + } int retcode = mSAKProcess->exitStatus(); if ((retcode != 0) && (mSAKProcess->normalExit())) { trinity_lockeng_sak_available = FALSE; @@ -566,7 +579,9 @@ bool SaverEngine::startLockProcess( LockType lock_type ) } mState = Preparing; - mSAKProcess->kill(SIGTERM); + if (mSAKProcess) { + mSAKProcess->kill(SIGTERM); + } enableExports(); -- cgit v1.2.1