From da8993ffb2ffebb1215ec80dba33d2c8275f0781 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 25 Oct 2014 21:47:51 -0500 Subject: 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 --- kdesktop/lock/lockdlg.cc | 2 ++ kdesktop/lock/lockprocess.cc | 38 +++++++++++++++++++++----------------- kdesktop/lock/lockprocess.h | 2 ++ ksmserver/shutdowndlg.cpp | 10 +++++----- 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(); @@ -1279,6 +1281,21 @@ void LockProcess::ungrabInput() unlockXF86(); } +//--------------------------------------------------------------------------- +// +// 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. @@ -1286,19 +1303,7 @@ void LockProcess::ungrabInput() 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 ); } -- cgit v1.2.1