X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsystraynotificationbackend.cpp;h=fa7b245780d9b97f39af86772b86aca7d396f3bc;hp=7a8f99309280a6ba66723428a7363bf842617e13;hb=138bb708911ef06fa37859fa51bca5f47125ccdd;hpb=e7d1bc1fa02e1233f140e4b04d99ab8f4685bce5 diff --git a/src/qtui/systraynotificationbackend.cpp b/src/qtui/systraynotificationbackend.cpp index 7a8f9930..fa7b2457 100644 --- a/src/qtui/systraynotificationbackend.cpp +++ b/src/qtui/systraynotificationbackend.cpp @@ -31,7 +31,8 @@ #include "systemtray.h" SystrayNotificationBackend::SystrayNotificationBackend(QObject *parent) - : AbstractNotificationBackend(parent) + : AbstractNotificationBackend(parent), + _blockActivation(false) { NotificationSettings notificationSettings; _showBubble = notificationSettings.value("Systray/ShowBubble", true).toBool(); @@ -43,6 +44,8 @@ SystrayNotificationBackend::SystrayNotificationBackend(QObject *parent) connect(QtUi::mainWindow()->systemTray(), SIGNAL(messageClicked()), SLOT(notificationActivated())); connect(QtUi::mainWindow()->systemTray(), SIGNAL(activated(SystemTray::ActivationReason)), SLOT(notificationActivated(SystemTray::ActivationReason))); + + QApplication::instance()->installEventFilter(this); } void SystrayNotificationBackend::notify(const Notification ¬ification) { @@ -91,10 +94,13 @@ void SystrayNotificationBackend::closeBubble() { } void SystrayNotificationBackend::notificationActivated() { - if(QtUi::mainWindow()->systemTray()->isAlerted()) { - QtUi::mainWindow()->systemTray()->setInhibitActivation(); - uint id = _notifications.count()? _notifications.last().notificationId : 0; - emit activated(id); + if(!_blockActivation) { + if(QtUi::mainWindow()->systemTray()->isAlerted()) { + _blockActivation = true; // prevent double activation because both tray icon and bubble might send a signal + uint id = _notifications.count()? _notifications.last().notificationId : 0; + emit activated(id); + } else + GraphicalUi::toggleMainWidget(); } } @@ -104,6 +110,14 @@ void SystrayNotificationBackend::notificationActivated(SystemTray::ActivationRea } } +// moving the mouse or releasing the button means that we're not dealing with a double activation +bool SystrayNotificationBackend::eventFilter(QObject *obj, QEvent *event) { + if(event->type() == QEvent::MouseMove || event->type() == QEvent::MouseButtonRelease) { + _blockActivation = false; + } + return AbstractNotificationBackend::eventFilter(obj, event); +} + void SystrayNotificationBackend::showBubbleChanged(const QVariant &v) { _showBubble = v.toBool(); }