#pragma once #include #include #include #include #include #include "bar.hpp" #include "modules/sni/item.hpp" namespace waybar::modules::SNI { class Host { public: Host(std::size_t id, const Json::Value&, const Bar&, const std::vector&, const std::function&)>&, const std::function&)>&, const std::function&, const std::function&); ~Host(); void checkIgnoreList(const std::vector& ignore_list, const std::function&)>& on_remove); void reorderItems(); private: void busAcquired(const Glib::RefPtr&, const Glib::ustring&); void nameAppeared(const Glib::RefPtr&, const Glib::ustring&, const Glib::ustring&); void nameVanished(const Glib::RefPtr&, const Glib::ustring&); static void proxyReady(GObject*, GAsyncResult*, gpointer); static void registerHost(GObject*, GAsyncResult*, gpointer); static void itemRegistered(SnWatcher*, const gchar*, gpointer); static void itemUnregistered(SnWatcher*, const gchar*, gpointer); void itemReady(Item&); void itemInvalidated(Item&); void removeItem(std::vector>::iterator); void clearItems(); static std::tuple getBusNameAndObjectPath(const std::string&); void addRegisteredItem(const std::string& service); std::vector> items_; const std::string bus_name_; const std::string object_path_; std::size_t bus_name_id_; std::size_t watcher_id_; GCancellable* cancellable_ = nullptr; SnWatcher* watcher_ = nullptr; sigc::connection retry_connection_; unsigned retry_count_ = 0; const Json::Value& config_; const Bar& bar_; const std::vector ignore_list_; const std::function&)> on_add_; const std::function&)> on_remove_; // Re-applies the configured ordering to the already-added tray widgets. This // must NOT re-run the add path (which would re-parent widgets and reconnect // signals); it only reorders existing children. const std::function on_reorder_; ItemOrderMap orders_; const std::function on_update_; }; } // namespace waybar::modules::SNI