Check if the notifications client supports actions
[quassel.git] / src / qtui / statusnotifieritem.h
index 2efbefd..016f451 100644 (file)
@@ -5,10 +5,10 @@
  *   This contains code from KStatusNotifierItem, part of the KDE libs     *
  *   Copyright (C) 2009 Marco Martin <notmart@gmail.com>                   *
  *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) version 3.                                           *
+ *   This file is free software; you can redistribute it and/or modify     *
+ *   it under the terms of the GNU Library General Public License (LGPL)   *
+ *   as published by the Free Software Foundation; either version 2 of the *
+ *   License, or (at your option) any later version.                       *
  *                                                                         *
  *   This program is distributed in the hope that it will be useful,       *
  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
@@ -26,6 +26,7 @@
 
 #ifdef HAVE_DBUS
 
+#include "notificationsclient.h"
 #include "systemtray.h"
 #include "statusnotifierwatcher.h"
 
@@ -45,8 +46,14 @@ public:
   explicit StatusNotifierItem(QWidget *parent);
   virtual ~StatusNotifierItem();
 
+  virtual bool isSystemTrayAvailable() const;
+  virtual bool isVisible() const;
+
 public slots:
   virtual void setState(State state);
+  virtual void setVisible(bool visible);
+  virtual void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int msTimeout = 10000, uint notificationId = 0);
+  virtual void closeMessage(uint notificationId);
 
 protected:
   virtual void init();
@@ -56,21 +63,35 @@ protected:
   QString iconName() const;
   QString attentionIconName() const;
   QString toolTipIconName() const;
+  QString iconThemePath() const;
+  QString menuObjectPath() const;
 
   virtual bool eventFilter(QObject *watched, QEvent *event);
 
 private slots:
   void activated(const QPoint &pos);
   void serviceChange(const QString& name, const QString& oldOwner, const QString& newOwner);
+  void checkForRegisteredHosts();
+
+  void notificationClosed(uint id, uint reason);
+  void notificationInvoked(uint id, const QString &action);
 
 private:
   void registerToDaemon();
 
   static const int _protocolVersion;
+  static const QString _statusNotifierWatcherServiceName;
   StatusNotifierItemDBus *_statusNotifierItemDBus;
 
   org::kde::StatusNotifierWatcher *_statusNotifierWatcher;
-  //org::freedesktop::Notifications *_notificationsClient;
+  org::freedesktop::Notifications *_notificationsClient;
+  bool _notificationsClientSupportsMarkup;
+  bool _notificationsClientSupportsActions;
+  quint32 _lastNotificationsDBusId;
+  QHash<uint, uint> _notificationsIdMap; ///< Maps our own notification ID to the D-Bus one
+
+  QString _iconThemePath;
+  QString _menuObjectPath;
 
   friend class StatusNotifierItemDBus;
 };