summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-10-25 21:47:51 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-10-25 21:47:51 -0500
commitda8993ffb2ffebb1215ec80dba33d2c8275f0781 (patch)
tree8dc0e1ff355f84d4737491ab139a7841a9c06251
parent87136458b43134c86fb2b5792022024c6d1ec968 (diff)
downloadtdebase-da8993ff.tar.gz
tdebase-da8993ff.zip
Make kdesktop_lock and ksmserver ARGB screen blanking more efficient and improve multi-head support in same
Fix kdesktop_lock busy cursor appearing over active screen saver after GUI-driven VT switch and delayed return to original VT Repair kdesktop_lock invalid password delay bypass with Cancel button
-rw-r--r--kdesktop/lock/lockdlg.cc2
-rw-r--r--kdesktop/lock/lockprocess.cc38
-rw-r--r--kdesktop/lock/lockprocess.h2
-rw-r--r--ksmserver/shutdowndlg.cpp10
4 files changed, 30 insertions, 22 deletions
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc
index 7b53484d2..763d7bf95 100644
--- a/kdesktop/lock/lockdlg.cc
+++ b/kdesktop/lock/lockdlg.cc
@@ -349,6 +349,7 @@ void PasswordDlg::timerEvent(TQTimerEvent *ev)
mUnlockingFailed = false;
updateLabel();
ok->setEnabled(true);
+ if (cancel) cancel->setEnabled(true);
mNewSessButton->setEnabled( true );
greet->revive();
greet->start();
@@ -463,6 +464,7 @@ void PasswordDlg::reapVerify()
updateLabel();
mFailedTimerId = startTimer(1500);
ok->setEnabled(false);
+ if (cancel) cancel->setEnabled(false);
mNewSessButton->setEnabled( false );
return;
case AuthAbort:
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
index 1de0b6753..3dacc7ff3 100644
--- a/kdesktop/lock/lockprocess.cc
+++ b/kdesktop/lock/lockprocess.cc
@@ -359,6 +359,7 @@ void LockProcess::init(bool child, bool useBlankOnly)
XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr);
mRootWidth = rootAttr.width;
mRootHeight = rootAttr.height;
+ generateBackingImages();
// Connect all signals
connect( mForceContinualLockDisplayTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(displayLockDialogIfNeeded()) );
@@ -988,6 +989,7 @@ void LockProcess::desktopResized()
}
mRootWidth = rootAttr.width;
mRootHeight = rootAttr.height;
+ generateBackingImages();
mBusy = true;
mHackDelayStartupTimer->stop();
@@ -1281,24 +1283,27 @@ void LockProcess::ungrabInput()
//---------------------------------------------------------------------------
//
+// Generate requisite backing images for ARGB mode
+//
+void LockProcess::generateBackingImages()
+{
+ if (argb_visual) {
+ mArgbTransparentBackgroundPixmap.resize(mRootWidth, mRootHeight);
+ TQPainter p;
+ p.begin( &mArgbTransparentBackgroundPixmap );
+ p.fillRect( 0, 0, mArgbTransparentBackgroundPixmap.width(), mArgbTransparentBackgroundPixmap.height(), TQBrush(tqRgba(0, 0, 0, 0)) );
+ p.end();
+ }
+}
+
+//---------------------------------------------------------------------------
+//
// Set a fully transparent ARGB background image.
//
void LockProcess::setTransparentBackgroundARGB()
{
// eliminate nasty flicker on first show
- TQImage m_grayImage = TQImage( TQApplication::desktop()->width(), TQApplication::desktop()->height(), 32 );
- m_grayImage = m_grayImage.convertDepth(32);
- m_grayImage.setAlphaBuffer(false);
- m_grayImage.fill(0); // Set the alpha buffer to 0 (fully transparent)
- m_grayImage.setAlphaBuffer(true);
- TQPixmap m_root;
- m_root.resize(mRootWidth, mRootHeight);
- TQPainter p;
- p.begin( &m_root );
- m_grayImage.setAlphaBuffer(false);
- p.drawImage( 0, 0, m_grayImage );
- p.end();
- setBackgroundPixmap( m_root );
+ setBackgroundPixmap( mArgbTransparentBackgroundPixmap );
}
void LockProcess::saverReadyIfNeeded()
@@ -1635,6 +1640,7 @@ bool LockProcess::startHack()
mSuspended = false;
}
+ XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime);
if (mHackProc.start() == true)
{
#ifdef HAVE_SETPRIORITY
@@ -1965,8 +1971,7 @@ int LockProcess::execDialog( TQDialog *dlg )
if (mDialogs.isEmpty())
{
suspend();
- XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS,
- TQCursor(tqarrowCursor).handle(), CurrentTime);
+ XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqarrowCursor).handle(), CurrentTime);
}
mDialogs.prepend( dlg );
fakeFocusIn( dlg->winId());
@@ -1996,8 +2001,7 @@ int LockProcess::execDialog( TQDialog *dlg )
else {
cursorHandle = TQCursor(tqbusyCursor).handle();
}
- XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS,
- cursorHandle, CurrentTime);
+ XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, cursorHandle, CurrentTime);
if (trinity_desktop_lock_use_system_modal_dialogs) {
// Slight delay before screensaver resume to allow the dialog window to fully disappear
if (hackResumeTimer == NULL) {
diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h
index dc14aa676..85e9cdd31 100644
--- a/kdesktop/lock/lockprocess.h
+++ b/kdesktop/lock/lockprocess.h
@@ -157,6 +157,7 @@ private:
void windowAdded( WId window, bool managed );
void resume( bool force );
static TQVariant getConf(void *ctx, const char *key, const TQVariant &dflt);
+ void generateBackingImages();
void fullyOnline();
bool mLocked;
@@ -228,6 +229,7 @@ private:
TQPixmap backingPixmap;
KRootPixmap *m_rootPixmap;
int mBackingStartupDelayTimer;
+ TQPixmap mArgbTransparentBackgroundPixmap;
KSMModalDialog* m_startupStatusDialog;
diff --git a/ksmserver/shutdowndlg.cpp b/ksmserver/shutdowndlg.cpp
index d4881ad85..5c50602cb 100644
--- a/ksmserver/shutdowndlg.cpp
+++ b/ksmserver/shutdowndlg.cpp
@@ -543,17 +543,17 @@ KSMShutdownIPFeedback::KSMShutdownIPFeedback()
system("krootbacking &");
}
+ m_screenGeometry = TQApplication::desktop()->geometry();
+
// eliminate nasty flicker on first show
- m_root.resize( kapp->desktop()->width(), kapp->desktop()->height() );
- TQImage blendedImage = TQImage( kapp->desktop()->width(), kapp->desktop()->height(), 32 );
+ m_root.resize(m_screenGeometry.width(), m_screenGeometry.height());
TQPainter p;
p.begin( &m_root );
- blendedImage.setAlphaBuffer(false);
- p.drawImage( 0, 0, blendedImage );
+ p.fillRect( 0, 0, m_root.width(), m_root.height(), TQBrush(tqRgba(0, 0, 0, 0)) );
p.end();
setBackgroundPixmap( m_root );
- setGeometry( TQApplication::desktop()->geometry() );
+ setGeometry( m_screenGeometry );
setBackgroundMode( TQWidget::NoBackground );
}