add tray icons

This commit is contained in:
2025-12-10 01:35:39 +01:00
parent 7bd4c72763
commit 70a271fb8b
6 changed files with 677 additions and 8 deletions

View File

@@ -1,7 +1,9 @@
#pragma once
#include <gdkmm/memorytexture.h>
#include <giomm/actiongroup.h>
#include <giomm/dbusconnection.h>
#include <giomm/menumodel.h>
#include <giomm/init.h>
#include <glibmm/bytes.h>
#include <glibmm/refptr.h>
@@ -10,6 +12,7 @@
#include <gio/gio.h>
#include <map>
#include <memory>
#include <optional>
#include <string>
#include <vector>
@@ -42,6 +45,21 @@ class TrayService
void secondaryActivate(const std::string &id, int32_t x, int32_t y);
void contextMenu(const std::string &id, int32_t x, int32_t y);
Glib::RefPtr<Gio::MenuModel> get_menu_model(const std::string &id);
Glib::RefPtr<Gio::ActionGroup> get_menu_action_group(const std::string &id);
void debug_dump_menu_layout(const std::string &id);
struct MenuNode
{
int id = 0;
std::string label;
bool enabled = true;
bool visible = true;
bool separator = false;
std::vector<MenuNode> children;
};
std::optional<MenuNode> get_menu_layout(const std::string &id);
bool activate_menu_item(const std::string &id, int itemId);
sigc::signal<void(const Item &)> &signal_item_added();
sigc::signal<void(const std::string &)> &signal_item_removed();
sigc::signal<void(const Item &)> &signal_item_updated();
@@ -52,6 +70,8 @@ class TrayService
Item publicData;
guint signalSubscriptionId = 0;
guint ownerWatchId = 0;
Glib::RefPtr<Gio::MenuModel> menuModel;
Glib::RefPtr<Gio::ActionGroup> menuActions;
};
Glib::RefPtr<Gio::DBus::Connection> m_connection;