service/tray: mostly complete StatusNotifierItem implementation

Notably missing dbusmenu which makes it actually useful.
This commit is contained in:
outfoxxed 2024-04-06 02:19:40 -07:00
parent d47a7f2cff
commit 6214ac1002
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
25 changed files with 1321 additions and 4 deletions

View file

@ -0,0 +1,49 @@
#pragma once
#include <qcontainerfwd.h>
#include <qdbusservicewatcher.h>
#include <qhash.h>
#include <qlist.h>
#include <qloggingcategory.h>
#include <qobject.h>
#include <qtmetamacros.h>
#include "dbus_watcher_interface.h"
#include "item.hpp"
Q_DECLARE_LOGGING_CATEGORY(logStatusNotifierHost);
namespace qs::service::sni {
class StatusNotifierHost: public QObject {
Q_OBJECT;
public:
explicit StatusNotifierHost(QObject* parent = nullptr);
void connectToWatcher();
[[nodiscard]] QList<StatusNotifierItem*> items() const;
[[nodiscard]] StatusNotifierItem* itemByService(const QString& service) const;
static StatusNotifierHost* instance();
signals:
void itemRegistered(StatusNotifierItem* item);
void itemReady(StatusNotifierItem* item);
void itemUnregistered(StatusNotifierItem* item);
private slots:
void onWatcherRegistered();
void onWatcherUnregistered();
void onItemRegistered(const QString& item);
void onItemUnregistered(const QString& item);
void onItemReady();
private:
QString hostId;
QDBusServiceWatcher serviceWatcher;
DBusStatusNotifierWatcher* watcher = nullptr;
QHash<QString, StatusNotifierItem*> mItems;
};
} // namespace qs::service::sni