|
|
@ -48,21 +48,21 @@ bool trinity_lockeng_sak_available = TRUE;
|
|
|
|
SaverEngine* m_masterSaverEngine = NULL;
|
|
|
|
SaverEngine* m_masterSaverEngine = NULL;
|
|
|
|
static void sigusr1_handler(int)
|
|
|
|
static void sigusr1_handler(int)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (m_masterSaverEngine) {
|
|
|
|
if (m_masterSaverEngine) {
|
|
|
|
m_masterSaverEngine->slotLockProcessWaiting();
|
|
|
|
m_masterSaverEngine->slotLockProcessWaiting();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
static void sigusr2_handler(int)
|
|
|
|
static void sigusr2_handler(int)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (m_masterSaverEngine) {
|
|
|
|
if (m_masterSaverEngine) {
|
|
|
|
m_masterSaverEngine->slotLockProcessFullyActivated();
|
|
|
|
m_masterSaverEngine->slotLockProcessFullyActivated();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
static void sigttin_handler(int)
|
|
|
|
static void sigttin_handler(int)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (m_masterSaverEngine) {
|
|
|
|
if (m_masterSaverEngine) {
|
|
|
|
m_masterSaverEngine->slotLockProcessReady();
|
|
|
|
m_masterSaverEngine->slotLockProcessReady();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
@ -72,73 +72,73 @@ static void sigttin_handler(int)
|
|
|
|
// a newly started process.
|
|
|
|
// a newly started process.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
SaverEngine::SaverEngine()
|
|
|
|
SaverEngine::SaverEngine()
|
|
|
|
: TQWidget(),
|
|
|
|
: TQWidget(),
|
|
|
|
KScreensaverIface(),
|
|
|
|
KScreensaverIface(),
|
|
|
|
mBlankOnly(false),
|
|
|
|
mBlankOnly(false),
|
|
|
|
mSAKProcess(NULL),
|
|
|
|
mSAKProcess(NULL),
|
|
|
|
mTerminationRequested(false),
|
|
|
|
mTerminationRequested(false),
|
|
|
|
mSaverProcessReady(false),
|
|
|
|
mSaverProcessReady(false),
|
|
|
|
dBusLocal(0),
|
|
|
|
dBusLocal(0),
|
|
|
|
dBusWatch(0),
|
|
|
|
dBusWatch(0),
|
|
|
|
systemdSession(0)
|
|
|
|
systemdSession(0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// handle SIGUSR1
|
|
|
|
// handle SIGUSR1
|
|
|
|
m_masterSaverEngine = this;
|
|
|
|
m_masterSaverEngine = this;
|
|
|
|
mSignalAction.sa_handler= sigusr1_handler;
|
|
|
|
mSignalAction.sa_handler= sigusr1_handler;
|
|
|
|
sigemptyset(&(mSignalAction.sa_mask));
|
|
|
|
sigemptyset(&(mSignalAction.sa_mask));
|
|
|
|
sigaddset(&(mSignalAction.sa_mask), SIGUSR1);
|
|
|
|
sigaddset(&(mSignalAction.sa_mask), SIGUSR1);
|
|
|
|
mSignalAction.sa_flags = 0;
|
|
|
|
mSignalAction.sa_flags = 0;
|
|
|
|
sigaction(SIGUSR1, &mSignalAction, 0L);
|
|
|
|
sigaction(SIGUSR1, &mSignalAction, 0L);
|
|
|
|
|
|
|
|
|
|
|
|
// handle SIGUSR2
|
|
|
|
// handle SIGUSR2
|
|
|
|
m_masterSaverEngine = this;
|
|
|
|
m_masterSaverEngine = this;
|
|
|
|
mSignalAction.sa_handler= sigusr2_handler;
|
|
|
|
mSignalAction.sa_handler= sigusr2_handler;
|
|
|
|
sigemptyset(&(mSignalAction.sa_mask));
|
|
|
|
sigemptyset(&(mSignalAction.sa_mask));
|
|
|
|
sigaddset(&(mSignalAction.sa_mask), SIGUSR2);
|
|
|
|
sigaddset(&(mSignalAction.sa_mask), SIGUSR2);
|
|
|
|
mSignalAction.sa_flags = 0;
|
|
|
|
mSignalAction.sa_flags = 0;
|
|
|
|
sigaction(SIGUSR2, &mSignalAction, 0L);
|
|
|
|
sigaction(SIGUSR2, &mSignalAction, 0L);
|
|
|
|
|
|
|
|
|
|
|
|
// handle SIGTTIN
|
|
|
|
// handle SIGTTIN
|
|
|
|
m_masterSaverEngine = this;
|
|
|
|
m_masterSaverEngine = this;
|
|
|
|
mSignalAction.sa_handler= sigttin_handler;
|
|
|
|
mSignalAction.sa_handler= sigttin_handler;
|
|
|
|
sigemptyset(&(mSignalAction.sa_mask));
|
|
|
|
sigemptyset(&(mSignalAction.sa_mask));
|
|
|
|
sigaddset(&(mSignalAction.sa_mask), SIGTTIN);
|
|
|
|
sigaddset(&(mSignalAction.sa_mask), SIGTTIN);
|
|
|
|
mSignalAction.sa_flags = 0;
|
|
|
|
mSignalAction.sa_flags = 0;
|
|
|
|
sigaction(SIGTTIN, &mSignalAction, 0L);
|
|
|
|
sigaction(SIGTTIN, &mSignalAction, 0L);
|
|
|
|
|
|
|
|
|
|
|
|
// Save X screensaver parameters
|
|
|
|
// Save X screensaver parameters
|
|
|
|
XGetScreenSaver(tqt_xdisplay(), &mXTimeout, &mXInterval,
|
|
|
|
XGetScreenSaver(tqt_xdisplay(), &mXTimeout, &mXInterval,
|
|
|
|
&mXBlanking, &mXExposures);
|
|
|
|
&mXBlanking, &mXExposures);
|
|
|
|
|
|
|
|
|
|
|
|
mState = Waiting;
|
|
|
|
mState = Waiting;
|
|
|
|
mXAutoLock = 0;
|
|
|
|
mXAutoLock = 0;
|
|
|
|
mEnabled = false;
|
|
|
|
mEnabled = false;
|
|
|
|
|
|
|
|
|
|
|
|
connect(&mLockProcess, TQT_SIGNAL(processExited(TDEProcess *)),
|
|
|
|
connect(&mLockProcess, TQT_SIGNAL(processExited(TDEProcess *)),
|
|
|
|
TQT_SLOT(lockProcessExited()));
|
|
|
|
TQT_SLOT(lockProcessExited()));
|
|
|
|
|
|
|
|
|
|
|
|
mSAKProcess = new TDEProcess;
|
|
|
|
mSAKProcess = new TDEProcess;
|
|
|
|
*mSAKProcess << "tdmtsak";
|
|
|
|
*mSAKProcess << "tdmtsak";
|
|
|
|
connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited()));
|
|
|
|
connect(mSAKProcess, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotSAKProcessExited()));
|
|
|
|
|
|
|
|
|
|
|
|
TQTimer::singleShot( 0, this, TQT_SLOT(handleSecureDialog()) );
|
|
|
|
TQTimer::singleShot( 0, this, TQT_SLOT(handleSecureDialog()) );
|
|
|
|
|
|
|
|
|
|
|
|
configure();
|
|
|
|
configure();
|
|
|
|
|
|
|
|
|
|
|
|
mLockProcess.clearArguments();
|
|
|
|
mLockProcess.clearArguments();
|
|
|
|
TQString path = TDEStandardDirs::findExe( "kdesktop_lock" );
|
|
|
|
TQString path = TDEStandardDirs::findExe( "kdesktop_lock" );
|
|
|
|
if( path.isEmpty())
|
|
|
|
if( path.isEmpty())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
|
|
|
kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mLockProcess << path;
|
|
|
|
mLockProcess << path;
|
|
|
|
mLockProcess << TQString( "--internal" ) << TQString( "%1" ).arg(getpid());
|
|
|
|
mLockProcess << TQString( "--internal" ) << TQString( "%1" ).arg(getpid());
|
|
|
|
if (mLockProcess.start() == false )
|
|
|
|
if (mLockProcess.start() == false )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
|
|
|
kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
dBusConnect();
|
|
|
|
dBusConnect();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -147,18 +147,18 @@ SaverEngine::SaverEngine()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
SaverEngine::~SaverEngine()
|
|
|
|
SaverEngine::~SaverEngine()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mState == Waiting) {
|
|
|
|
if (mState == Waiting) {
|
|
|
|
kill(mLockProcess.pid(), SIGKILL);
|
|
|
|
kill(mLockProcess.pid(), SIGKILL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
mLockProcess.detach(); // don't kill it if we crash
|
|
|
|
mLockProcess.detach(); // don't kill it if we crash
|
|
|
|
delete mXAutoLock;
|
|
|
|
delete mXAutoLock;
|
|
|
|
|
|
|
|
|
|
|
|
dBusClose();
|
|
|
|
dBusClose();
|
|
|
|
|
|
|
|
|
|
|
|
// Restore X screensaver parameters
|
|
|
|
// Restore X screensaver parameters
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mXTimeout, mXInterval, mXBlanking,
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mXTimeout, mXInterval, mXBlanking,
|
|
|
|
mXExposures);
|
|
|
|
mXExposures);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -167,7 +167,7 @@ SaverEngine::~SaverEngine()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
void SaverEngine::lock()
|
|
|
|
void SaverEngine::lock()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
lockScreen(true);
|
|
|
|
lockScreen(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -176,126 +176,126 @@ void SaverEngine::lock()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
void SaverEngine::lockScreen(bool DCOP)
|
|
|
|
void SaverEngine::lockScreen(bool DCOP)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool ok = true;
|
|
|
|
bool ok = true;
|
|
|
|
if (mState != Saving)
|
|
|
|
if (mState != Saving)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ok = startLockProcess( ForceLock );
|
|
|
|
ok = startLockProcess( ForceLock );
|
|
|
|
// It takes a while for kdesktop_lock to start and lock the screen.
|
|
|
|
// It takes a while for kdesktop_lock to start and lock the screen.
|
|
|
|
// Therefore delay the DCOP call until it tells kdesktop that the locking is in effect.
|
|
|
|
// Therefore delay the DCOP call until it tells kdesktop that the locking is in effect.
|
|
|
|
// This is done only for --forcelock .
|
|
|
|
// This is done only for --forcelock .
|
|
|
|
if( ok && mState != Saving )
|
|
|
|
if( ok && mState != Saving )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (DCOP) {
|
|
|
|
if (DCOP) {
|
|
|
|
DCOPClientTransaction* trans = kapp->dcopClient()->beginTransaction();
|
|
|
|
DCOPClientTransaction* trans = kapp->dcopClient()->beginTransaction();
|
|
|
|
if (trans) {
|
|
|
|
if (trans) {
|
|
|
|
mLockTransactions.append( trans );
|
|
|
|
mLockTransactions.append( trans );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mLockProcess.kill( SIGHUP );
|
|
|
|
mLockProcess.kill( SIGHUP );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::processLockTransactions()
|
|
|
|
void SaverEngine::processLockTransactions()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for( TQValueVector< DCOPClientTransaction* >::ConstIterator it = mLockTransactions.begin();
|
|
|
|
for( TQValueVector< DCOPClientTransaction* >::ConstIterator it = mLockTransactions.begin();
|
|
|
|
it != mLockTransactions.end();
|
|
|
|
it != mLockTransactions.end();
|
|
|
|
++it )
|
|
|
|
++it )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TQCString replyType = "void";
|
|
|
|
TQCString replyType = "void";
|
|
|
|
TQByteArray arr;
|
|
|
|
TQByteArray arr;
|
|
|
|
kapp->dcopClient()->endTransaction( *it, replyType, arr );
|
|
|
|
kapp->dcopClient()->endTransaction( *it, replyType, arr );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mLockTransactions.clear();
|
|
|
|
mLockTransactions.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::saverLockReady()
|
|
|
|
void SaverEngine::saverLockReady()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if( mState != Engaging )
|
|
|
|
if( mState != Engaging )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
kdDebug( 1204 ) << "Got unexpected saverReady()" << endl;
|
|
|
|
kdDebug( 1204 ) << "Got unexpected saverReady()" << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
kdDebug( 1204 ) << "Saver Lock Ready" << endl;
|
|
|
|
kdDebug( 1204 ) << "Saver Lock Ready" << endl;
|
|
|
|
processLockTransactions();
|
|
|
|
processLockTransactions();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void SaverEngine::save()
|
|
|
|
void SaverEngine::save()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mState == Waiting)
|
|
|
|
if (mState == Waiting)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
startLockProcess( DefaultLock );
|
|
|
|
startLockProcess( DefaultLock );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void SaverEngine::quit()
|
|
|
|
void SaverEngine::quit()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mState == Saving || mState == Engaging)
|
|
|
|
if (mState == Saving || mState == Engaging)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
stopLockProcess();
|
|
|
|
stopLockProcess();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
bool SaverEngine::isEnabled()
|
|
|
|
bool SaverEngine::isEnabled()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return mEnabled;
|
|
|
|
return mEnabled;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
bool SaverEngine::enable( bool e )
|
|
|
|
bool SaverEngine::enable( bool e )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if ( e == mEnabled )
|
|
|
|
if ( e == mEnabled )
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
// If we aren't in a suitable state, we will not reconfigure.
|
|
|
|
// If we aren't in a suitable state, we will not reconfigure.
|
|
|
|
if (mState != Waiting)
|
|
|
|
if (mState != Waiting)
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
mEnabled = e;
|
|
|
|
mEnabled = e;
|
|
|
|
|
|
|
|
|
|
|
|
if (mEnabled)
|
|
|
|
if (mEnabled)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if ( !mXAutoLock ) {
|
|
|
|
if ( !mXAutoLock ) {
|
|
|
|
mXAutoLock = new XAutoLock();
|
|
|
|
mXAutoLock = new XAutoLock();
|
|
|
|
connect(mXAutoLock, TQT_SIGNAL(timeout()), TQT_SLOT(idleTimeout()));
|
|
|
|
connect(mXAutoLock, TQT_SIGNAL(timeout()), TQT_SLOT(idleTimeout()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mXAutoLock->setTimeout(mTimeout);
|
|
|
|
|
|
|
|
mXAutoLock->setDPMS(true);
|
|
|
|
|
|
|
|
//mXAutoLock->changeCornerLockStatus( mLockCornerTopLeft, mLockCornerTopRight, mLockCornerBottomLeft, mLockCornerBottomRight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We'll handle blanking
|
|
|
|
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
|
|
|
|
kdDebug() << "XSetScreenSaver " << mTimeout + 10 << endl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mXAutoLock->start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kdDebug(1204) << "Saver Engine started, timeout: " << mTimeout << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mXAutoLock->setTimeout(mTimeout);
|
|
|
|
else
|
|
|
|
mXAutoLock->setDPMS(true);
|
|
|
|
|
|
|
|
//mXAutoLock->changeCornerLockStatus( mLockCornerTopLeft, mLockCornerTopRight, mLockCornerBottomLeft, mLockCornerBottomRight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We'll handle blanking
|
|
|
|
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
|
|
|
|
kdDebug() << "XSetScreenSaver " << mTimeout + 10 << endl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mXAutoLock->start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kdDebug(1204) << "Saver Engine started, timeout: " << mTimeout << endl;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (mXAutoLock)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
delete mXAutoLock;
|
|
|
|
if (mXAutoLock)
|
|
|
|
mXAutoLock = 0;
|
|
|
|
{
|
|
|
|
|
|
|
|
delete mXAutoLock;
|
|
|
|
|
|
|
|
mXAutoLock = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, DontAllowExposures);
|
|
|
|
|
|
|
|
kdDebug(1204) << "Saver Engine disabled" << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
return true;
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, DontAllowExposures);
|
|
|
|
|
|
|
|
kdDebug(1204) << "Saver Engine disabled" << endl;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
bool SaverEngine::isBlanked()
|
|
|
|
bool SaverEngine::isBlanked()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return (mState != Waiting);
|
|
|
|
return (mState != Waiting);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::enableExports()
|
|
|
|
void SaverEngine::enableExports()
|
|
|
@ -312,8 +312,9 @@ void SaverEngine::enableExports()
|
|
|
|
|
|
|
|
|
|
|
|
TQCString appname( "kdesktop" );
|
|
|
|
TQCString appname( "kdesktop" );
|
|
|
|
int screen_number = DefaultScreen(tqt_xdisplay());
|
|
|
|
int screen_number = DefaultScreen(tqt_xdisplay());
|
|
|
|
if ( screen_number )
|
|
|
|
if ( screen_number ) {
|
|
|
|
appname.sprintf("kdesktop-screen-%d", screen_number );
|
|
|
|
appname.sprintf("kdesktop-screen-%d", screen_number );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
client->send( appname, "KBackgroundIface", "setExport(int)", data );
|
|
|
|
client->send( appname, "KBackgroundIface", "setExport(int)", data );
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -322,36 +323,36 @@ void SaverEngine::enableExports()
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
void SaverEngine::handleSecureDialog()
|
|
|
|
void SaverEngine::handleSecureDialog()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Wait for SAK press
|
|
|
|
// Wait for SAK press
|
|
|
|
if (!mSAKProcess->isRunning()) mSAKProcess->start();
|
|
|
|
if (!mSAKProcess->isRunning()) mSAKProcess->start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::slotSAKProcessExited()
|
|
|
|
void SaverEngine::slotSAKProcessExited()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int retcode = mSAKProcess->exitStatus();
|
|
|
|
int retcode = mSAKProcess->exitStatus();
|
|
|
|
if ((retcode != 0) && (mSAKProcess->normalExit())) {
|
|
|
|
if ((retcode != 0) && (mSAKProcess->normalExit())) {
|
|
|
|
trinity_lockeng_sak_available = FALSE;
|
|
|
|
trinity_lockeng_sak_available = FALSE;
|
|
|
|
printf("[kdesktop] SAK driven secure dialog is not available for use (retcode %d). Check tdmtsak for proper functionality.\n", retcode); fflush(stdout);
|
|
|
|
printf("[kdesktop] SAK driven secure dialog is not available for use (retcode %d). Check tdmtsak for proper functionality.\n", retcode); fflush(stdout);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (mState == Preparing) {
|
|
|
|
if (mState == Preparing) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ((mSAKProcess->normalExit()) && (trinity_lockeng_sak_available == TRUE)) {
|
|
|
|
if ((mSAKProcess->normalExit()) && (trinity_lockeng_sak_available == TRUE)) {
|
|
|
|
bool ok = true;
|
|
|
|
bool ok = true;
|
|
|
|
if (mState == Waiting)
|
|
|
|
if (mState == Waiting)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ok = startLockProcess( SecureDialog );
|
|
|
|
ok = startLockProcess( SecureDialog );
|
|
|
|
if( ok && mState != Saving )
|
|
|
|
if( ok && mState != Saving )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mLockProcess.kill( SIGHUP );
|
|
|
|
mLockProcess.kill( SIGHUP );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -360,29 +361,30 @@ void SaverEngine::slotSAKProcessExited()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
void SaverEngine::configure()
|
|
|
|
void SaverEngine::configure()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// If we aren't in a suitable state, we will not reconfigure.
|
|
|
|
// If we aren't in a suitable state, we will not reconfigure.
|
|
|
|
if (mState != Waiting)
|
|
|
|
if (mState != Waiting) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// create a new config obj to ensure we read the latest options
|
|
|
|
// create a new config obj to ensure we read the latest options
|
|
|
|
KDesktopSettings::self()->readConfig();
|
|
|
|
KDesktopSettings::self()->readConfig();
|
|
|
|
|
|
|
|
|
|
|
|
bool e = KDesktopSettings::screenSaverEnabled();
|
|
|
|
bool e = KDesktopSettings::screenSaverEnabled();
|
|
|
|
mTimeout = KDesktopSettings::timeout();
|
|
|
|
mTimeout = KDesktopSettings::timeout();
|
|
|
|
|
|
|
|
|
|
|
|
mEnabled = !e; // force the enable()
|
|
|
|
mEnabled = !e; // force the enable()
|
|
|
|
|
|
|
|
|
|
|
|
int action;
|
|
|
|
int action;
|
|
|
|
action = KDesktopSettings::actionTopLeft();
|
|
|
|
action = KDesktopSettings::actionTopLeft();
|
|
|
|
xautolock_corners[0] = applyManualSettings(action);
|
|
|
|
xautolock_corners[0] = applyManualSettings(action);
|
|
|
|
action = KDesktopSettings::actionTopRight();
|
|
|
|
action = KDesktopSettings::actionTopRight();
|
|
|
|
xautolock_corners[1] = applyManualSettings(action);
|
|
|
|
xautolock_corners[1] = applyManualSettings(action);
|
|
|
|
action = KDesktopSettings::actionBottomLeft();
|
|
|
|
action = KDesktopSettings::actionBottomLeft();
|
|
|
|
xautolock_corners[2] = applyManualSettings(action);
|
|
|
|
xautolock_corners[2] = applyManualSettings(action);
|
|
|
|
action = KDesktopSettings::actionBottomRight();
|
|
|
|
action = KDesktopSettings::actionBottomRight();
|
|
|
|
xautolock_corners[3] = applyManualSettings(action);
|
|
|
|
xautolock_corners[3] = applyManualSettings(action);
|
|
|
|
|
|
|
|
|
|
|
|
enable( e );
|
|
|
|
enable( e );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -398,33 +400,31 @@ void SaverEngine::setBlankOnly( bool blankOnly )
|
|
|
|
|
|
|
|
|
|
|
|
bool SaverEngine::restartDesktopLockProcess()
|
|
|
|
bool SaverEngine::restartDesktopLockProcess()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!mLockProcess.isRunning()) {
|
|
|
|
if (!mLockProcess.isRunning()) {
|
|
|
|
mSaverProcessReady = false;
|
|
|
|
mSaverProcessReady = false;
|
|
|
|
mLockProcess.clearArguments();
|
|
|
|
mLockProcess.clearArguments();
|
|
|
|
TQString path = TDEStandardDirs::findExe( "kdesktop_lock" );
|
|
|
|
TQString path = TDEStandardDirs::findExe( "kdesktop_lock" );
|
|
|
|
if( path.isEmpty())
|
|
|
|
if (path.isEmpty()) {
|
|
|
|
{
|
|
|
|
kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
|
|
|
kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
mLockProcess << path;
|
|
|
|
|
|
|
|
mLockProcess << TQString( "--internal" ) << TQString( "%1" ).arg(getpid());
|
|
|
|
|
|
|
|
if (mLockProcess.start() == false) {
|
|
|
|
|
|
|
|
kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Wait for the saver process to signal ready...
|
|
|
|
|
|
|
|
int count = 0;
|
|
|
|
|
|
|
|
while (!mSaverProcessReady) {
|
|
|
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
usleep(100);
|
|
|
|
|
|
|
|
if (count > 100) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mLockProcess << path;
|
|
|
|
return true;
|
|
|
|
mLockProcess << TQString( "--internal" ) << TQString( "%1" ).arg(getpid());
|
|
|
|
|
|
|
|
if (mLockProcess.start() == false )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Wait for the saver process to signal ready...
|
|
|
|
|
|
|
|
int count = 0;
|
|
|
|
|
|
|
|
while (!mSaverProcessReady) {
|
|
|
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
usleep(100);
|
|
|
|
|
|
|
|
if (count > 100) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -433,56 +433,55 @@ bool SaverEngine::restartDesktopLockProcess()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
bool SaverEngine::startLockProcess( LockType lock_type )
|
|
|
|
bool SaverEngine::startLockProcess( LockType lock_type )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
|
|
|
if (mState == Saving) {
|
|
|
|
if (mState == Saving) {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
mState = Preparing;
|
|
|
|
mState = Preparing;
|
|
|
|
mSAKProcess->kill(SIGTERM);
|
|
|
|
mSAKProcess->kill(SIGTERM);
|
|
|
|
|
|
|
|
|
|
|
|
enableExports();
|
|
|
|
enableExports();
|
|
|
|
|
|
|
|
|
|
|
|
kdDebug(1204) << "SaverEngine: starting saver" << endl;
|
|
|
|
kdDebug(1204) << "SaverEngine: starting saver" << endl;
|
|
|
|
emitDCOPSignal("KDE_start_screensaver()", TQByteArray());
|
|
|
|
emitDCOPSignal("KDE_start_screensaver()", TQByteArray());
|
|
|
|
|
|
|
|
|
|
|
|
if (!restartDesktopLockProcess()) {
|
|
|
|
if (!restartDesktopLockProcess()) {
|
|
|
|
mState = Waiting;
|
|
|
|
mState = Waiting;
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch( lock_type )
|
|
|
|
switch( lock_type )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case ForceLock:
|
|
|
|
case ForceLock:
|
|
|
|
mLockProcess.kill(SIGUSR1); // Request forcelock
|
|
|
|
mLockProcess.kill(SIGUSR1); // Request forcelock
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case DontLock:
|
|
|
|
case DontLock:
|
|
|
|
mLockProcess.kill(SIGUSR2); // Request dontlock
|
|
|
|
mLockProcess.kill(SIGUSR2); // Request dontlock
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case SecureDialog:
|
|
|
|
case SecureDialog:
|
|
|
|
mLockProcess.kill(SIGWINCH); // Request secure dialog
|
|
|
|
mLockProcess.kill(SIGWINCH); // Request secure dialog
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (mBlankOnly) {
|
|
|
|
if (mBlankOnly) {
|
|
|
|
mLockProcess.kill(SIGTTIN); // Request blanking
|
|
|
|
mLockProcess.kill(SIGTTIN); // Request blanking
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ret = mLockProcess.kill(SIGTTOU); // Start lock
|
|
|
|
ret = mLockProcess.kill(SIGTTOU); // Start lock
|
|
|
|
if (!ret) {
|
|
|
|
if (!ret) {
|
|
|
|
mState = Waiting;
|
|
|
|
mState = Waiting;
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
|
|
|
|
|
|
|
|
mState = Engaging;
|
|
|
|
mState = Engaging;
|
|
|
|
if (mXAutoLock)
|
|
|
|
if (mXAutoLock) {
|
|
|
|
{
|
|
|
|
mXAutoLock->stop();
|
|
|
|
mXAutoLock->stop();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -491,129 +490,125 @@ bool SaverEngine::startLockProcess( LockType lock_type )
|
|
|
|
//
|
|
|
|
//
|
|
|
|
void SaverEngine::stopLockProcess()
|
|
|
|
void SaverEngine::stopLockProcess()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mState == Waiting)
|
|
|
|
if (mState == Waiting) {
|
|
|
|
{
|
|
|
|
kdWarning(1204) << "SaverEngine::stopSaver() saver not active" << endl;
|
|
|
|
kdWarning(1204) << "SaverEngine::stopSaver() saver not active" << endl;
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
kdDebug(1204) << "SaverEngine: stopping lock" << endl;
|
|
|
|
kdDebug(1204) << "SaverEngine: stopping lock" << endl;
|
|
|
|
emitDCOPSignal("KDE_stop_screensaver()", TQByteArray());
|
|
|
|
emitDCOPSignal("KDE_stop_screensaver()", TQByteArray());
|
|
|
|
|
|
|
|
|
|
|
|
mTerminationRequested = true;
|
|
|
|
mTerminationRequested=true;
|
|
|
|
mLockProcess.kill();
|
|
|
|
mLockProcess.kill();
|
|
|
|
|
|
|
|
|
|
|
|
if (mEnabled) {
|
|
|
|
if (mEnabled)
|
|
|
|
if (mXAutoLock) {
|
|
|
|
{
|
|
|
|
mXAutoLock->start();
|
|
|
|
if (mXAutoLock)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
mXAutoLock->start();
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
processLockTransactions();
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
mState = Waiting;
|
|
|
|
}
|
|
|
|
|
|
|
|
processLockTransactions();
|
|
|
|
if( systemdSession && systemdSession->canSend() ) {
|
|
|
|
mState = Waiting;
|
|
|
|
TQValueList<TQT_DBusData> params;
|
|
|
|
|
|
|
|
params << TQT_DBusData::fromBool(false);
|
|
|
|
if( systemdSession && systemdSession->canSend() ) {
|
|
|
|
TQT_DBusMessage reply = systemdSession->sendWithReply("SetIdleHint", params);
|
|
|
|
TQValueList<TQT_DBusData> params;
|
|
|
|
}
|
|
|
|
params << TQT_DBusData::fromBool(false);
|
|
|
|
|
|
|
|
TQT_DBusMessage reply = systemdSession->sendWithReply("SetIdleHint", params);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::recoverFromHackingAttempt()
|
|
|
|
void SaverEngine::recoverFromHackingAttempt()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Try to relaunch saver with forcelock
|
|
|
|
// Try to relaunch saver with forcelock
|
|
|
|
if (!startLockProcess( ForceLock )) {
|
|
|
|
if (!startLockProcess(ForceLock)) {
|
|
|
|
// Terminate the TDE session ASAP!
|
|
|
|
// Terminate the TDE session ASAP!
|
|
|
|
// Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
|
|
|
|
// Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
|
|
|
|
TQByteArray data;
|
|
|
|
TQByteArray data;
|
|
|
|
TQDataStream arg(data, IO_WriteOnly);
|
|
|
|
TQDataStream arg(data, IO_WriteOnly);
|
|
|
|
arg << (int)0 << (int)0 << (int)2;
|
|
|
|
arg << (int)0 << (int)0 << (int)2;
|
|
|
|
if ( ! kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
|
|
|
|
if (!kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data)) {
|
|
|
|
// Someone got to DCOP before we did
|
|
|
|
// Someone got to DCOP before we did
|
|
|
|
// Try an emergency system logout
|
|
|
|
// Try an emergency system logout
|
|
|
|
system("logout");
|
|
|
|
system("logout");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::lockProcessExited()
|
|
|
|
void SaverEngine::lockProcessExited()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool abnormalExit = false;
|
|
|
|
bool abnormalExit = false;
|
|
|
|
if (mLockProcess.normalExit() == false) {
|
|
|
|
if (mLockProcess.normalExit() == false) {
|
|
|
|
abnormalExit = true;
|
|
|
|
abnormalExit = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
if (mLockProcess.exitStatus() != 0) {
|
|
|
|
if (mLockProcess.exitStatus() != 0) {
|
|
|
|
abnormalExit = true;
|
|
|
|
abnormalExit = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (mTerminationRequested == true) {
|
|
|
|
if (mTerminationRequested == true) {
|
|
|
|
abnormalExit = false;
|
|
|
|
abnormalExit = false;
|
|
|
|
mTerminationRequested = false;
|
|
|
|
mTerminationRequested = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (abnormalExit == true) {
|
|
|
|
if (abnormalExit == true) {
|
|
|
|
// PROBABLE HACKING ATTEMPT DETECTED
|
|
|
|
// PROBABLE HACKING ATTEMPT DETECTED
|
|
|
|
restartDesktopLockProcess();
|
|
|
|
restartDesktopLockProcess();
|
|
|
|
mState = Waiting;
|
|
|
|
mState = Waiting;
|
|
|
|
TQTimer::singleShot( 100, this, SLOT(recoverFromHackingAttempt()) );
|
|
|
|
TQTimer::singleShot( 100, this, SLOT(recoverFromHackingAttempt()) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
// Restart the lock process
|
|
|
|
// Restart the lock process
|
|
|
|
restartDesktopLockProcess();
|
|
|
|
restartDesktopLockProcess();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::slotLockProcessWaiting()
|
|
|
|
void SaverEngine::slotLockProcessWaiting()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// lockProcessWaiting cannot be called directly from a signal handler, as it will hang in certain obscure circumstances
|
|
|
|
// lockProcessWaiting cannot be called directly from a signal handler, as it will hang in certain obscure circumstances
|
|
|
|
// Instead we use a single-shot timer to immediately call lockProcessWaiting once control has returned to the Qt main loop
|
|
|
|
// Instead we use a single-shot timer to immediately call lockProcessWaiting once control has returned to the Qt main loop
|
|
|
|
TQTimer::singleShot(0, this, SLOT(lockProcessWaiting()));
|
|
|
|
TQTimer::singleShot(0, this, SLOT(lockProcessWaiting()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::slotLockProcessFullyActivated()
|
|
|
|
void SaverEngine::slotLockProcessFullyActivated()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mState = Saving;
|
|
|
|
mState = Saving;
|
|
|
|
|
|
|
|
|
|
|
|
if( systemdSession && systemdSession->canSend() ) {
|
|
|
|
if( systemdSession && systemdSession->canSend() ) {
|
|
|
|
TQValueList<TQT_DBusData> params;
|
|
|
|
TQValueList<TQT_DBusData> params;
|
|
|
|
params << TQT_DBusData::fromBool(true);
|
|
|
|
params << TQT_DBusData::fromBool(true);
|
|
|
|
TQT_DBusMessage reply = systemdSession->sendWithReply("SetIdleHint", params);
|
|
|
|
TQT_DBusMessage reply = systemdSession->sendWithReply("SetIdleHint", params);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::slotLockProcessReady()
|
|
|
|
void SaverEngine::slotLockProcessReady()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mSaverProcessReady = true;
|
|
|
|
mSaverProcessReady = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SaverEngine::lockProcessWaiting()
|
|
|
|
void SaverEngine::lockProcessWaiting()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
kdDebug(1204) << "SaverEngine: lock exited" << endl;
|
|
|
|
kdDebug(1204) << "SaverEngine: lock exited" << endl;
|
|
|
|
if (trinity_lockeng_sak_available == TRUE) {
|
|
|
|
if (trinity_lockeng_sak_available == TRUE) {
|
|
|
|
handleSecureDialog();
|
|
|
|
handleSecureDialog();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( mState == Waiting )
|
|
|
|
if( mState == Waiting ) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
emitDCOPSignal("KDE_stop_screensaver()", TQByteArray());
|
|
|
|
}
|
|
|
|
if (mEnabled)
|
|
|
|
emitDCOPSignal("KDE_stop_screensaver()", TQByteArray());
|
|
|
|
{
|
|
|
|
if (mEnabled) {
|
|
|
|
if (mXAutoLock)
|
|
|
|
if (mXAutoLock) {
|
|
|
|
{
|
|
|
|
mXAutoLock->start();
|
|
|
|
mXAutoLock->start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), mTimeout + 10, mXInterval, PreferBlanking, mXExposures);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
processLockTransactions();
|
|
|
|
processLockTransactions();
|
|
|
|
mState = Waiting;
|
|
|
|
mState = Waiting;
|
|
|
|
|
|
|
|
|
|
|
|
if( systemdSession && systemdSession->canSend() ) {
|
|
|
|
if( systemdSession && systemdSession->canSend() ) {
|
|
|
|
TQValueList<TQT_DBusData> params;
|
|
|
|
TQValueList<TQT_DBusData> params;
|
|
|
|
params << TQT_DBusData::fromBool(false);
|
|
|
|
params << TQT_DBusData::fromBool(false);
|
|
|
|
TQT_DBusMessage reply = systemdSession->sendWithReply("SetIdleHint", params);
|
|
|
|
TQT_DBusMessage reply = systemdSession->sendWithReply("SetIdleHint", params);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
@ -622,33 +617,27 @@ void SaverEngine::lockProcessWaiting()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
void SaverEngine::idleTimeout()
|
|
|
|
void SaverEngine::idleTimeout()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// disable X screensaver
|
|
|
|
// disable X screensaver
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
XForceScreenSaver(tqt_xdisplay(), ScreenSaverReset );
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, DontAllowExposures);
|
|
|
|
XSetScreenSaver(tqt_xdisplay(), 0, mXInterval, PreferBlanking, DontAllowExposures);
|
|
|
|
startLockProcess( DefaultLock );
|
|
|
|
startLockProcess( DefaultLock );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
xautolock_corner_t SaverEngine::applyManualSettings(int action)
|
|
|
|
xautolock_corner_t SaverEngine::applyManualSettings(int action)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (action == 0)
|
|
|
|
if (action == 0) {
|
|
|
|
{
|
|
|
|
|
|
|
|
kdDebug() << "no lock" << endl;
|
|
|
|
kdDebug() << "no lock" << endl;
|
|
|
|
return ca_nothing;
|
|
|
|
return ca_nothing;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else if (action == 1) {
|
|
|
|
if (action == 1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
kdDebug() << "lock screen" << endl;
|
|
|
|
kdDebug() << "lock screen" << endl;
|
|
|
|
return ca_forceLock;
|
|
|
|
return ca_forceLock;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else if (action == 2) {
|
|
|
|
if (action == 2)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
kdDebug() << "prevent lock" << endl;
|
|
|
|
kdDebug() << "prevent lock" << endl;
|
|
|
|
return ca_dontLock;
|
|
|
|
return ca_dontLock;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else{
|
|
|
|
{
|
|
|
|
|
|
|
|
kdDebug() << "no lock nothing" << endl;
|
|
|
|
kdDebug() << "no lock nothing" << endl;
|
|
|
|
return ca_nothing;
|
|
|
|
return ca_nothing;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -694,9 +683,9 @@ void SaverEngine::dBusClose() {
|
|
|
|
bool SaverEngine::dBusConnect() {
|
|
|
|
bool SaverEngine::dBusConnect() {
|
|
|
|
dBusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus, DBUS_CONN_NAME);
|
|
|
|
dBusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus, DBUS_CONN_NAME);
|
|
|
|
if( !dBusConn.isConnected() ) {
|
|
|
|
if( !dBusConn.isConnected() ) {
|
|
|
|
kdError() << "Failed to open connection to system message bus: " << dBusConn.lastError().message() << endl;
|
|
|
|
kdError() << "Failed to open connection to system message bus: " << dBusConn.lastError().message() << endl;
|
|
|
|
TQTimer::singleShot(4000, this, TQT_SLOT(dBusReconnect()));
|
|
|
|
TQTimer::singleShot(4000, this, TQT_SLOT(dBusReconnect()));
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// watcher for Disconnect signal
|
|
|
|
// watcher for Disconnect signal
|
|
|
|