diff --git a/include/modules/sni/tray.hpp b/include/modules/sni/tray.hpp index 5f12d7f21..794431179 100644 --- a/include/modules/sni/tray.hpp +++ b/include/modules/sni/tray.hpp @@ -25,6 +25,7 @@ class Tray : public AModule { Gtk::Box box_; SNI::Watcher::singleton watcher_; SNI::Host host_; + std::vector items_; }; } // namespace waybar::modules::SNI diff --git a/src/modules/sni/tray.cpp b/src/modules/sni/tray.cpp index 34a3c05f6..fddeae098 100644 --- a/src/modules/sni/tray.cpp +++ b/src/modules/sni/tray.cpp @@ -39,22 +39,23 @@ void Tray::onAdd(std::unique_ptr& item) { } else { box_.pack_start(item->event_box); } + items_.push_back(item.get()); dp.emit(); } void Tray::onRemove(std::unique_ptr& item) { box_.remove(item->event_box); + items_.erase(std::remove(items._begin(), items_.end(), item.get()), items_.end()); dp.emit(); } auto Tray::update() -> void { // Show tray only when items are available - std::vector children = box_.get_children(); if (show_passive_) { - event_box_.set_visible(!children.empty()); + event_box_.set_visible(!items_.empty()); } else { - event_box_.set_visible(!std::all_of(children.begin(), children.end(), [](Gtk::Widget* child) { - return child->get_style_context()->has_class("passive"); + event_box_.set_visible(!std::all_of(items_.begin(), items_.end(), [](Item* item) { + return item->event_box.get_style_context()->has_class("passive"); })); }