You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
373 lines
12 KiB
373 lines
12 KiB
commit 057932620ba8355a6506b9d437518e253ba14ed9
|
|
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
|
Date: 1327619240 -0600
|
|
|
|
Clean up lock screen internals
|
|
This cleanup is part of an effort to resolve Bug 810, but a new Qt3 version is required to fully resolve it
|
|
|
|
diff --git a/kdesktop/lock/autologout.cc b/kdesktop/lock/autologout.cc
|
|
index 22b449c..bef39dd 100644
|
|
--- a/kdesktop/lock/autologout.cc
|
|
+++ b/kdesktop/lock/autologout.cc
|
|
@@ -82,6 +82,8 @@ AutoLogout::AutoLogout(LockProcess *parent) : TQDialog(parent, "password dialog"
|
|
mCountdownTimerId = startTimer(1000/25);
|
|
|
|
connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()));
|
|
+
|
|
+ setFixedSize( sizeHint() );
|
|
}
|
|
|
|
AutoLogout::~AutoLogout()
|
|
diff --git a/kdesktop/lock/infodlg.cc b/kdesktop/lock/infodlg.cc
|
|
index f5f35b9..3fbc276 100644
|
|
--- a/kdesktop/lock/infodlg.cc
|
|
+++ b/kdesktop/lock/infodlg.cc
|
|
@@ -99,6 +99,7 @@ InfoDlg::InfoDlg(LockProcess *parent)
|
|
frameLayout->addLayout( layStatus, 1, 1 );
|
|
|
|
installEventFilter(this);
|
|
+ setFixedSize( sizeHint() );
|
|
}
|
|
|
|
InfoDlg::~InfoDlg()
|
|
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc
|
|
index 0863a22..f3eeee0 100644
|
|
--- a/kdesktop/lock/lockdlg.cc
|
|
+++ b/kdesktop/lock/lockdlg.cc
|
|
@@ -215,6 +215,7 @@ void PasswordDlg::init(GreeterPluginHandle *plugin)
|
|
mNewSessButton->hide();
|
|
|
|
installEventFilter(this);
|
|
+ setFixedSize( sizeHint() );
|
|
|
|
mFailedTimerId = 0;
|
|
mTimeoutTimerId = startTimer(PASSDLG_HIDE_TIMEOUT);
|
|
@@ -598,6 +599,7 @@ void PasswordDlg::show()
|
|
{
|
|
TQDialog::show();
|
|
TQApplication::flushX();
|
|
+ setFixedSize( sizeHint() );
|
|
}
|
|
|
|
void PasswordDlg::slotStartNewSession()
|
|
@@ -818,6 +820,8 @@ void PasswordDlg::slotSwitchUser()
|
|
connect( btn, TQT_SIGNAL(clicked()), &dialog, TQT_SLOT(reject()) );
|
|
vbox2->addWidget( btn );
|
|
|
|
+ dialog.setFixedSize( dialog.sizeHint() );
|
|
+
|
|
int ret = static_cast< LockProcess* >(parent())->execDialog( &dialog );
|
|
if (ret != TQDialog::Rejected) {
|
|
TQDialog::reject();
|
|
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
|
|
index 5acc96e..9648bbc 100644
|
|
--- a/kdesktop/lock/lockprocess.cc
|
|
+++ b/kdesktop/lock/lockprocess.cc
|
|
@@ -4,7 +4,7 @@
|
|
//
|
|
// Copyright (c) 1999 Martin R. Jones <mjones@kde.org>
|
|
// Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org>
|
|
-// Copyright (c) 2010-2011 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
|
+// Copyright (c) 2010-2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
|
//
|
|
|
|
//kdesktop keeps running and checks user inactivity
|
|
@@ -111,6 +111,10 @@ Status DPMSInfo ( Display *, CARD16 *, BOOL * );
|
|
#define LOCK_GRACE_DEFAULT 5000
|
|
#define AUTOLOGOUT_DEFAULT 600
|
|
|
|
+// FIXME
|
|
+// This should be defined if Qt 3.4.0 or higher is in use
|
|
+// #define KEEP_MOUSE_UNGRABBED 1
|
|
+
|
|
// These lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special multimedia keys
|
|
#define XF86XK_AudioMute 0x1008FF12
|
|
#define XF86XK_AudioRaiseVolume 0x1008FF13
|
|
@@ -183,6 +187,10 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
|
|
mBackingStartupDelayTimer(0),
|
|
m_startupStatusDialog(NULL)
|
|
{
|
|
+#ifdef KEEP_MOUSE_UNGRABBED
|
|
+ setNFlags(WX11DisableMove|WX11DisableClose|WX11DisableShade|WX11DisableMinimize|WX11DisableMaximize);
|
|
+#endif
|
|
+
|
|
setupSignals();
|
|
setupPipe();
|
|
|
|
@@ -267,7 +275,11 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
|
|
#endif
|
|
|
|
#if (QT_VERSION-0 >= 0x030200) // XRANDR support
|
|
- connect( kapp->desktop(), TQT_SIGNAL( resized( int )), TQT_SLOT( desktopResized()));
|
|
+ connect( kapp->desktop(), TQT_SIGNAL( resized( int )), TQT_SLOT( desktopResized()));
|
|
+#endif
|
|
+
|
|
+#ifdef KEEP_MOUSE_UNGRABBED
|
|
+ setEnabled(false);
|
|
#endif
|
|
|
|
greetPlugin.library = 0;
|
|
@@ -874,7 +886,6 @@ void LockProcess::createSaverWindow()
|
|
// this is a security risk and has been deactivated--welcome to the 21st century folks!
|
|
// setBackgroundMode(TQWidget::NoBackground);
|
|
|
|
- setCursor( tqblankCursor );
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
kdDebug(1204) << "Saver window Id: " << winId() << endl;
|
|
@@ -884,7 +895,6 @@ void LockProcess::desktopResized()
|
|
{
|
|
mBusy = true;
|
|
suspend();
|
|
- setCursor( tqblankCursor );
|
|
|
|
// Get root window size
|
|
XWindowAttributes rootAttr;
|
|
@@ -1087,6 +1097,7 @@ bool LockProcess::grabInput()
|
|
}
|
|
}
|
|
|
|
+#ifndef KEEP_MOUSE_UNGRABBED
|
|
if (!grabMouse())
|
|
{
|
|
usleep(100000);
|
|
@@ -1096,6 +1107,7 @@ bool LockProcess::grabInput()
|
|
return false;
|
|
}
|
|
}
|
|
+#endif
|
|
|
|
lockXF86();
|
|
|
|
@@ -1150,7 +1162,6 @@ bool LockProcess::startSaver()
|
|
createSaverWindow();
|
|
move(0, 0);
|
|
show();
|
|
- setCursor( tqblankCursor );
|
|
|
|
raise();
|
|
XSync(qt_xdisplay(), False);
|
|
@@ -1313,6 +1324,8 @@ void LockProcess::repaintRootWindowIfNeeded()
|
|
|
|
bool LockProcess::startHack()
|
|
{
|
|
+ setCursor( tqblankCursor );
|
|
+
|
|
if ((mEnsureVRootWindowSecurityTimer) && (!mEnsureVRootWindowSecurityTimer->isActive())) mEnsureVRootWindowSecurityTimer->start(250, FALSE);
|
|
|
|
if (currentDialog || (!mDialogs.isEmpty()))
|
|
@@ -1429,6 +1442,7 @@ void LockProcess::stopHack()
|
|
mHackProc.kill(SIGKILL);
|
|
}
|
|
}
|
|
+ setCursor( tqarrowCursor );
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
@@ -1730,7 +1744,6 @@ void LockProcess::doFunctionKeyBroadcast() {
|
|
mDialogControlLock = false;
|
|
}
|
|
}
|
|
- setCursor( tqblankCursor );
|
|
|
|
DCOPRef ref( "*", "MainApplication-Interface");
|
|
ref.send("sendFakeKey", DCOPArg(mkeyCode , "unsigned int"));
|
|
diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
|
|
index c0b8e24..0cbef60 100644
|
|
--- a/kdesktop/lock/main.cc
|
|
+++ b/kdesktop/lock/main.cc
|
|
@@ -45,8 +45,9 @@ bool trinity_desktop_lock_forced = FALSE;
|
|
|
|
bool MyApp::x11EventFilter( XEvent *ev )
|
|
{
|
|
- if (ev->type == XKeyPress || ev->type == ButtonPress)
|
|
+ if (ev->type == XKeyPress || ev->type == ButtonPress) {
|
|
emit activity();
|
|
+ }
|
|
else if (ev->type == MotionNotify) {
|
|
time_t tick = time( 0 );
|
|
if (tick != lastTick) {
|
|
diff --git a/kdesktop/lock/querydlg.cc b/kdesktop/lock/querydlg.cc
|
|
index e672d54..5f50cbe 100644
|
|
--- a/kdesktop/lock/querydlg.cc
|
|
+++ b/kdesktop/lock/querydlg.cc
|
|
@@ -118,6 +118,7 @@ QueryDlg::QueryDlg(LockProcess *parent)
|
|
connect(ok, TQT_SIGNAL(clicked()), TQT_SLOT(slotOK()));
|
|
|
|
installEventFilter(this);
|
|
+ setFixedSize( sizeHint() );
|
|
}
|
|
|
|
QueryDlg::~QueryDlg()
|
|
diff --git a/kdesktop/lock/sakdlg.cc b/kdesktop/lock/sakdlg.cc
|
|
index 17f54a1..d96e0af 100644
|
|
--- a/kdesktop/lock/sakdlg.cc
|
|
+++ b/kdesktop/lock/sakdlg.cc
|
|
@@ -102,6 +102,7 @@ SAKDlg::SAKDlg(LockProcess *parent)
|
|
mStatusLabel->setText("<b>" + i18n("Press Ctrl+Alt+Del to begin.") + "</b><p>" + i18n("This process helps keep your password secure.") + "<br>" + i18n("It prevents unauthorized users from emulating the login screen."));
|
|
|
|
installEventFilter(this);
|
|
+ setFixedSize( sizeHint() );
|
|
|
|
mSAKProcess = new KProcess;
|
|
*mSAKProcess << "kdmtsak";
|
|
diff --git a/kdesktop/lock/securedlg.cc b/kdesktop/lock/securedlg.cc
|
|
index 532b904..37524f7 100644
|
|
--- a/kdesktop/lock/securedlg.cc
|
|
+++ b/kdesktop/lock/securedlg.cc
|
|
@@ -144,6 +144,7 @@ SecureDlg::SecureDlg(LockProcess *parent)
|
|
mSwitchButton->setFixedWidth(btnSize);
|
|
|
|
installEventFilter(this);
|
|
+ setFixedSize( sizeHint() );
|
|
}
|
|
|
|
SecureDlg::~SecureDlg()
|
|
commit 678bea5ba74b3b39981e482e188c61fdd37786f0
|
|
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
|
Date: 1328606373 -0600
|
|
|
|
Allow minimal managed window interaction inside the lock process
|
|
This closes Bug 810
|
|
|
|
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
|
|
index 9648bbc..2e9c9d3 100644
|
|
--- a/kdesktop/lock/lockprocess.cc
|
|
+++ b/kdesktop/lock/lockprocess.cc
|
|
@@ -111,8 +111,8 @@ Status DPMSInfo ( Display *, CARD16 *, BOOL * );
|
|
#define LOCK_GRACE_DEFAULT 5000
|
|
#define AUTOLOGOUT_DEFAULT 600
|
|
|
|
-// FIXME
|
|
-// This should be defined if Qt 3.4.0 or higher is in use
|
|
+// Setting this define is INSECURE
|
|
+// Use it for debugging purposes ONLY
|
|
// #define KEEP_MOUSE_UNGRABBED 1
|
|
|
|
// These lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special multimedia keys
|
|
@@ -185,7 +185,12 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
|
|
mHackStartupEnabled(true),
|
|
m_rootPixmap(NULL),
|
|
mBackingStartupDelayTimer(0),
|
|
- m_startupStatusDialog(NULL)
|
|
+ m_startupStatusDialog(NULL),
|
|
+ m_mouseDown(0),
|
|
+ m_mousePrevX(0),
|
|
+ m_mousePrevY(0),
|
|
+ m_dialogPrevX(0),
|
|
+ m_dialogPrevY(0)
|
|
{
|
|
#ifdef KEEP_MOUSE_UNGRABBED
|
|
setNFlags(WX11DisableMove|WX11DisableClose|WX11DisableShade|WX11DisableMinimize|WX11DisableMaximize);
|
|
@@ -208,6 +213,8 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
|
|
mEnsureVRootWindowSecurityTimer = new TQTimer( this );
|
|
connect( mEnsureVRootWindowSecurityTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(repaintRootWindowIfNeeded()) );
|
|
|
|
+ connect(tqApp, TQT_SIGNAL(mouseInteraction(XEvent *)), TQT_SLOT(slotMouseActivity(XEvent *)));
|
|
+
|
|
mHackDelayStartupTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000;
|
|
mHackStartupEnabled = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::screenSaverEnabled():true;
|
|
|
|
@@ -2200,4 +2207,64 @@ void LockProcess::sendVkbdFocusInOut( WId window, Time t )
|
|
}
|
|
}
|
|
|
|
+void LockProcess::slotMouseActivity(XEvent *event)
|
|
+{
|
|
+ bool inFrame = 0;
|
|
+ bool inDialog = 0;
|
|
+ XButtonEvent *be = (XButtonEvent *) event;
|
|
+ XMotionEvent *me = (XMotionEvent *) event;
|
|
+ if (event->type == ButtonPress) {
|
|
+ // Get geometry including window frame/titlebar
|
|
+ TQRect fgeom = mDialogs.first()->frameGeometry();
|
|
+ TQRect wgeom = mDialogs.first()->geometry();
|
|
+
|
|
+ if (((be->x_root > fgeom.x()) && (be->y_root > fgeom.y())) && ((be->x_root < (fgeom.x()+fgeom.width())) && (be->y_root < (fgeom.y()+fgeom.height())))) {
|
|
+ inFrame = 1;
|
|
+ }
|
|
+ if (((be->x_root > wgeom.x()) && (be->y_root > wgeom.y())) && ((be->x_root < (wgeom.x()+wgeom.width())) && (be->y_root < (wgeom.y()+wgeom.height())))) {
|
|
+ inDialog = 1;
|
|
+ }
|
|
+
|
|
+ // Clicked inside dialog; set focus
|
|
+ if (inFrame == TRUE) {
|
|
+ WId window = mDialogs.first()->winId();
|
|
+ XSetInputFocus(qt_xdisplay(), window, RevertToParent, CurrentTime);
|
|
+ fakeFocusIn(window);
|
|
+ // Why this needs to be repeated I have no idea...
|
|
+ XSetInputFocus(qt_xdisplay(), window, RevertToParent, CurrentTime);
|
|
+ fakeFocusIn(window);
|
|
+ }
|
|
+
|
|
+ // Clicked inside window handle (or border); drag window
|
|
+ if ((inFrame == TRUE) && (inDialog == FALSE)) {
|
|
+ TQPoint oldPoint = mDialogs.first()->pos();
|
|
+ m_mouseDown = 1;
|
|
+ m_dialogPrevX = oldPoint.x();
|
|
+ m_dialogPrevY = oldPoint.y();
|
|
+ m_mousePrevX = be->x_root;
|
|
+ m_mousePrevY = be->y_root;
|
|
+ XChangeActivePointerGrab( qt_xdisplay(), GRABEVENTS, TQCursor(tqsizeAllCursor).handle(), CurrentTime);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // Drag the window...
|
|
+ if (event->type == MotionNotify) {
|
|
+ if (m_mouseDown == TRUE) {
|
|
+ int deltaX = me->x_root - m_mousePrevX;
|
|
+ int deltaY = me->y_root - m_mousePrevY;
|
|
+ m_dialogPrevX = m_dialogPrevX + deltaX;
|
|
+ m_dialogPrevY = m_dialogPrevY + deltaY;
|
|
+ mDialogs.first()->move(m_dialogPrevX, m_dialogPrevY);
|
|
+
|
|
+ m_mousePrevX = me->x_root;
|
|
+ m_mousePrevY = me->y_root;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (event->type == ButtonRelease) {
|
|
+ m_mouseDown = 0;
|
|
+ XChangeActivePointerGrab( qt_xdisplay(), GRABEVENTS, TQCursor(tqarrowCursor).handle(), CurrentTime);
|
|
+ }
|
|
+}
|
|
+
|
|
#include "lockprocess.moc"
|
|
diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h
|
|
index 3a7e3db..18320a8 100644
|
|
--- a/kdesktop/lock/lockprocess.h
|
|
+++ b/kdesktop/lock/lockprocess.h
|
|
@@ -94,6 +94,7 @@ private slots:
|
|
bool closeCurrentWindow();
|
|
void repaintRootWindowIfNeeded();
|
|
void startSecureDialog();
|
|
+ void slotMouseActivity(XEvent *event);
|
|
|
|
private:
|
|
void configure();
|
|
@@ -197,6 +198,12 @@ private:
|
|
KSMModalDialog* m_startupStatusDialog;
|
|
|
|
TQDateTime mlockDateTime;
|
|
+
|
|
+ bool m_mouseDown;
|
|
+ int m_mousePrevX;
|
|
+ int m_mousePrevY;
|
|
+ int m_dialogPrevX;
|
|
+ int m_dialogPrevY;
|
|
};
|
|
|
|
#endif
|
|
diff --git a/kdesktop/lock/main.h b/kdesktop/lock/main.h
|
|
index c8e0e05..23797e4 100644
|
|
--- a/kdesktop/lock/main.h
|
|
+++ b/kdesktop/lock/main.h
|
|
@@ -32,6 +32,7 @@ protected:
|
|
bool x11EventFilter( XEvent * );
|
|
signals:
|
|
void activity();
|
|
+ void mouseInteraction(XEvent *event);
|
|
private:
|
|
time_t lastTick;
|
|
};
|