File indexing completed on 2024-05-12 17:08:50

0001 /*
0002     SPDX-FileCopyrightText: 2009 Marco Martin <notmart@gmail.com>
0003     SPDX-FileCopyrightText: 2009 Matthieu Gallien <matthieu_gallien@yahoo.fr>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include "statusnotifierwatcher_interface.h"
0011 #include <QDBusConnection>
0012 
0013 class StatusNotifierItemSource;
0014 
0015 // Define our plasma Runner
0016 class StatusNotifierItemHost : public QObject
0017 {
0018     Q_OBJECT
0019 
0020 public:
0021     StatusNotifierItemHost();
0022     virtual ~StatusNotifierItemHost();
0023 
0024     static StatusNotifierItemHost *self();
0025 
0026     const QList<QString> services() const;
0027     StatusNotifierItemSource *itemForService(const QString service);
0028 
0029 Q_SIGNALS:
0030     void itemAdded(const QString &service);
0031     void itemRemoved(const QString &service);
0032 
0033 private Q_SLOTS:
0034     void serviceChange(const QString &name, const QString &oldOwner, const QString &newOwner);
0035     void registerWatcher(const QString &service);
0036     void unregisterWatcher(const QString &service);
0037     void serviceRegistered(const QString &service);
0038     void serviceUnregistered(const QString &service);
0039 
0040 private:
0041     void init();
0042     void removeAllSNIServices();
0043     void addSNIService(const QString &service);
0044     void removeSNIService(const QString &service);
0045     int indexOfItem(const QString &service) const;
0046 
0047     org::kde::StatusNotifierWatcher *m_statusNotifierWatcher;
0048     QString m_serviceName;
0049     static const int s_protocolVersion = 0;
0050     QHash<QString, StatusNotifierItemSource *> m_sniServices;
0051 };