diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc index d96b64ca9..ac70def46 100644 --- a/kdesktop/lock/lockprocess.cc +++ b/kdesktop/lock/lockprocess.cc @@ -220,6 +220,7 @@ LockProcess::LockProcess() mHackDelayStartupTimer(NULL), mHackDelayStartupTimeout(0), mHackStartupEnabled(true), + mOverrideHackStartupEnabled(false), mResizingDesktopLock(false), m_rootPixmap(NULL), mBackingStartupDelayTimer(0), @@ -683,6 +684,7 @@ void LockProcess::slotDeadTimePassed() bool LockProcess::defaultSave() { mLocked = false; + mOverrideHackStartupEnabled = true; if (startSaver()) { if (mLockGrace >= 0) TQTimer::singleShot(mLockGrace, this, TQT_SLOT(startLock())); @@ -859,16 +861,19 @@ void LockProcess::configure() if (mSaver.isEmpty() || mUseBlankOnly) { mSaver = "KBlankscreen.desktop"; } - if (KDesktopSettings::screenSaverEnabled() == false) { - mSaver = ""; - mSaverExec = ""; + if (!trinity_desktop_lock_use_system_modal_dialogs) { + if (KDesktopSettings::screenSaverEnabled() == false) { + mSaver = ""; + mSaverExec = ""; + } } readSaver(); mPlugins = KDesktopSettings::pluginsUnlock(); - if (mPlugins.isEmpty()) + if (mPlugins.isEmpty()) { mPlugins = TQStringList("classic"); + } mPluginOptions = KDesktopSettings::pluginOptions(); } @@ -1110,7 +1115,7 @@ void LockProcess::desktopResized() // Black out the background widget to hide ugly resize tiling artifacts if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { setBackgroundColor(black); @@ -1362,17 +1367,10 @@ void LockProcess::ungrabInput() //--------------------------------------------------------------------------- // -// Start the screen saver. +// Set a fully transparent ARGB background image. // -bool LockProcess::startSaver() +void LockProcess::setTransparentBackgroundARGB() { - if (!child_saver && !grabInput()) - { - kdWarning(1204) << "LockProcess::startSaver() grabInput() failed!!!!" << endl; - return false; - } - mBusy = false; - // eliminate nasty flicker on first show TQImage m_grayImage = TQImage( TQApplication::desktop()->width(), TQApplication::desktop()->height(), 32 ); m_grayImage = m_grayImage.convertDepth(32); @@ -1387,6 +1385,23 @@ bool LockProcess::startSaver() p.drawImage( 0, 0, m_grayImage ); p.end(); setBackgroundPixmap( m_root ); +} + +//--------------------------------------------------------------------------- +// +// Start the screen saver. +// +bool LockProcess::startSaver() +{ + if (!child_saver && !grabInput()) + { + kdWarning(1204) << "LockProcess::startSaver() grabInput() failed!!!!" << endl; + return false; + } + mBusy = false; + + // eliminate nasty flicker on first show + setTransparentBackgroundARGB(); saveVRoot(); @@ -1408,9 +1423,9 @@ bool LockProcess::startSaver() slotPaintBackground(rootWinSnapShot); } - if (((!(trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced)) && (!trinity_desktop_lock_in_sec_dlg)) && mHackStartupEnabled) { + if (((!(trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced)) && (!trinity_desktop_lock_in_sec_dlg)) && (mHackStartupEnabled || mOverrideHackStartupEnabled)) { if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { @@ -1430,7 +1445,8 @@ bool LockProcess::startSaver() if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); } else { - if (mHackStartupEnabled == true) { + if (mHackStartupEnabled || mOverrideHackStartupEnabled) { + mOverrideHackStartupEnabled = false; startHack(); } else { @@ -1558,7 +1574,7 @@ void LockProcess::repaintRootWindowIfNeeded() if (trinity_desktop_lock_use_system_modal_dialogs) { if (!mHackProc.isRunning()) { if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); erase(); } else { @@ -1591,7 +1607,7 @@ bool LockProcess::startHack() { // no resuming with dialog visible or when not visible if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { @@ -1644,7 +1660,7 @@ bool LockProcess::startHack() if (trinity_desktop_lock_use_system_modal_dialogs) { // Make sure we have a nice clean display to start with! if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { @@ -1684,7 +1700,7 @@ bool LockProcess::startHack() TQApplication::syncX(); if (!trinity_desktop_lock_use_system_modal_dialogs) { if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { @@ -1696,7 +1712,7 @@ bool LockProcess::startHack() } } if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); erase(); } else { @@ -1746,7 +1762,7 @@ void LockProcess::hackExited(TDEProcess *) TQApplication::syncX(); if (!trinity_desktop_lock_use_system_modal_dialogs) { if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { @@ -1758,7 +1774,7 @@ void LockProcess::hackExited(TDEProcess *) } } if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { @@ -1846,7 +1862,7 @@ void LockProcess::resume( bool force ) // no resuming with dialog visible or when not visible if (trinity_desktop_lock_use_system_modal_dialogs) { if (argb_visual) { - setErasePixmap(TQPixmap()); + setTransparentBackgroundARGB(); } else { if (backingPixmap.isNull()) { diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h index 57caede60..e1b8fcf52 100644 --- a/kdesktop/lock/lockprocess.h +++ b/kdesktop/lock/lockprocess.h @@ -110,6 +110,7 @@ private: void saveVRoot(); void setVRoot(Window win, Window rw); void removeVRoot(Window win); + void setTransparentBackgroundARGB(); bool grabKeyboard(); bool grabMouse(); bool grabInput(); @@ -196,6 +197,7 @@ private: int mHackDelayStartupTimeout; bool mHackStartupEnabled; + bool mOverrideHackStartupEnabled; bool mResizingDesktopLock; TQPixmap backingPixmap; diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc index 017250a35..c2a6c753a 100644 --- a/kdesktop/lock/main.cc +++ b/kdesktop/lock/main.cc @@ -307,15 +307,12 @@ int main( int argc, char **argv ) } } -// FIXME -// Composite should be enabled where possible, however using ARGB visuals seems to cause problems -// with XScreenSaver hacks (they do not display). -// #ifdef COMPOSITE -// MyApp app(TDEApplication::openX11RGBADisplay()); -// argb_visual = app.isX11CompositionAvailable(); -// #else +#ifdef COMPOSITE + MyApp app(TDEApplication::openX11RGBADisplay()); + argb_visual = app.isX11CompositionAvailable(); +#else MyApp app; -// #endif +#endif kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl; app.disableSessionManagement();