diff options
Diffstat (limited to 'ksmserver/shutdowndlg.cpp')
| -rw-r--r-- | ksmserver/shutdowndlg.cpp | 153 | 
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) | 
