Check if the notifications client supports actions
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 5 Sep 2010 10:04:37 +0000 (12:04 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 5 Sep 2010 10:10:31 +0000 (12:10 +0200)
Ubuntu's notification system doesn't support actions and shows fugly popups
in case apps still define them. So we check for the capability and disable actions
if they're not supported.

Needless to mention that the Quassel team heartily recommends using a notification daemon
that is action-enabled for added value.

src/qtui/statusnotifieritem.cpp
src/qtui/statusnotifieritem.h

index 2a58db8..ce3d3d8 100644 (file)
@@ -105,6 +105,7 @@ void StatusNotifierItem::init() {
   if(_notificationsClient->isValid()) {
     QStringList desktopCapabilities = _notificationsClient->GetCapabilities();
     _notificationsClientSupportsMarkup = desktopCapabilities.contains("body-markup");
   if(_notificationsClient->isValid()) {
     QStringList desktopCapabilities = _notificationsClient->GetCapabilities();
     _notificationsClientSupportsMarkup = desktopCapabilities.contains("body-markup");
+    _notificationsClientSupportsActions = desktopCapabilities.contains("actions");
   }
 
   StatusNotifierItemParent::init();
   }
 
   StatusNotifierItemParent::init();
@@ -274,7 +275,9 @@ void StatusNotifierItem::showMessage(const QString &title, const QString &messag
     if(_notificationsClientSupportsMarkup)
       message = Qt::escape(message);
 
     if(_notificationsClientSupportsMarkup)
       message = Qt::escape(message);
 
-    QStringList actions = QStringList() << "activate" << "View";
+    QStringList actions;
+    if(_notificationsClientSupportsActions)
+      actions << "activate" << "View";
 
     // we always queue notifications right now
     QDBusReply<uint> reply = _notificationsClient->Notify(title, 0, "quassel", title, message, actions, QVariantMap(), timeout);
 
     // we always queue notifications right now
     QDBusReply<uint> reply = _notificationsClient->Notify(title, 0, "quassel", title, message, actions, QVariantMap(), timeout);
index d8489d8..016f451 100644 (file)
@@ -86,6 +86,7 @@ private:
   org::kde::StatusNotifierWatcher *_statusNotifierWatcher;
   org::freedesktop::Notifications *_notificationsClient;
   bool _notificationsClientSupportsMarkup;
   org::kde::StatusNotifierWatcher *_statusNotifierWatcher;
   org::freedesktop::Notifications *_notificationsClient;
   bool _notificationsClientSupportsMarkup;
+  bool _notificationsClientSupportsActions;
   quint32 _lastNotificationsDBusId;
   QHash<uint, uint> _notificationsIdMap; ///< Maps our own notification ID to the D-Bus one
 
   quint32 _lastNotificationsDBusId;
   QHash<uint, uint> _notificationsIdMap; ///< Maps our own notification ID to the D-Bus one