|
|
|
@ -173,6 +173,7 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
|
|
|
|
|
mDialogControlLock(false),
|
|
|
|
|
mForceReject(false),
|
|
|
|
|
currentDialog(NULL),
|
|
|
|
|
mEnsureScreenHiddenTimer(NULL),
|
|
|
|
|
mForceContinualLockDisplayTimer(NULL),
|
|
|
|
|
mEnsureVRootWindowSecurityTimer(NULL),
|
|
|
|
|
mHackDelayStartupTimer(NULL),
|
|
|
|
@ -288,6 +289,10 @@ LockProcess::~LockProcess()
|
|
|
|
|
hackResumeTimer->stop();
|
|
|
|
|
delete hackResumeTimer;
|
|
|
|
|
}
|
|
|
|
|
if (mEnsureScreenHiddenTimer != NULL) {
|
|
|
|
|
mEnsureScreenHiddenTimer->stop();
|
|
|
|
|
delete mEnsureScreenHiddenTimer;
|
|
|
|
|
}
|
|
|
|
|
if (mForceContinualLockDisplayTimer != NULL) {
|
|
|
|
|
mForceContinualLockDisplayTimer->stop();
|
|
|
|
|
delete mForceContinualLockDisplayTimer;
|
|
|
|
@ -410,7 +415,7 @@ void LockProcess::checkPipe()
|
|
|
|
|
if (numread > 0) {
|
|
|
|
|
if (readbuf[0] == 'C') {
|
|
|
|
|
mInfoMessageDisplayed=false;
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
mDialogControlLock = true;
|
|
|
|
|
if (currentDialog != NULL) {
|
|
|
|
|
mForceReject = true;
|
|
|
|
@ -423,7 +428,7 @@ void LockProcess::checkPipe()
|
|
|
|
|
to_display = to_display.remove(0,1);
|
|
|
|
|
// Lock out password dialogs and close any active dialog
|
|
|
|
|
mInfoMessageDisplayed=true;
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
mDialogControlLock = true;
|
|
|
|
|
if (currentDialog != NULL) {
|
|
|
|
|
mForceReject = true;
|
|
|
|
@ -444,7 +449,7 @@ void LockProcess::checkPipe()
|
|
|
|
|
to_display = to_display.remove(0,1);
|
|
|
|
|
// Lock out password dialogs and close any active dialog
|
|
|
|
|
mInfoMessageDisplayed=true;
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
mDialogControlLock = true;
|
|
|
|
|
if (currentDialog != NULL) {
|
|
|
|
|
mForceReject = true;
|
|
|
|
@ -468,7 +473,7 @@ void LockProcess::checkPipe()
|
|
|
|
|
to_display = to_display.remove(0,1);
|
|
|
|
|
// Lock out password dialogs and close any active dialog
|
|
|
|
|
mInfoMessageDisplayed=true;
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
mDialogControlLock = true;
|
|
|
|
|
if (currentDialog != NULL) {
|
|
|
|
|
mForceReject = true;
|
|
|
|
@ -887,8 +892,13 @@ void LockProcess::desktopResized()
|
|
|
|
|
mRootWidth = rootAttr.width;
|
|
|
|
|
mRootHeight = rootAttr.height;
|
|
|
|
|
|
|
|
|
|
// Resize the background widget
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
|
|
|
|
|
// Black out the background widget to hide ugly resize tiling artifacts
|
|
|
|
|
setBackgroundColor(black);
|
|
|
|
|
erase();
|
|
|
|
|
|
|
|
|
|
// This slot needs to be able to execute very rapidly so as to prevent the user's desktop from ever
|
|
|
|
|
// being displayed, so we finish the hack restarting/display prettying operations in a separate timed slot
|
|
|
|
|
if (resizeTimer == NULL) {
|
|
|
|
@ -902,7 +912,7 @@ void LockProcess::doDesktopResizeFinish()
|
|
|
|
|
{
|
|
|
|
|
stopHack();
|
|
|
|
|
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
mDialogControlLock = true;
|
|
|
|
|
if (closeCurrentWindow()) {
|
|
|
|
|
TQTimer::singleShot( 0, this, SLOT(doDesktopResizeFinish()) );
|
|
|
|
@ -911,7 +921,13 @@ void LockProcess::doDesktopResizeFinish()
|
|
|
|
|
mDialogControlLock = false;
|
|
|
|
|
|
|
|
|
|
// Restart the hack as the window size is now different
|
|
|
|
|
startHack();
|
|
|
|
|
if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) {
|
|
|
|
|
ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
|
|
|
|
|
if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
startHack();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mBusy = false;
|
|
|
|
|
}
|
|
|
|
@ -1064,7 +1080,7 @@ bool LockProcess::grabInput()
|
|
|
|
|
|
|
|
|
|
if (!grabKeyboard())
|
|
|
|
|
{
|
|
|
|
|
sleep(1);
|
|
|
|
|
usleep(100000);
|
|
|
|
|
if (!grabKeyboard())
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
@ -1073,7 +1089,7 @@ bool LockProcess::grabInput()
|
|
|
|
|
|
|
|
|
|
if (!grabMouse())
|
|
|
|
|
{
|
|
|
|
|
sleep(1);
|
|
|
|
|
usleep(100000);
|
|
|
|
|
if (!grabMouse())
|
|
|
|
|
{
|
|
|
|
|
XUngrabKeyboard(qt_xdisplay(), CurrentTime);
|
|
|
|
@ -1117,7 +1133,7 @@ bool LockProcess::startSaver()
|
|
|
|
|
m_grayImage.fill(0); // Set the alpha buffer to 0 (fully transparent)
|
|
|
|
|
m_grayImage.setAlphaBuffer(true);
|
|
|
|
|
TQPixmap m_root;
|
|
|
|
|
m_root.resize( TQApplication::desktop()->geometry().width(), TQApplication::desktop()->geometry().height() );
|
|
|
|
|
m_root.resize(mRootWidth, mRootHeight);
|
|
|
|
|
TQPainter p;
|
|
|
|
|
p.begin( &m_root );
|
|
|
|
|
m_grayImage.setAlphaBuffer(false);
|
|
|
|
@ -1144,14 +1160,21 @@ bool LockProcess::startSaver()
|
|
|
|
|
setBackgroundColor(black);
|
|
|
|
|
else
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
}
|
|
|
|
|
if (trinity_desktop_lock_use_system_modal_dialogs) {
|
|
|
|
|
// Try to get the root pixmap
|
|
|
|
|
m_rootPixmap = new KRootPixmap(this);
|
|
|
|
|
if (!m_rootPixmap) m_rootPixmap = new KRootPixmap(this);
|
|
|
|
|
m_rootPixmap->setCustomPainting(true);
|
|
|
|
|
connect(m_rootPixmap, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)), this, TQT_SLOT(slotPaintBackground(const TQPixmap &)));
|
|
|
|
|
m_rootPixmap->start();
|
|
|
|
|
// Sometimes KRootPixmap fails...make sure the desktop is hidden regardless
|
|
|
|
|
if (!mEnsureScreenHiddenTimer) {
|
|
|
|
|
mEnsureScreenHiddenTimer = new TQTimer( this );
|
|
|
|
|
connect( mEnsureScreenHiddenTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotForcePaintBackground()) );
|
|
|
|
|
}
|
|
|
|
|
mEnsureScreenHiddenTimer->start(2000, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (trinity_desktop_lock_in_sec_dlg == FALSE) {
|
|
|
|
@ -1275,6 +1298,7 @@ void LockProcess::repaintRootWindowIfNeeded()
|
|
|
|
|
if (!mHackProc.isRunning()) {
|
|
|
|
|
if (backingPixmap.isNull()) {
|
|
|
|
|
setBackgroundColor(black);
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
@ -1298,6 +1322,7 @@ bool LockProcess::startHack()
|
|
|
|
|
setBackgroundColor(black);
|
|
|
|
|
else
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@ -1344,6 +1369,7 @@ bool LockProcess::startHack()
|
|
|
|
|
setBackgroundColor(black);
|
|
|
|
|
else
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
mSuspended = false;
|
|
|
|
|
}
|
|
|
|
@ -1377,7 +1403,10 @@ bool LockProcess::startHack()
|
|
|
|
|
else
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
}
|
|
|
|
|
if (backingPixmap.isNull()) erase();
|
|
|
|
|
if (backingPixmap.isNull()) {
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
}
|
|
|
|
|
else bitBlt(this, 0, 0, &backingPixmap);
|
|
|
|
|
if (trinity_desktop_lock_use_system_modal_dialogs) {
|
|
|
|
|
ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
|
|
|
|
@ -1416,7 +1445,10 @@ void LockProcess::hackExited(KProcess *)
|
|
|
|
|
else
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
}
|
|
|
|
|
if (backingPixmap.isNull()) erase();
|
|
|
|
|
if (backingPixmap.isNull()) {
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
}
|
|
|
|
|
else bitBlt(this, 0, 0, &backingPixmap);
|
|
|
|
|
if (!mSuspended) {
|
|
|
|
|
if (trinity_desktop_lock_use_system_modal_dialogs) {
|
|
|
|
@ -1492,6 +1524,7 @@ void LockProcess::resume( bool force )
|
|
|
|
|
setBackgroundColor(black);
|
|
|
|
|
else
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -1597,10 +1630,13 @@ int LockProcess::execDialog( TQDialog *dlg )
|
|
|
|
|
}
|
|
|
|
|
mDialogs.prepend( dlg );
|
|
|
|
|
fakeFocusIn( dlg->winId());
|
|
|
|
|
if (backingPixmap.isNull() && trinity_desktop_lock_use_system_modal_dialogs) erase();
|
|
|
|
|
if (backingPixmap.isNull() && trinity_desktop_lock_use_system_modal_dialogs) {
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
}
|
|
|
|
|
else bitBlt(this, 0, 0, &backingPixmap);
|
|
|
|
|
int rt = dlg->exec();
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
currentDialog = NULL;
|
|
|
|
|
mDialogs.remove( dlg );
|
|
|
|
|
if( mDialogs.isEmpty() ) {
|
|
|
|
@ -1624,8 +1660,18 @@ int LockProcess::execDialog( TQDialog *dlg )
|
|
|
|
|
return rt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LockProcess::slotForcePaintBackground()
|
|
|
|
|
{
|
|
|
|
|
TQPixmap blankPixmap(mRootWidth, mRootHeight);
|
|
|
|
|
blankPixmap.fill(Qt::black);
|
|
|
|
|
slotPaintBackground(blankPixmap);
|
|
|
|
|
printf("[WARNING] Unable to obtain desktop wallpaper in a timely manner. High system load or possibly a TDE bug!\n\r"); fflush(stdout);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LockProcess::slotPaintBackground(const TQPixmap &rpm)
|
|
|
|
|
{
|
|
|
|
|
mEnsureScreenHiddenTimer->stop();
|
|
|
|
|
|
|
|
|
|
TQPixmap pm = rpm;
|
|
|
|
|
|
|
|
|
|
if (TQPaintDevice::x11AppDepth() == 32) {
|
|
|
|
@ -1652,6 +1698,7 @@ void LockProcess::slotPaintBackground(const TQPixmap &rpm)
|
|
|
|
|
backingPixmap = pm;
|
|
|
|
|
if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced) {
|
|
|
|
|
setBackgroundPixmap(backingPixmap);
|
|
|
|
|
setGeometry(0, 0, mRootWidth, mRootHeight);
|
|
|
|
|
erase();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1677,7 +1724,7 @@ void LockProcess::doFunctionKeyBroadcast() {
|
|
|
|
|
mBusy=true;
|
|
|
|
|
TQTimer::singleShot(1000, this, TQT_SLOT(slotDeadTimePassed()));
|
|
|
|
|
if (mkeyCode == XKeysymToKeycode(qt_xdisplay(), XF86XK_Display)) {
|
|
|
|
|
while (mDialogControlLock == true) sleep(1);
|
|
|
|
|
while (mDialogControlLock == true) usleep(100000);
|
|
|
|
|
mDialogControlLock = true;
|
|
|
|
|
currentDialog->close(); // DO NOT use closeCurrentWindow() here!
|
|
|
|
|
mDialogControlLock = false;
|
|
|
|
|