summaryrefslogtreecommitdiffstats
path: root/kdeui/kwindowinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/kwindowinfo.cpp')
-rw-r--r--kdeui/kwindowinfo.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/kdeui/kwindowinfo.cpp b/kdeui/kwindowinfo.cpp
new file mode 100644
index 000000000..263deae84
--- /dev/null
+++ b/kdeui/kwindowinfo.cpp
@@ -0,0 +1,178 @@
+/*
+ * copyright : (C) 2001-2002 by Richard Moore
+ * License : This file is released under the terms of the LGPL, version 2.
+ * email : rich@kde.org
+ */
+
+#include <qobjectlist.h>
+#include <qpixmap.h>
+#include <qtimer.h>
+#include <qtooltip.h>
+#include <ksystemtray.h>
+#include <kwin.h>
+
+#include "kwindowinfo.h"
+#include "kwindowinfo.moc"
+
+static const int UNSPECIFIED_TIMEOUT = -1;
+static const int DEFAULT_MESSAGE_TIMEOUT = 3000;
+
+KWindowInfo::KWindowInfo( QWidget *parent, const char *name )
+ : QObject( parent, name ), win( parent ), autoDel( false )
+{
+}
+
+KWindowInfo::~KWindowInfo()
+{
+}
+
+void KWindowInfo::showMessage( QWidget *window, const QString &text, int timeout )
+{
+ KWindowInfo *info = new KWindowInfo( window );
+ info->autoDel = true;
+ info->message( text, timeout );
+ if ( timeout == 0 )
+ delete info;
+}
+
+void KWindowInfo::showMessage( QWidget *window, const QString &text, const QPixmap &pix, int timeout )
+{
+ KWindowInfo *info = new KWindowInfo( window );
+ info->autoDel = true;
+ info->message( text, pix, timeout );
+}
+
+void KWindowInfo::message( const QString &text )
+{
+ message( text, QPixmap(), UNSPECIFIED_TIMEOUT );
+}
+
+void KWindowInfo::message( const QString &text, const QPixmap &pix )
+{
+ message( text, pix, UNSPECIFIED_TIMEOUT );
+}
+
+void KWindowInfo::message( const QString &text, int timeout )
+{
+ message( text, QPixmap(), timeout );
+}
+
+void KWindowInfo::message( const QString &text, const QPixmap &pix, int timeout )
+{
+ if ( timeout != 0 )
+ save();
+
+ display( text, pix );
+
+ if ( timeout < 0 )
+ timeout = DEFAULT_MESSAGE_TIMEOUT;
+ if ( timeout != 0 )
+ QTimer::singleShot( timeout, this, SLOT( restore() ) );
+}
+
+void KWindowInfo::permanent( const QString &text )
+{
+#ifdef Q_WS_X11
+ oldMiniIcon = KWin::icon( win->winId(), 16, 16, true );
+ oldIcon = KWin::icon( win->winId(), 34, 34, false );
+ if ( oldIcon.isNull() )
+ oldIcon = KWin::icon( win->winId(), 32, 32, true );
+#endif
+
+ permanent( text, oldIcon );
+}
+
+void KWindowInfo::permanent( const QString &text, const QPixmap &pix )
+{
+ if ( !oldText.isNull() ) {
+ QObjectList *l = queryList( "QTimer" );
+ QObjectListIt it( *l );
+ QObject *obj;
+
+ while ( (obj = it.current()) != 0 ) {
+ ++it;
+ delete obj;
+ }
+ delete l;
+ }
+
+ oldText = QString::null;
+ display( text, pix );
+}
+
+void KWindowInfo::display( const QString &text, const QPixmap &pix )
+{
+ QPixmap icon;
+ if ( pix.isNull() )
+ icon.load( "bell.png" );
+ else
+ icon = pix;
+
+ if ( win->inherits( "KSystemTray" ) ) {
+ KSystemTray *tray = static_cast<KSystemTray *>( win );
+ tray->setPixmap( icon );
+ QToolTip::add( tray, text );
+ return;
+ }
+
+ win->setCaption( text );
+ win->setIcon( icon );
+#ifdef Q_WS_X11
+ KWin::setIcons( win->winId(), icon, icon );
+#endif
+}
+
+void KWindowInfo::save()
+{
+ if ( !oldText.isNull() )
+ return;
+
+ if ( win->inherits( "KSystemTray" ) ) {
+ KSystemTray *tray = static_cast<KSystemTray *>( win );
+ oldIcon = *(tray->pixmap());
+ oldText = QToolTip::textFor( tray );
+ return;
+ }
+
+ oldText = win->caption();
+#ifdef Q_WS_X11
+ oldMiniIcon = KWin::icon( win->winId(), 16, 16, true );
+ oldIcon = KWin::icon( win->winId(), 34, 34, false );
+ if ( oldIcon.isNull() )
+ oldIcon = KWin::icon( win->winId(), 32, 32, true );
+#endif
+
+ if ( oldIcon.isNull() ) {
+ const QPixmap *px = win->icon();
+ if ( px )
+ oldIcon = *px;
+ else
+ oldIcon.resize( 0, 0 );
+ }
+}
+
+void KWindowInfo::restore()
+{
+ if ( win->inherits( "KSystemTray" ) ) {
+ KSystemTray *tray = static_cast<KSystemTray *>( win );
+ tray->setPixmap( oldIcon );
+ QToolTip::add( tray, oldText );
+ oldText = QString::null;
+ return;
+ }
+
+ win->setIcon( oldIcon );
+#ifdef Q_WS_X11
+ KWin::setIcons( win->winId(), oldIcon, oldMiniIcon );
+#endif
+ win->setCaption( oldText );
+ oldText = QString::null;
+
+ if ( autoDel )
+ delete this;
+}
+
+
+
+
+