X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsystemtray.cpp;h=afa7964f602b9c372fc399a5370903a009bc5684;hp=912582306722827500dad89449c2ec78816274df;hb=5ba28fb36a747bd9a2c05a58f0533d1e38c2a0de;hpb=2e9492d9ef198bde37da1f858602ab9624c0a12a diff --git a/src/qtui/systemtray.cpp b/src/qtui/systemtray.cpp index 91258230..afa7964f 100644 --- a/src/qtui/systemtray.cpp +++ b/src/qtui/systemtray.cpp @@ -17,16 +17,19 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include #include #include "systemtray.h" +#include "action.h" #include "actioncollection.h" #include "client.h" #include "iconloader.h" #include "qtui.h" #ifdef HAVE_KDE +# include # include # include #endif @@ -35,7 +38,6 @@ SystemTray::SystemTray(QWidget *parent) : QObject(parent), _mode(Invalid), _state(Passive), - _inhibitActivation(false), _passiveIcon(DesktopIcon("quassel_inactive")), _activeIcon(DesktopIcon("quassel")), _needsAttentionIcon(DesktopIcon("quassel_message")), @@ -43,8 +45,6 @@ SystemTray::SystemTray(QWidget *parent) _associatedWidget(parent) { Q_ASSERT(parent); - - qApp->installEventFilter(this); } SystemTray::~SystemTray() { @@ -55,31 +55,53 @@ QWidget *SystemTray::associatedWidget() const { return _associatedWidget; } -void SystemTray::setTrayMenu(QMenu *menu) { - if(menu) - _trayMenu = menu; - else - _trayMenu = new QMenu(); - +void SystemTray::init() { ActionCollection *coll = QtUi::actionCollection("General"); + _minimizeRestoreAction = new Action(tr("&Minimize"), this, this, SLOT(minimizeRestore())); + +#ifdef HAVE_KDE + KMenu *kmenu; + _trayMenu = kmenu = new KMenu(); + kmenu->addTitle(qApp->windowIcon(), "Quassel IRC"); +#else + _trayMenu = new QMenu(associatedWidget()); +#endif + + _trayMenu->setTitle("Quassel IRC"); + +#ifndef HAVE_KDE + _trayMenu->setAttribute(Qt::WA_Hover); +#endif _trayMenu->addAction(coll->action("ConnectCore")); _trayMenu->addAction(coll->action("DisconnectCore")); _trayMenu->addAction(coll->action("CoreInfo")); -#ifndef HAVE_KDE _trayMenu->addSeparator(); + _trayMenu->addAction(_minimizeRestoreAction); _trayMenu->addAction(coll->action("Quit")); -#endif /* HAVE_KDE */ + + connect(_trayMenu, SIGNAL(aboutToShow()), SLOT(trayMenuAboutToShow())); +} + +void SystemTray::trayMenuAboutToShow() { + if(GraphicalUi::isMainWidgetVisible()) + _minimizeRestoreAction->setText(tr("&Minimize")); + else + _minimizeRestoreAction->setText(tr("&Restore")); } void SystemTray::setMode(Mode mode_) { if(mode_ != _mode) { _mode = mode_; - if(_mode == Legacy) { - _trayMenu->setWindowFlags(Qt::Popup); - } else { - _trayMenu->setWindowFlags(Qt::Window); +#ifdef HAVE_KDE + if(_trayMenu) { + if(_mode == Legacy) { + _trayMenu->setWindowFlags(Qt::Popup); + } else { + _trayMenu->setWindowFlags(Qt::Window); + } } +#endif } } @@ -122,25 +144,18 @@ void SystemTray::setToolTip(const QString &title, const QString &subtitle) { emit toolTipChanged(title, subtitle); } -void SystemTray::showMessage(const QString &title, const QString &message, MessageIcon icon, int millisecondsTimeoutHint) { +void SystemTray::showMessage(const QString &title, const QString &message, MessageIcon icon, int millisecondsTimeoutHint, uint id) { Q_UNUSED(title) Q_UNUSED(message) Q_UNUSED(icon) Q_UNUSED(millisecondsTimeoutHint) + Q_UNUSED(id) } void SystemTray::activate(SystemTray::ActivationReason reason) { - emit activated(reason); - - if(reason == Trigger && !isActivationInhibited()) { - GraphicalUi::toggleMainWidget(); - } } -bool SystemTray::eventFilter(QObject *obj, QEvent *event) { - if(event->type() == QEvent::MouseMove || event->type() == QEvent::MouseButtonRelease) { - _inhibitActivation = false; - } - return QObject::eventFilter(obj, event); +void SystemTray::minimizeRestore() { + GraphicalUi::toggleMainWidget(); }