diff --git a/kdesktop/kdesktop.kcfg b/kdesktop/kdesktop.kcfg
index cd1c8e491..bf74c5f3b 100644
--- a/kdesktop/kdesktop.kcfg
+++ b/kdesktop/kdesktop.kcfg
@@ -318,6 +318,13 @@
+
+ true
+
+ Set to true to enable display of the date and time of desktop lock as an additional intrusion detection measure
+
+
+
true
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc
index a13a80297..1cec74e2c 100644
--- a/kdesktop/lock/lockdlg.cc
+++ b/kdesktop/lock/lockdlg.cc
@@ -78,6 +78,25 @@ PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin)
mPlugin( plugin ),
mCapsLocked(-1),
mUnlockingFailed(false)
+{
+ init(plugin);
+}
+
+//
+// Simple dialog for entering a password.
+// This version includes support for displaying the date and time the lock process was started
+//
+PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin, TQDateTime lockStartDateTime)
+ : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM))),
+ mPlugin( plugin ),
+ mCapsLocked(-1),
+ mUnlockingFailed(false)
+{
+ m_lockStartDT = lockStartDateTime;
+ init(plugin);
+}
+
+void PasswordDlg::init(GreeterPluginHandle *plugin)
{
dialogHideTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000;
@@ -115,6 +134,11 @@ PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin)
i18n("The session was locked by %1
").arg( user.fullName() ), frame );
}
+ TQLabel *lockDTLabel;
+ if ((trinity_desktop_lock_use_system_modal_dialogs) && (!m_lockStartDT.isNull())) {
+ lockDTLabel = new TQLabel(i18n("This session has been locked since %1").arg(m_lockStartDT.toString()), frame);
+ }
+
mStatusLabel = new TQLabel( " ", frame );
mStatusLabel->tqsetAlignment( TQLabel::AlignCenter );
@@ -148,13 +172,25 @@ PasswordDlg::PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin)
if (trinity_desktop_lock_use_system_modal_dialogs) {
KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame );
- frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
- frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop );
- frameLayout->addWidget( greetLabel, 1, 1 );
- frameLayout->addItem( greet->getLayoutItem(), 2, 1 );
- frameLayout->addLayout( layStatus, 3, 1 );
- frameLayout->addMultiCellWidget( sep, 4, 4, 0, 1 );
- frameLayout->addMultiCellLayout( layButtons, 5, 5, 0, 1 );
+ if (!m_lockStartDT.isNull()) {
+ frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
+ frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop );
+ frameLayout->addWidget( greetLabel, 1, 1 );
+ frameLayout->addWidget( lockDTLabel, 2, 1 );
+ frameLayout->addItem( greet->getLayoutItem(), 3, 1 );
+ frameLayout->addLayout( layStatus, 4, 1 );
+ frameLayout->addMultiCellWidget( sep, 5, 5, 0, 1 );
+ frameLayout->addMultiCellLayout( layButtons, 6, 6, 0, 1 );
+ }
+ else {
+ frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
+ frameLayout->addMultiCellWidget( theader, 0, 0, 0, 2, Qt::AlignTop );
+ frameLayout->addWidget( greetLabel, 1, 1 );
+ frameLayout->addItem( greet->getLayoutItem(), 2, 1 );
+ frameLayout->addLayout( layStatus, 3, 1 );
+ frameLayout->addMultiCellWidget( sep, 4, 4, 0, 1 );
+ frameLayout->addMultiCellLayout( layButtons, 5, 5, 0, 1 );
+ }
}
else {
frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
@@ -242,16 +278,19 @@ void PasswordDlg::updateLabel()
{
mStatusLabel->setPaletteForegroundColor(Qt::black);
mStatusLabel->setText(i18n("Unlocking failed"));
+// mStatusLabel->show();
}
else
if (mCapsLocked)
{
mStatusLabel->setPaletteForegroundColor(Qt::red);
mStatusLabel->setText(i18n("Warning: Caps Lock on"));
+// mStatusLabel->show();
}
else
{
mStatusLabel->setText(" ");
+// mStatusLabel->hide();
}
}
diff --git a/kdesktop/lock/lockdlg.h b/kdesktop/lock/lockdlg.h
index f65e93c23..2ede5a4fa 100644
--- a/kdesktop/lock/lockdlg.h
+++ b/kdesktop/lock/lockdlg.h
@@ -13,6 +13,7 @@
#include
#include
+#include
#include "lockprocess.h"
@@ -35,7 +36,9 @@ class PasswordDlg : public TQDialog, public KGreeterPluginHandler
public:
PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin);
+ PasswordDlg(LockProcess *parent, GreeterPluginHandle *plugin, TQDateTime lockStartDateTime);
~PasswordDlg();
+ void init(GreeterPluginHandle *plugin);
virtual void show();
// from KGreetPluginHandler
@@ -91,6 +94,7 @@ private:
TQStringList::iterator currLayout;
int sPid, sFd;
TQListView *lv;
+ TQDateTime m_lockStartDT;
};
#endif
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
index 827ea6b21..f4c22b863 100644
--- a/kdesktop/lock/lockprocess.cc
+++ b/kdesktop/lock/lockprocess.cc
@@ -157,6 +157,7 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
child_saver(child),
mParent(0),
mUseBlankOnly(useBlankOnly),
+ mShowLockDateTime(false),
mSuspended(false),
mVisibility(false),
mRestoreXF86Lock(false),
@@ -184,6 +185,8 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
setupSignals();
setupPipe();
+ mShowLockDateTime = KDesktopSettings::showLockDateTime();
+
kapp->installX11EventFilter(this);
mForceContinualLockDisplayTimer = new TQTimer( this );
@@ -1529,7 +1532,7 @@ bool LockProcess::checkPass()
}
showVkbd();
- PasswordDlg passDlg( this, &greetPlugin);
+ PasswordDlg passDlg( this, &greetPlugin, (mShowLockDateTime)?TQDateTime::currentDateTime():TQDateTime());
int ret = execDialog( &passDlg );
hideVkbd();
diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h
index a986d42c4..63291f857 100644
--- a/kdesktop/lock/lockprocess.h
+++ b/kdesktop/lock/lockprocess.h
@@ -138,6 +138,7 @@ private:
TQValueList child_sockets;
int mParent;
bool mUseBlankOnly;
+ bool mShowLockDateTime;
bool mSuspended;
TQTimer mSuspendTimer;
bool mVisibility;