X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsystemtray.cpp;h=03d9629a00187718764828d2fff5793324d22642;hp=9944823e1301ee4daaafee91039c473c1b3a64b6;hb=c3f1b84a9d98b886ada6aff962eadae1a6000b6d;hpb=e7d1bc1fa02e1233f140e4b04d99ab8f4685bce5 diff --git a/src/qtui/systemtray.cpp b/src/qtui/systemtray.cpp index 9944823e..03d9629a 100644 --- a/src/qtui/systemtray.cpp +++ b/src/qtui/systemtray.cpp @@ -17,59 +17,95 @@ * 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" -#include "qtuisettings.h" -SystemTray::SystemTray(QObject *parent) +#ifdef HAVE_KDE +# include +# include +# include +#endif + +SystemTray::SystemTray(QWidget *parent) : QObject(parent), _mode(Invalid), _state(Passive), - _inhibitActivation(false), + _shouldBeVisible(true), _passiveIcon(DesktopIcon("quassel_inactive")), _activeIcon(DesktopIcon("quassel")), _needsAttentionIcon(DesktopIcon("quassel_message")), - _trayMenu(0) + _trayMenu(0), + _associatedWidget(parent) { - qApp->installEventFilter(this); + Q_ASSERT(parent); } SystemTray::~SystemTray() { _trayMenu->deleteLater(); } -void SystemTray::setTrayMenu(QMenu *menu) { - if(menu) - _trayMenu = menu; - else - _trayMenu = new QMenu(); +QWidget *SystemTray::associatedWidget() const { + return _associatedWidget; +} +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())); + + NotificationSettings notificationSettings; + notificationSettings.initAndNotify("Systray/Animate", this, SLOT(enableAnimationChanged(QVariant)), true); +} + +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 } } @@ -103,7 +139,7 @@ void SystemTray::setAlert(bool alerted) { } void SystemTray::setVisible(bool visible) { - Q_UNUSED(visible) + _shouldBeVisible = visible; } void SystemTray::setToolTip(const QString &title, const QString &subtitle) { @@ -112,17 +148,23 @@ 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) } -bool SystemTray::eventFilter(QObject *obj, QEvent *event) { - Q_UNUSED(obj); - if(event->type() == QEvent::MouseButtonRelease) { - _inhibitActivation = false; - } - return false; +void SystemTray::activate(SystemTray::ActivationReason reason) { + emit activated(reason); +} + +void SystemTray::minimizeRestore() { + GraphicalUi::toggleMainWidget(); +} + +void SystemTray::enableAnimationChanged(const QVariant &v) { + _animationEnabled = v.toBool(); + emit animationEnabledChanged(v.toBool()); }