parent
15ce26197e
commit
a1ed0f8df1
@ -0,0 +1,252 @@
|
||||
commit 8d521d0b6ba88c6e679e7453f02897c8db7bbdf5
|
||||
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
Date: 1328671935 -0600
|
||||
|
||||
Update lock process to engage the lock in near real time
|
||||
|
||||
diff --git a/kdesktop/lock/CMakeLists.txt b/kdesktop/lock/CMakeLists.txt
|
||||
index 5530d4c..7a35121 100644
|
||||
--- a/kdesktop/lock/CMakeLists.txt
|
||||
+++ b/kdesktop/lock/CMakeLists.txt
|
||||
@@ -35,6 +35,6 @@ set( ${target}_SRCS
|
||||
|
||||
tde_add_executable( ${target} AUTOMOC
|
||||
SOURCES ${${target}_SRCS}
|
||||
- LINK kdesktopsettings-static dmctl-static kio-shared Xext ${GL_LIBRARY}
|
||||
+ LINK kdesktopsettings-static dmctl-static kio-shared Xext ${GL_LIBRARY} "-z\ now"
|
||||
DESTINATION ${BIN_INSTALL_DIR}
|
||||
)
|
||||
diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
|
||||
index 0cbef60..132ff30 100644
|
||||
--- a/kdesktop/lock/main.cc
|
||||
+++ b/kdesktop/lock/main.cc
|
||||
@@ -1,6 +1,7 @@
|
||||
/* This file is part of the KDE project
|
||||
Copyright (C) 1999 David Faure
|
||||
Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org>
|
||||
+ Copyright (c) 2010-2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
@@ -43,6 +44,13 @@ bool trinity_desktop_lock_use_sak = FALSE;
|
||||
|
||||
bool trinity_desktop_lock_forced = FALSE;
|
||||
|
||||
+bool signalled_forcelock;
|
||||
+bool signalled_dontlock;
|
||||
+bool signalled_securedialog;
|
||||
+bool signalled_blank;
|
||||
+bool signalled_run;
|
||||
+bool in_internal_mode = FALSE;
|
||||
+
|
||||
bool MyApp::x11EventFilter( XEvent *ev )
|
||||
{
|
||||
if (ev->type == XKeyPress || ev->type == ButtonPress) {
|
||||
diff --git a/kdesktop/lockeng.cc b/kdesktop/lockeng.cc
|
||||
index 5307c5c..79d27db 100644
|
||||
--- a/kdesktop/lockeng.cc
|
||||
+++ b/kdesktop/lockeng.cc
|
||||
@@ -1,8 +1,9 @@
|
||||
//===========================================================================
|
||||
//
|
||||
-// This file is part of the KDE project
|
||||
+// This file is part of the TDE project
|
||||
//
|
||||
// Copyright (c) 1999 Martin R. Jones <mjones@kde.org>
|
||||
+// Copyright (c) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
//
|
||||
|
||||
|
||||
@@ -29,6 +30,14 @@ extern xautolock_corner_t xautolock_corners[ 4 ];
|
||||
|
||||
bool trinity_lockeng_sak_available = TRUE;
|
||||
|
||||
+SaverEngine* m_masterSaverEngine = NULL;
|
||||
+static void sigusr1_handler(int)
|
||||
+{
|
||||
+ if (m_masterSaverEngine) {
|
||||
+ m_masterSaverEngine->lockProcessWaiting();
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
//===========================================================================
|
||||
//
|
||||
// Screen saver engine. Doesn't handle the actual screensaver window,
|
||||
@@ -42,6 +51,16 @@ SaverEngine::SaverEngine()
|
||||
mSAKProcess(NULL),
|
||||
mTerminationRequested(false)
|
||||
{
|
||||
+ struct sigaction act;
|
||||
+
|
||||
+ // handle SIGUSR1
|
||||
+ m_masterSaverEngine = this;
|
||||
+ act.sa_handler= sigusr1_handler;
|
||||
+ sigemptyset(&(act.sa_mask));
|
||||
+ sigaddset(&(act.sa_mask), SIGUSR1);
|
||||
+ act.sa_flags = 0;
|
||||
+ sigaction(SIGUSR1, &act, 0L);
|
||||
+
|
||||
// Save X screensaver parameters
|
||||
XGetScreenSaver(qt_xdisplay(), &mXTimeout, &mXInterval,
|
||||
&mXBlanking, &mXExposures);
|
||||
@@ -60,6 +79,19 @@ SaverEngine::SaverEngine()
|
||||
TQTimer::singleShot( 0, this, TQT_SLOT(handleSecureDialog()) );
|
||||
|
||||
configure();
|
||||
+
|
||||
+ mLockProcess.clearArguments();
|
||||
+ TQString path = KStandardDirs::findExe( "kdesktop_lock" );
|
||||
+ if( path.isEmpty())
|
||||
+ {
|
||||
+ kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
||||
+ }
|
||||
+ mLockProcess << path;
|
||||
+ mLockProcess << TQString( "--internal" ) << TQString( "%1" ).arg(getpid());
|
||||
+ if (mLockProcess.start() == false )
|
||||
+ {
|
||||
+ kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
||||
+ }
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -68,6 +100,10 @@ SaverEngine::SaverEngine()
|
||||
//
|
||||
SaverEngine::~SaverEngine()
|
||||
{
|
||||
+ if (mState == Waiting) {
|
||||
+ kill(mLockProcess.pid(), SIGKILL);
|
||||
+ }
|
||||
+
|
||||
mLockProcess.detach(); // don't kill it if we crash
|
||||
delete mXAutoLock;
|
||||
|
||||
@@ -86,9 +122,9 @@ void SaverEngine::lock()
|
||||
{
|
||||
mSAKProcess->kill(SIGTERM);
|
||||
ok = startLockProcess( ForceLock );
|
||||
-// 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.
|
||||
-// This is done only for --forcelock .
|
||||
+ // 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.
|
||||
+ // This is done only for --forcelock .
|
||||
if( ok && mState != Saving )
|
||||
{
|
||||
DCOPClientTransaction* trans = kapp->dcopClient()->beginTransaction();
|
||||
@@ -283,40 +319,42 @@ bool SaverEngine::startLockProcess( LockType lock_type )
|
||||
kdDebug(1204) << "SaverEngine: starting saver" << endl;
|
||||
emitDCOPSignal("KDE_start_screensaver()", TQByteArray());
|
||||
|
||||
- if (mLockProcess.isRunning())
|
||||
- {
|
||||
- stopLockProcess();
|
||||
- }
|
||||
- mLockProcess.clearArguments();
|
||||
- TQString path = KStandardDirs::findExe( "kdesktop_lock" );
|
||||
- if( path.isEmpty())
|
||||
- {
|
||||
- kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
||||
- return false;
|
||||
+ if (!mLockProcess.isRunning()) {
|
||||
+ mLockProcess.clearArguments();
|
||||
+ TQString path = KStandardDirs::findExe( "kdesktop_lock" );
|
||||
+ if( path.isEmpty())
|
||||
+ {
|
||||
+ kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
||||
+ 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;
|
||||
+ }
|
||||
}
|
||||
- mLockProcess << path;
|
||||
+
|
||||
switch( lock_type )
|
||||
{
|
||||
case ForceLock:
|
||||
- mLockProcess << TQString( "--forcelock" );
|
||||
+ mLockProcess.kill(SIGUSR1); // Request forcelock
|
||||
break;
|
||||
case DontLock:
|
||||
- mLockProcess << TQString( "--dontlock" );
|
||||
+ mLockProcess.kill(SIGUSR2); // Request dontlock
|
||||
break;
|
||||
case SecureDialog:
|
||||
- mLockProcess << TQString( "--securedialog" );
|
||||
+ mLockProcess.kill(SIGWINCH); // Request secure dialog
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
- if (mBlankOnly)
|
||||
- mLockProcess << TQString( "--blank" );
|
||||
-
|
||||
- if (mLockProcess.start() == false )
|
||||
- {
|
||||
- kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
||||
- return false;
|
||||
+ if (mBlankOnly) {
|
||||
+ mLockProcess.kill(SIGTTIN); // Request blanking
|
||||
}
|
||||
+
|
||||
+ mLockProcess.kill(SIGTTOU); // Start lock
|
||||
XSetScreenSaver(qt_xdisplay(), 0, mXInterval, PreferBlanking, mXExposures);
|
||||
|
||||
mState = Preparing;
|
||||
@@ -359,9 +397,7 @@ void SaverEngine::stopLockProcess()
|
||||
|
||||
void SaverEngine::lockProcessExited()
|
||||
{
|
||||
-printf("Lock process exited\n\r"); fflush(stdout);
|
||||
bool abnormalExit = false;
|
||||
- kdDebug(1204) << "SaverEngine: lock exited" << endl;
|
||||
if (mLockProcess.normalExit() == false) {
|
||||
abnormalExit = true;
|
||||
}
|
||||
@@ -387,6 +423,28 @@ printf("Lock process exited\n\r"); fflush(stdout);
|
||||
system("logout");
|
||||
}
|
||||
}
|
||||
+ else {
|
||||
+ // Restart the lock process
|
||||
+ if (!mLockProcess.isRunning()) {
|
||||
+ mLockProcess.clearArguments();
|
||||
+ TQString path = KStandardDirs::findExe( "kdesktop_lock" );
|
||||
+ if( path.isEmpty())
|
||||
+ {
|
||||
+ kdDebug( 1204 ) << "Can't find kdesktop_lock!" << endl;
|
||||
+ }
|
||||
+ mLockProcess << path;
|
||||
+ mLockProcess << TQString( "--internal" ) << TQString( "%1" ).arg(getpid());
|
||||
+ if (mLockProcess.start() == false )
|
||||
+ {
|
||||
+ kdDebug( 1204 ) << "Failed to start kdesktop_lock!" << endl;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void SaverEngine::lockProcessWaiting()
|
||||
+{
|
||||
+ kdDebug(1204) << "SaverEngine: lock exited" << endl;
|
||||
if (trinity_lockeng_sak_available == TRUE) {
|
||||
handleSecureDialog();
|
||||
}
|
||||
diff --git a/kdesktop/lockeng.h b/kdesktop/lockeng.h
|
||||
index ae81f90..ae08e9a 100644
|
||||
--- a/kdesktop/lockeng.h
|
||||
+++ b/kdesktop/lockeng.h
|
||||
@@ -78,6 +78,9 @@ public:
|
||||
*/
|
||||
virtual void saverLockReady();
|
||||
|
||||
+public slots:
|
||||
+ void lockProcessWaiting();
|
||||
+
|
||||
protected slots:
|
||||
void idleTimeout();
|
||||
void lockProcessExited();
|
@ -0,0 +1,23 @@
|
||||
commit 073dc86aceaa060597d7653747c3c6c14d0ed59d
|
||||
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
Date: 1335311121 -0500
|
||||
|
||||
Fix sftp when nonstandard port is specified in ssh config
|
||||
|
||||
diff --git a/kioslave/sftp/kio_sftp.cpp b/kioslave/sftp/kio_sftp.cpp
|
||||
index 2316c8c..04a2b33 100644
|
||||
--- a/kioslave/sftp/kio_sftp.cpp
|
||||
+++ b/kioslave/sftp/kio_sftp.cpp
|
||||
@@ -481,11 +481,7 @@ void sftpProtocol::setHost (const TQString& h, int port, const TQString& user, c
|
||||
if( port > 0 )
|
||||
mPort = port;
|
||||
else {
|
||||
- struct servent *pse;
|
||||
- if( (pse = getservbyname("ssh", "tcp") ) == NULL )
|
||||
- mPort = 22;
|
||||
- else
|
||||
- mPort = ntohs(pse->s_port);
|
||||
+ mPort = -1;
|
||||
}
|
||||
|
||||
mUsername = user;
|
@ -0,0 +1,84 @@
|
||||
commit 67a3a8f34892a6491ba0073a3f583503b44e58e7
|
||||
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
Date: 1335211141 -0500
|
||||
|
||||
Fix desktop lock failure due to race condition within signal handler between qt and xcb
|
||||
|
||||
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
|
||||
index c0050d3..3c67ac0 100644
|
||||
--- a/kdesktop/lock/lockprocess.cc
|
||||
+++ b/kdesktop/lock/lockprocess.cc
|
||||
@@ -659,6 +659,7 @@ void LockProcess::startSecureDialog()
|
||||
mBusy = false;
|
||||
trinity_desktop_lock_in_sec_dlg = false;
|
||||
if (ret == 0) {
|
||||
+ trinity_desktop_lock_closing_windows = 1;
|
||||
kapp->quit();
|
||||
}
|
||||
if (ret == 1) {
|
||||
@@ -687,6 +688,7 @@ void LockProcess::startSecureDialog()
|
||||
mBusy = false;
|
||||
}
|
||||
if (ret == 2) {
|
||||
+ trinity_desktop_lock_closing_windows = 1;
|
||||
if (system("ksysguard &") == -1) {
|
||||
// Error handler to shut up gcc warnings
|
||||
}
|
||||
diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
|
||||
index 5853da1..225d9c5 100644
|
||||
--- a/kdesktop/lock/main.cc
|
||||
+++ b/kdesktop/lock/main.cc
|
||||
@@ -168,7 +168,7 @@ int main( int argc, char **argv )
|
||||
|
||||
bool rt;
|
||||
bool sig = false;
|
||||
- if( !child && args->isSet( "forcelock" ))
|
||||
+ if( (!child) && (args->isSet( "forcelock" )))
|
||||
{
|
||||
rt = process.lock();
|
||||
sig = true;
|
||||
diff --git a/kdesktop/lockeng.cc b/kdesktop/lockeng.cc
|
||||
index 9eb88e1..f24d02f 100644
|
||||
--- a/kdesktop/lockeng.cc
|
||||
+++ b/kdesktop/lockeng.cc
|
||||
@@ -34,7 +34,7 @@ SaverEngine* m_masterSaverEngine = NULL;
|
||||
static void sigusr1_handler(int)
|
||||
{
|
||||
if (m_masterSaverEngine) {
|
||||
- m_masterSaverEngine->lockProcessWaiting();
|
||||
+ m_masterSaverEngine->slotLockProcessWaiting();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -445,6 +445,13 @@ void SaverEngine::lockProcessExited()
|
||||
}
|
||||
}
|
||||
|
||||
+void SaverEngine::slotLockProcessWaiting()
|
||||
+{
|
||||
+ // 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
|
||||
+ TQTimer::singleShot(0, this, SLOT(lockProcessWaiting()));
|
||||
+}
|
||||
+
|
||||
void SaverEngine::lockProcessWaiting()
|
||||
{
|
||||
kdDebug(1204) << "SaverEngine: lock exited" << endl;
|
||||
diff --git a/kdesktop/lockeng.h b/kdesktop/lockeng.h
|
||||
index ae08e9a..e42a048 100644
|
||||
--- a/kdesktop/lockeng.h
|
||||
+++ b/kdesktop/lockeng.h
|
||||
@@ -79,11 +79,12 @@ public:
|
||||
virtual void saverLockReady();
|
||||
|
||||
public slots:
|
||||
- void lockProcessWaiting();
|
||||
+ void slotLockProcessWaiting();
|
||||
|
||||
protected slots:
|
||||
void idleTimeout();
|
||||
void lockProcessExited();
|
||||
+ void lockProcessWaiting();
|
||||
|
||||
private slots:
|
||||
void handleSecureDialog();
|
@ -0,0 +1,22 @@
|
||||
commit 9e172fa7a1e93cc77e09616eb793b823d29ebaec
|
||||
Author: Darrell Anderson <humanreadable@yahoo.com>
|
||||
Date: 1333594438 -0500
|
||||
|
||||
Temporary fix for a probable race condition on some systems.
|
||||
Still needs to be resolved by determining the root cause.
|
||||
Partially resolves bug report 760.
|
||||
|
||||
diff --git a/kioslave/system/kdedmodule/systemdirnotify.cpp b/kioslave/system/kdedmodule/systemdirnotify.cpp
|
||||
index 162d966..99b9ac7 100644
|
||||
--- a/kioslave/system/kdedmodule/systemdirnotify.cpp
|
||||
+++ b/kioslave/system/kdedmodule/systemdirnotify.cpp
|
||||
@@ -36,6 +36,9 @@ SystemDirNotify::SystemDirNotify()
|
||||
void SystemDirNotify::init()
|
||||
{
|
||||
if( mInited )
|
||||
+ // FIXME Work around a race condition by inserting kdDebug delay before following
|
||||
+ // code is executed -- the root cause of the race should be investigated and fixed.
|
||||
+ kdDebug() << "SystemDirNotify::init(" << mInited << ")" << endl;
|
||||
return;
|
||||
mInited = true;
|
||||
KGlobal::dirs()->addResourceType("system_entries",
|
@ -0,0 +1,34 @@
|
||||
--- kdebase/kdm/kfrontend/kgapp.cpp.orig 2012-04-27 22:08:53.729331548 +0200
|
||||
+++ kdebase/kdm/kfrontend/kgapp.cpp 2012-04-27 22:06:29.169359295 +0200
|
||||
@@ -190,6 +190,7 @@
|
||||
KProcess *tsak = 0;
|
||||
KProcess *proc = 0;
|
||||
KProcess *comp = 0;
|
||||
+ KProcess *dcop = 0;
|
||||
KProcess *kwin = 0;
|
||||
|
||||
trinity_desktop_lock_use_sak = _useSAK;
|
||||
@@ -310,6 +311,13 @@
|
||||
}
|
||||
|
||||
if (!_windowManager.isEmpty()) {
|
||||
+ if (_windowManager == "kwin") {
|
||||
+ // Special case
|
||||
+ // Start DCOP...
|
||||
+ dcop = new KProcess;
|
||||
+ *dcop << TQCString( argv0, strrchr( argv0, '/' ) - argv0 + 2 ) + "dcopserver" << TQCString("--suicide");
|
||||
+ dcop->start();
|
||||
+ }
|
||||
kwin = new KProcess;
|
||||
*kwin << TQCString( argv0, strrchr( argv0, '/' ) - argv0 + 2 ) + _windowManager.ascii();
|
||||
kwin->start();
|
||||
@@ -453,7 +461,9 @@
|
||||
if (kwin) {
|
||||
kwin->closeStdin();
|
||||
kwin->detach();
|
||||
+ dcop->detach();
|
||||
delete kwin;
|
||||
+ delete dcop;
|
||||
}
|
||||
delete proc;
|
||||
UnsecureDisplay( dpy );
|
Loading…
Reference in new issue