X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fsystemtray.cpp;h=7fb36ce2f0d3fea8cf2d8ee7adf3956a8e2fe612;hb=9153dca7bd6d2ab79da09d3eff2f6d9107f1d120;hp=6b2b33cdf1ce68e8f122ae63527995c9814a6d6b;hpb=138bb708911ef06fa37859fa51bca5f47125ccdd;p=quassel.git diff --git a/src/qtui/systemtray.cpp b/src/qtui/systemtray.cpp index 6b2b33cd..7fb36ce2 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 @@ -52,31 +55,56 @@ 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())); + + 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 } } @@ -119,13 +147,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) } 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()); +}