diff options
| author | 2006-12-18 01:34:15 +0000 | |
|---|---|---|
| committer | 2006-12-18 01:34:15 +0000 | |
| commit | c75b9f00eaeee4b8503ba662b3d7ccc9e1914096 (patch) | |
| tree | a5e7ee244fa4124588a114732c4ecbc248c7c199 /src/modules/dockwidget/trayicon.cpp | |
| parent | Switching from cvs to svn, initial import (diff) | |
| download | KVIrc-c75b9f00eaeee4b8503ba662b3d7ccc9e1914096.tar.gz KVIrc-c75b9f00eaeee4b8503ba662b3d7ccc9e1914096.tar.bz2 KVIrc-c75b9f00eaeee4b8503ba662b3d7ccc9e1914096.zip | |
Switching from cvs to svn, initial import
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@14 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/dockwidget/trayicon.cpp')
| -rw-r--r-- | src/modules/dockwidget/trayicon.cpp | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/src/modules/dockwidget/trayicon.cpp b/src/modules/dockwidget/trayicon.cpp new file mode 100644 index 000000000..de8b590d2 --- /dev/null +++ b/src/modules/dockwidget/trayicon.cpp @@ -0,0 +1,292 @@ +/* + * trayicon.cpp - system-independent trayicon class (adapted from Qt example) + * Copyright (C) 2003 Justin Karneges + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "trayicon.h" +#include "qpopupmenu.h" + +/*! + \class TrayIcon qtrayicon.h + \brief The TrayIcon class implements an entry in the system tray. +*/ + +/*! + Creates a TrayIcon object. \a parent and \a name are propagated + to the QObject constructor. The icon is initially invisible. + + \sa show +*/ +TrayIcon::TrayIcon( QObject *parent, const char *name ) +: QObject(parent, name), pop(0), d(0) +{ + v_isWMDock = FALSE; +} + +/*! + Creates a TrayIcon object displaying \a icon and \a tooltip, and opening + \a popup when clicked with the right mousebutton. \a parent and \a name are + propagated to the QObject constructor. The icon is initially invisible. + + \sa show +*/ +TrayIcon::TrayIcon( const QPixmap &icon, const QString &tooltip, QPopupMenu *popup, QObject *parent, const char *name ) +: QObject(parent, name), pop(popup), pm(icon), tip(tooltip), d(0) +{ + v_isWMDock = FALSE; + + if ( !pm.width() || !pm.height() ) + pm = QPixmap( 16, 16 ); +} + +/*! + Removes the icon from the system tray and frees all allocated resources. +*/ +TrayIcon::~TrayIcon() +{ + sysRemove(); +} + +/*! + Informs the trayicon that the notification owner has probably been changed; + and that it should attempt to register or re-register. +*/ +void TrayIcon::newTrayOwner() +{ + // detach ourself from any existing notification area. + hide(); + // show ourself on the new notification area + show(); +} + + +/*! + Sets the context menu to \a popup. The context menu will pop up when the + user clicks the system tray entry with the right mouse button. +*/ +void TrayIcon::setPopup( QPopupMenu* popup ) +{ + pop = popup; +} + +/*! + Returns the current popup menu. + + \sa setPopup +*/ +QPopupMenu* TrayIcon::popup() const +{ + return pop; +} + +/*! + \property TrayIcon::icon + \brief the system tray icon. +*/ +void TrayIcon::setIcon( const QPixmap &icon ) +{ + //if(!popup()) { + // tip = ""; + //} + + pm = icon; + sysUpdateIcon(); +} + +QPixmap TrayIcon::icon() const +{ + return pm; +} + +/*! + \property TrayIcon::toolTip + \brief the tooltip for the system tray entry + + On some systems, the tooltip's length is limited and will be truncated as necessary. +*/ +void TrayIcon::setToolTip( const QString &tooltip ) +{ + tip = tooltip; + sysUpdateToolTip(); +} + +QString TrayIcon::toolTip() const +{ + return tip; +} + +/*! + Shows the icon in the system tray. + + \sa hide +*/ +void TrayIcon::show() +{ + sysInstall(); +} + +/*! + Hides the system tray entry. +*/ +void TrayIcon::hide() +{ + sysRemove(); +} + +/*! + \reimp +*/ +bool TrayIcon::event( QEvent *e ) +{ + switch ( e->type() ) { + case QEvent::MouseMove: + mouseMoveEvent( (QMouseEvent*)e ); + break; + + case QEvent::MouseButtonPress: + mousePressEvent( (QMouseEvent*)e ); + break; + + case QEvent::MouseButtonRelease: + mouseReleaseEvent( (QMouseEvent*)e ); + break; + + case QEvent::MouseButtonDblClick: + mouseDoubleClickEvent( (QMouseEvent*)e ); + break; + default: + return QObject::event( e ); + } + + return TRUE; +} + +/*! + This event handler can be reimplemented in a subclass to receive + mouse move events for the system tray entry. + + \sa mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), QMouseEvent +*/ +void TrayIcon::mouseMoveEvent( QMouseEvent *e ) +{ + e->ignore(); +} + +/*! + This event handler can be reimplemented in a subclass to receive + mouse press events for the system tray entry. + + \sa mouseReleaseEvent(), mouseDoubleClickEvent(), + mouseMoveEvent(), QMouseEvent +*/ +void TrayIcon::mousePressEvent( QMouseEvent *e ) +{ +#ifndef Q_WS_WIN +// This is for X11, menus appear on mouse press +// I'm not sure whether Mac should be here or below.. Somebody check? + switch ( e->button() ) { + case RightButton: + if ( pop ) { + pop->popup( e->globalPos() ); + e->accept(); + } + break; + case LeftButton: + case MidButton: + emit clicked( e->globalPos(), e->button() ); + break; + default: + break; + } +#endif + e->ignore(); +} + +/*! + This event handler can be reimplemented in a subclass to receive + mouse release events for the system tray entry. + + The default implementations opens the context menu when the entry + has been clicked with the right mouse button. + + \sa setPopup(), mousePressEvent(), mouseDoubleClickEvent(), + mouseMoveEvent(), QMouseEvent +*/ +void TrayIcon::mouseReleaseEvent( QMouseEvent *e ) +{ +#ifdef Q_WS_WIN +// This is for Windows, where menus appear on mouse release + switch ( e->button() ) { + case RightButton: + if ( pop ) { + // Necessary to make keyboard focus + // and menu closing work on Windows. + pop->setActiveWindow(); + pop->popup( e->globalPos() ); + pop->setActiveWindow(); + e->accept(); + } + break; + case LeftButton: + case MidButton: + emit clicked( e->globalPos(), e->button() ); + break; + default: + break; + } +#endif + e->ignore(); +} + +/*! + This event handler can be reimplemented in a subclass to receive + mouse double click events for the system tray entry. + + Note that the system tray entry gets a mousePressEvent() and a + mouseReleaseEvent() before the mouseDoubleClickEvent(). + + \sa mousePressEvent(), mouseReleaseEvent(), + mouseMoveEvent(), QMouseEvent +*/ +void TrayIcon::mouseDoubleClickEvent( QMouseEvent *e ) +{ + if ( e->button() == LeftButton ) + emit doubleClicked( e->globalPos() ); + e->accept(); +} + +/*! + \fn void TrayIcon::clicked( const QPoint &p ) + + This signal is emitted when the user clicks the system tray icon + with the left mouse button, with \a p being the global mouse position + at that moment. +*/ + +/*! + \fn void TrayIcon::doubleClicked( const QPoint &p ) + + This signal is emitted when the user double clicks the system tray + icon with the left mouse button, with \a p being the global mouse position + at that moment. +*/ + +void TrayIcon::gotCloseEvent() +{ + closed(); +} |
