summaryrefslogtreecommitdiffstats
path: root/kdesktop/lock
diff options
context:
space:
mode:
Diffstat (limited to 'kdesktop/lock')
-rw-r--r--kdesktop/lock/lockdlg.cc9
-rw-r--r--kdesktop/lock/lockprocess.cc106
-rw-r--r--kdesktop/lock/lockprocess.h3
-rw-r--r--kdesktop/lock/main.cc5
4 files changed, 92 insertions, 31 deletions
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc
index 652be2a7f..95d5ab00a 100644
--- a/kdesktop/lock/lockdlg.cc
+++ b/kdesktop/lock/lockdlg.cc
@@ -10,6 +10,7 @@
#include "lockprocess.h"
#include "lockdlg.h"
+#include "kdesktopsettings.h"
#include <kcheckpass.h>
#include <dmctl.h>
@@ -59,12 +60,14 @@
# define AF_LOCAL AF_UNIX
#endif
-// [FIXME] This interval should be taken from the screensaver start delay of kdesktop
-#define PASSDLG_HIDE_TIMEOUT 10000
+#define PASSDLG_HIDE_TIMEOUT dialogHideTimeout
extern bool trinity_desktop_lock_autohide_lockdlg;
+extern bool trinity_desktop_lock_delay_screensaver_start;
extern bool trinity_desktop_lock_use_system_modal_dialogs;
+int dialogHideTimeout = 10*1000;
+
//===========================================================================
//
// Simple dialog for entering a password.
@@ -75,6 +78,8 @@ PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin)
mCapsLocked(-1),
mUnlockingFailed(false)
{
+ dialogHideTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000;
+
if (trinity_desktop_lock_use_system_modal_dialogs) {
// Signal that we do not want any window controls to be shown at all
Atom kde_wm_system_modal_notification;
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
index 02d2cf860..52ea871b2 100644
--- a/kdesktop/lock/lockprocess.cc
+++ b/kdesktop/lock/lockprocess.cc
@@ -177,10 +177,9 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
connect( mForceContinualLockDisplayTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(displayLockDialogIfNeeded()) );
mHackDelayStartupTimer = new TQTimer( this );
- connect( mHackDelayStartupTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(startHack()) );
+ connect( mHackDelayStartupTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(closeDialogAndStartHack()) );
- // [FIXME] This interval should be taken from the screensaver start delay of kdesktop
- mHackDelayStartupTimeout = 10*1000;
+ mHackDelayStartupTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000;
// Get root window size
XWindowAttributes rootAttr;
@@ -971,8 +970,11 @@ bool LockProcess::startSaver()
XSync(qt_xdisplay(), False);
setVRoot( winId(), winId() );
if (!(trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced)) {
- setBackgroundColor(black);
- erase();
+ if (backingPixmap.isNull())
+ setBackgroundColor(black);
+ else
+ setBackgroundPixmap(backingPixmap);
+ erase();
}
if (trinity_desktop_lock_use_system_modal_dialogs) {
// Try to get the root pixmap
@@ -984,7 +986,7 @@ bool LockProcess::startSaver()
TQTimer::singleShot( 0, this, SLOT(slotPaintBackground()) );
}
- if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced) {
+ if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) {
ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
}
@@ -1085,9 +1087,24 @@ bool LockProcess::startLock()
//---------------------------------------------------------------------------
//
+void LockProcess::closeDialogAndStartHack()
+{
+ // Close any active dialogs
+ DISABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ mSuspended = true;
+ if (currentDialog != NULL) {
+ mForceReject = true;
+ currentDialog->close();
+ }
+}
bool LockProcess::startHack()
{
+ if (currentDialog)
+ {
+ return false;
+ }
+
if (mSaverExec.isEmpty())
{
return false;
@@ -1124,9 +1141,12 @@ bool LockProcess::startHack()
if (!mForbidden)
{
- if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced) {
+ if (trinity_desktop_lock_use_system_modal_dialogs) {
// Make sure we have a nice clean display to start with!
- setBackgroundColor(black);
+ if (backingPixmap.isNull())
+ setBackgroundColor(black);
+ else
+ setBackgroundPixmap(backingPixmap);
erase();
mSuspended = false;
}
@@ -1154,10 +1174,17 @@ bool LockProcess::startHack()
{
usleep(100);
TQApplication::syncX();
- if (!trinity_desktop_lock_use_system_modal_dialogs) setBackgroundColor(black);
+ if (!trinity_desktop_lock_use_system_modal_dialogs) {
+ if (backingPixmap.isNull())
+ setBackgroundColor(black);
+ else
+ setBackgroundPixmap(backingPixmap);
+ }
if (backingPixmap.isNull()) erase();
else bitBlt(this, 0, 0, &backingPixmap);
- ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ if (trinity_desktop_lock_use_system_modal_dialogs) {
+ ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ }
}
}
return false;
@@ -1185,12 +1212,19 @@ void LockProcess::hackExited(KProcess *)
// Make sure the saver window is black.
usleep(100);
TQApplication::syncX();
- if (!trinity_desktop_lock_use_system_modal_dialogs) setBackgroundColor(black);
- if (backingPixmap.isNull()) erase();
- else bitBlt(this, 0, 0, &backingPixmap);
- if (!mSuspended) {
- ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
- }
+ if (!trinity_desktop_lock_use_system_modal_dialogs) {
+ if (backingPixmap.isNull())
+ setBackgroundColor(black);
+ else
+ setBackgroundPixmap(backingPixmap);
+ }
+ if (backingPixmap.isNull()) erase();
+ else bitBlt(this, 0, 0, &backingPixmap);
+ if (!mSuspended) {
+ if (trinity_desktop_lock_use_system_modal_dialogs) {
+ ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ }
+ }
}
void LockProcess::displayLockDialogIfNeeded()
@@ -1216,7 +1250,6 @@ void LockProcess::suspend()
if (trinity_desktop_lock_use_system_modal_dialogs) {
mSuspended = true;
stopHack();
- mSuspended = false;
}
else {
TQString hackStatus;
@@ -1257,11 +1290,11 @@ void LockProcess::resume( bool force )
bitBlt( this, 0, 0, &mSavedScreen );
TQApplication::syncX();
mHackProc.kill(SIGCONT);
+ mSuspended = false;
}
else if (mSuspended && trinity_desktop_lock_use_system_modal_dialogs) {
startHack();
}
- mSuspended = false;
}
//---------------------------------------------------------------------------
@@ -1473,20 +1506,39 @@ bool LockProcess::x11Event(XEvent *event)
return true; // filter out
// fall through
case KeyPress:
- if ((mHackDelayStartupTimer) && ((trinity_desktop_lock_autohide_lockdlg == FALSE) && (mHackDelayStartupTimer->isActive())))
+ if ((mHackDelayStartupTimer) && (mHackDelayStartupTimer->isActive())) {
mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
+ }
if (mBusy || !mDialogs.isEmpty())
break;
mBusy = true;
- if (!mLocked || checkPass())
- {
- stopSaver();
- kapp->quit();
+ if (trinity_desktop_lock_delay_screensaver_start) {
+ if (mLocked) {
+ ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
+ }
+ if (!mLocked)
+ {
+ stopSaver();
+ kapp->quit();
+ }
+ if (mAutoLogout) // we need to restart the auto logout countdown
+ {
+ killTimer(mAutoLogoutTimerId);
+ mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout);
+ }
}
- else if (mAutoLogout) // we need to restart the auto logout countdown
- {
- killTimer(mAutoLogoutTimerId);
- mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout);
+ else {
+ if (!mLocked || checkPass())
+ {
+ stopSaver();
+ kapp->quit();
+ }
+ else if (mAutoLogout) // we need to restart the auto logout countdown
+ {
+ killTimer(mAutoLogoutTimerId);
+ mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout);
+ }
}
mBusy = false;
return true;
diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h
index 2c209cc8f..ac9fdc7fa 100644
--- a/kdesktop/lock/lockprocess.h
+++ b/kdesktop/lock/lockprocess.h
@@ -84,7 +84,7 @@ private slots:
void windowAdded( WId );
void resumeUnforced();
void displayLockDialogIfNeeded();
- bool startHack();
+ void closeDialogAndStartHack();
private:
void configure();
@@ -101,6 +101,7 @@ private:
void cantLock(const TQString &reason);
bool startSaver();
void stopSaver();
+ bool startHack();
void stopHack();
void setupSignals();
void setupPipe();
diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
index 14dd75384..90883f61e 100644
--- a/kdesktop/lock/main.cc
+++ b/kdesktop/lock/main.cc
@@ -34,7 +34,7 @@
#include <X11/Xlib.h>
#include <fixx11h.h>
-// [FIXME] These two settings should be user configurable!
+// [FIXME] Add GUI configuration checkboxes for these two settings (see kdesktoprc [ScreenSaver] UseUnmanagedLockWindows and DelaySaverStart)
bool trinity_desktop_lock_use_system_modal_dialogs = FALSE;
bool trinity_desktop_lock_delay_screensaver_start = FALSE;
@@ -151,6 +151,9 @@ int main( int argc, char **argv )
// we need to read from the right rc file - possibly taking screen number in account
KDesktopSettings::instance("kdesktoprc");
+ trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows();
+ trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart();
+
LockProcess process(child, args->isSet( "blank" ));
if (!child)
process.setChildren(child_sockets);