diff options
-rw-r--r-- | kicker/taskbar/taskcontainer.cpp | 26 | ||||
-rw-r--r-- | ksmserver/shutdown.cpp | 8 | ||||
-rw-r--r-- | ksmserver/shutdowndlg.cpp | 153 | ||||
-rw-r--r-- | ksmserver/shutdowndlg.h | 44 | ||||
-rw-r--r-- | kwin/kcmkwin/kwinoptions/windows.cpp | 6 |
5 files changed, 221 insertions, 16 deletions
diff --git a/kicker/taskbar/taskcontainer.cpp b/kicker/taskbar/taskcontainer.cpp index 5b084a962..dee5c12e5 100644 --- a/kicker/taskbar/taskcontainer.cpp +++ b/kicker/taskbar/taskcontainer.cpp @@ -57,6 +57,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar, TQWidget *parent, const char *name) : TQToolButton(parent, name), + animationTimer(0, "TaskContainer::animationTimer"), + dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), + attentionTimer(0, "TaskContainer::attentionTimer"), + m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer"), currentFrame(0), attentionState(-1), lastActivated(0), @@ -66,12 +70,7 @@ TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar, taskBar(bar), discardNextMouseEvent(false), aboutToActivate(false), - m_mouseOver(false), - animationTimer(0, "TaskContainer::animationTimer"), - dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), - attentionTimer(0, "TaskContainer::attentionTimer"), - m_paintEventCompression(false), - m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer") + m_paintEventCompression(false) { init(); setAcceptDrops(true); // Always enabled to activate task during drag&drop. @@ -88,6 +87,10 @@ TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar, TaskContainer::TaskContainer(Startup::Ptr startup, PixmapList& startupFrames, TaskBar* bar, TQWidget *parent, const char *name) : TQToolButton(parent, name), + animationTimer(0, "TaskContainer::animationTimer"), + dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), + attentionTimer(0, "TaskContainer::attentionTimer"), + m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer"), currentFrame(0), frames(startupFrames), attentionState(-1), @@ -99,11 +102,7 @@ TaskContainer::TaskContainer(Startup::Ptr startup, PixmapList& startupFrames, discardNextMouseEvent(false), aboutToActivate(false), m_mouseOver(false), - animationTimer(0, "TaskContainer::animationTimer"), - dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), - attentionTimer(0, "TaskContainer::attentionTimer"), - m_paintEventCompression(false), - m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer") + m_paintEventCompression(false) { init(); setEnabled(false); @@ -481,7 +480,10 @@ void TaskContainer::paintEvent( TQPaintEvent* ) drawButton(&p); p.end(); - bitBlt(this, 0, 0, pm); + TQPixmap iconPixmapToSet = *pm; + if (TQPaintDevice::x11AppDepth() == 32) iconPixmapToSet.convertFromImage(KImageEffect::convertToPremultipliedAlpha( iconPixmapToSet.convertToImage() )); + + bitBlt(this, 0, 0, &iconPixmapToSet); delete pm; } diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp index c97b05ffb..d298b2cf3 100644 --- a/ksmserver/shutdown.cpp +++ b/ksmserver/shutdown.cpp @@ -179,6 +179,14 @@ void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm, // shall we save the session on logout? saveSession = ( config->readEntry( "loginMode", "restorePreviousLogout" ) == "restorePreviousLogout" ); + // shall we show a nice fancy logout screen? + bool showFancyLogout = KConfigGroup(KGlobal::config(), "Logout").readBoolEntry("showFancyLogout", true); + + if (showFancyLogout) { +// KSMShutdownIPFeedback::start(); // hide the UGLY logout process from the user + KSMShutdownIPDlg::showShutdownIP(); + } + if ( saveSession ) sessionGroup = TQString("Session: ") + SESSION_PREVIOUS_LOGOUT; diff --git a/ksmserver/shutdowndlg.cpp b/ksmserver/shutdowndlg.cpp index a75eef343..52960ad6d 100644 --- a/ksmserver/shutdowndlg.cpp +++ b/ksmserver/shutdowndlg.cpp @@ -57,7 +57,7 @@ Copyright (C) 2000 Matthias Ettrich <ettrich@kde.org> #include <math.h> #include <dmctl.h> #include <kaction.h> - +#include <netwm.h> #include <X11/Xlib.h> @@ -494,6 +494,94 @@ void KSMShutdownFeedback::slotPaintEffect() ////// +KSMShutdownIPFeedback * KSMShutdownIPFeedback::s_pSelf = 0L; + +KSMShutdownIPFeedback::KSMShutdownIPFeedback() + : TQWidget( 0L, "feedbackipwidget", Qt::WType_Popup | Qt::WStyle_StaysOnTop | Qt::WX11BypassWM ), m_sharedpixmap(0), m_timeout(0) + +{ + m_sharedpixmap = new KSharedPixmap(); + resize(0, 0); + setShown(true); + + // At least show SOMETHING while waiting for the root pixmap... + TQPixmap drawable = TQPixmap(TQPixmap::grabWindow(qt_xrootwin(), 0, 0, TQApplication::desktop()->width(), TQApplication::desktop()->height())).convertToImage(); + bitBlt( this, 0, 0, &drawable ); + + // Try to get and show the root pixmap + enableExports(); + TQTimer::singleShot( 100, this, SLOT(slotPaintEffect()) ); +} + +KSMShutdownIPFeedback::~KSMShutdownIPFeedback() +{ + if (m_sharedpixmap) + delete m_sharedpixmap; +} + +void KSMShutdownIPFeedback::fadeBack( void ) +{ + +} + +TQString KSMShutdownIPFeedback::pixmapName(int desk) { + TQString pattern = TQString("DESKTOP%1"); + int screen_number = DefaultScreen(qt_xdisplay()); + if (screen_number) { + pattern = TQString("SCREEN%1-DESKTOP").arg(screen_number) + "%1"; + } + return pattern.arg( desk ); +} + +void KSMShutdownIPFeedback::slotPaintEffect() +{ + NETRootInfo rinfo( qt_xdisplay(), NET::CurrentDesktop ); + rinfo.activate(); + int current_desktop = rinfo.currentDesktop(); + + m_sharedpixmap->loadFromShared(pixmapName(current_desktop), TQRect(0, 0, width(), height())); +} + +void KSMShutdownIPFeedback::slotDone(bool success) +{ + if (!success) + { + kdWarning(270) << k_lineinfo << "loading of desktop background failed.\n"; + if (m_timeout < 50) { + TQTimer::singleShot( 100, this, SLOT(slotPaintEffect()) ); + m_timeout++; + return; + } + } + + TQImage image = m_sharedpixmap->convertToImage(); + TQPixmap drawable; + drawable.convertFromImage( image ); + bitBlt( this, 0, 0, &drawable ); +} + +void KSMShutdownIPFeedback::enableExports() +{ +#ifdef Q_WS_X11 + kdDebug(270) << k_lineinfo << "activating background exports.\n"; + DCOPClient *client = kapp->dcopClient(); + if (!client->isAttached()) + client->attach(); + TQByteArray data; + TQDataStream args( data, IO_WriteOnly ); + args << 1; + + TQCString appname( "kdesktop" ); + int screen_number = DefaultScreen(qt_xdisplay()); + if ( screen_number ) + appname.sprintf("kdesktop-screen-%d", screen_number ); + + client->send( appname, "KBackgroundIface", "setExport(int)", data ); +#endif +} + +////// + KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent, bool maysd, KApplication::ShutdownType sdtype ) : TQDialog( parent, 0, TRUE, (WFlags)WType_Popup ), targets(0) @@ -963,6 +1051,69 @@ bool KSMShutdownDlg::confirmShutdown( bool maysd, KApplication::ShutdownType& sd return result; } +void KSMShutdownIPDlg::showShutdownIP() +{ + kapp->enableStyles(); + KSMShutdownIPDlg* l = new KSMShutdownIPDlg( 0 ); + + // Show dialog (will save the background in showEvent) + TQSize sh = l->tqsizeHint(); + TQRect rect = KGlobalSettings::desktopGeometry(TQCursor::pos()); + + l->move(rect.x() + (rect.width() - sh.width())/2, + rect.y() + (rect.height() - sh.height())/2); + + TQTimer *timer = new TQTimer(l); + connect( timer, SIGNAL(timeout()), l, SLOT(exec()) ); + timer->start( 0, TRUE ); + + kapp->disableStyles(); +} + +KSMShutdownIPDlg::KSMShutdownIPDlg(TQWidget* parent) + : TQDialog( 0, "", TRUE, Qt::WType_Popup | Qt::WDestructiveClose ) + +{ + TQVBoxLayout* vbox = new TQVBoxLayout( this ); + + TQFrame* frame = new TQFrame( this ); + frame->setFrameStyle( TQFrame::StyledPanel | TQFrame::Raised ); + frame->setLineWidth( tqstyle().tqpixelMetric( TQStyle::PM_DefaultFrameWidth, frame ) ); + // we need to set the minimum size for the window + frame->setMinimumWidth(400); + vbox->addWidget( frame ); + TQGridLayout* gbox = new TQGridLayout( frame, 1, 1, 2 * KDialog::marginHint(), 2 * KDialog::spacingHint() ); + + TQWidget* ticon = new TQWidget( frame ); + KIconLoader * ldr = KGlobal::iconLoader(); + TQPixmap trinityPixmap = ldr->loadIcon("kmenu", KIcon::Panel, KIcon::SizeLarge, KIcon::DefaultState, 0L, true); + ticon->setBackgroundPixmap(trinityPixmap); + ticon->setMinimumSize(trinityPixmap.size()); + ticon->setMaximumSize(trinityPixmap.size()); + ticon->resize(trinityPixmap.size()); +// gbox->addMultiCellWidget( ticon, 0, 1, 0, 0, AlignCenter ); + gbox->addWidget( ticon, 0, 0, AlignHCenter ); + + TQLabel* label = new TQLabel( i18n("Trinity is saving your settings, please wait..."), frame ); + TQFont fnt = label->font(); + fnt.setBold( true ); + fnt.setPointSize( fnt.pointSize() * 1 ); + label->setFont( fnt ); + gbox->addWidget( label, 0, 1, AlignHCenter ); + +// label = new TQLabel( i18n("Logging off"), frame ); +// fnt = label->font(); +// fnt.setBold( true ); +// fnt.setPointSize( fnt.pointSize() * 3 / 2 ); +// label->setFont( fnt ); +// gbox->addWidget( label, 0, 1, AlignHCenter ); +} + +KSMShutdownIPDlg::~KSMShutdownIPDlg() +{ + +} + KSMDelayedPushButton::KSMDelayedPushButton( const KGuiItem &item, TQWidget *parent, const char *name) diff --git a/ksmserver/shutdowndlg.h b/ksmserver/shutdowndlg.h index e3c67eb31..5beb32ca4 100644 --- a/ksmserver/shutdowndlg.h +++ b/ksmserver/shutdowndlg.h @@ -16,6 +16,7 @@ Copyright (C) 2000 Matthias Ettrich <ettrich@kde.org> #include <tqframe.h> #include <kguiitem.h> #include <tqtoolbutton.h> +#include <ksharedpixmap.h> class TQPushButton; class TQVButtonGroup; @@ -73,6 +74,34 @@ private: }; +// The (singleton) widget that shows either pretty pictures or a black screen during logout +class KSMShutdownIPFeedback : public TQWidget +{ + Q_OBJECT + +public: + static void start() { s_pSelf = new KSMShutdownIPFeedback(); } + static void stop() { if ( s_pSelf != 0L ) s_pSelf->fadeBack(); delete s_pSelf; s_pSelf = 0L; } + static KSMShutdownIPFeedback * self() { return s_pSelf; } + +protected: + ~KSMShutdownIPFeedback(); + +private slots: + void slotPaintEffect(); + void slotDone(bool success); + +private: + static KSMShutdownIPFeedback * s_pSelf; + KSMShutdownIPFeedback(); + int m_currentY; + TQPixmap m_root; + void fadeBack( void ); + TQString pixmapName(int desk); + KSharedPixmap* m_sharedpixmap; + void enableExports(); + int m_timeout; +}; // The confirmation dialog class KSMShutdownDlg : public TQDialog @@ -104,6 +133,21 @@ private: bool m_lockOnResume; }; +// The shutdown-in-progress dialog +class KSMShutdownIPDlg : public TQDialog +{ + Q_OBJECT + +public: + static void showShutdownIP(); + +protected: + ~KSMShutdownIPDlg(); + +private: + KSMShutdownIPDlg( TQWidget* parent ); +}; + class KSMDelayedPushButton : public KPushButton { Q_OBJECT diff --git a/kwin/kcmkwin/kwinoptions/windows.cpp b/kwin/kcmkwin/kwinoptions/windows.cpp index 6b3e68fc1..30d0791e8 100644 --- a/kwin/kcmkwin/kwinoptions/windows.cpp +++ b/kwin/kcmkwin/kwinoptions/windows.cpp @@ -1518,11 +1518,11 @@ void KTranslucencyConfig::load( void ) config->setGroup( "Translucency" ); activeWindowTransparency->setChecked(config->readBoolEntry("TranslucentActiveWindows",false)); - inactiveWindowTransparency->setChecked(config->readBoolEntry("TranslucentInactiveWindows",true)); + inactiveWindowTransparency->setChecked(config->readBoolEntry("TranslucentInactiveWindows",false)); movingWindowTransparency->setChecked(config->readBoolEntry("TranslucentMovingWindows",false)); removeShadowsOnMove->setChecked(config->readBoolEntry("RemoveShadowsOnMove",false)); removeShadowsOnResize->setChecked(config->readBoolEntry("RemoveShadowsOnResize",false)); - dockWindowTransparency->setChecked(config->readBoolEntry("TranslucentDocks",true)); + dockWindowTransparency->setChecked(config->readBoolEntry("TranslucentDocks",false)); keepAboveAsActive->setChecked(config->readBoolEntry("TreatKeepAboveAsActive",true)); onlyDecoTranslucent->setChecked(config->readBoolEntry("OnlyDecoTranslucent",false)); @@ -1547,7 +1547,7 @@ void KTranslucencyConfig::load( void ) disableARGB->setChecked(conf_.readBoolEntry("DisableARGB",FALSE)); - useShadows->setChecked(conf_.readEntry("Compmode","CompClientShadows").compare("CompClientShadows") == 0); + useShadows->setChecked(conf_.readEntry("Compmode","").compare("CompClientShadows") == 0); shadowTopOffset->setValue(-1*(conf_.readNumEntry("ShadowOffsetY",-80))); shadowLeftOffset->setValue(-1*(conf_.readNumEntry("ShadowOffsetX",0))); |