qa: Remove lots of superfluous semicolons
[quassel.git] / src / qtui / statusnotifieritem.h
1 /***************************************************************************
2  *   Copyright (C) 2005-2018 by the Quassel Project                        *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This contains code from KStatusNotifierItem, part of the KDE libs     *
6  *   Copyright (C) 2009 Marco Martin <notmart@gmail.com>                   *
7  *                                                                         *
8  *   This file is free software; you can redistribute it and/or modify     *
9  *   it under the terms of the GNU Library General Public License (LGPL)   *
10  *   as published by the Free Software Foundation; either version 2 of the *
11  *   License, or (at your option) any later version.                       *
12  *                                                                         *
13  *   This program is distributed in the hope that it will be useful,       *
14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
16  *   GNU General Public License for more details.                          *
17  *                                                                         *
18  *   You should have received a copy of the GNU General Public License     *
19  *   along with this program; if not, write to the                         *
20  *   Free Software Foundation, Inc.,                                       *
21  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
22  ***************************************************************************/
23
24 #pragma once
25
26 #ifdef HAVE_DBUS
27
28 #include <QDBusError>
29 #include <QHash>
30 #include <QString>
31 #include <QTemporaryDir>
32
33 #include "notificationsclient.h"
34 #include "systemtray.h"
35 #include "statusnotifierwatcher.h"
36
37 #ifdef QT_NO_SYSTEMTRAYICON
38 #  define StatusNotifierItemParent SystemTray
39 #else
40 #  define StatusNotifierItemParent LegacySystemTray
41 #  include "legacysystemtray.h"
42 #endif
43
44 class QDBusServiceWatcher;
45
46 class StatusNotifierItemDBus;
47
48 class StatusNotifierItem : public StatusNotifierItemParent
49 {
50     Q_OBJECT
51
52 public:
53     explicit StatusNotifierItem(QWidget *parent);
54
55     bool isSystemTrayAvailable() const override;
56
57 public slots:
58     void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int msTimeout = 10000, uint notificationId = 0) override;
59     void closeMessage(uint notificationId) override;
60
61 protected:
62     QString title() const;
63     QString iconName() const;
64     QString attentionIconName() const;
65     QString toolTipIconName() const;
66     QString iconThemePath() const;
67     QString menuObjectPath() const;
68
69     bool eventFilter(QObject *watched, QEvent *event) override;
70
71 private slots:
72     void activated(const QPoint &pos);
73     void serviceChange(const QString &name, const QString &oldOwner, const QString &newOwner);
74     void checkForRegisteredHosts();
75     void onDBusError(const QDBusError &error);
76
77     void notificationClosed(uint id, uint reason);
78     void notificationInvoked(uint id, const QString &action);
79
80     void refreshIcons();
81
82     void onModeChanged(Mode mode);
83     void onStateChanged(State state);
84     void onVisibilityChanged(bool isVisible);
85
86 private:
87     void registerToWatcher();
88
89     QDBusServiceWatcher *_serviceWatcher{nullptr};
90     StatusNotifierItemDBus *_statusNotifierItemDBus{nullptr};
91     org::kde::StatusNotifierWatcher *_statusNotifierWatcher{nullptr};
92     org::freedesktop::Notifications *_notificationsClient{nullptr};
93     bool _notificationsClientSupportsMarkup{false};
94     bool _notificationsClientSupportsActions{false};
95     quint32 _lastNotificationsDBusId{0};
96     QHash<uint, uint> _notificationsIdMap; ///< Maps our own notification ID to the D-Bus one
97
98     QString _iconThemePath;
99     QString _menuObjectPath;
100
101     QTemporaryDir _iconThemeDir;
102
103     friend class StatusNotifierItemDBus;
104 };
105
106 #endif /* HAVE_DBUS */