summaryrefslogtreecommitdiffstats
path: root/ksmserver/shutdowndlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksmserver/shutdowndlg.cpp')
-rw-r--r--ksmserver/shutdowndlg.cpp153
1 files changed, 152 insertions, 1 deletions
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)