fix(tray): fix visibility of Passive items

`show_all` call from `Tray::update` attempts to walk the widget tree and
make every widget visible. Since we control individual tray item
visibility based on `Status` SNI property, we don't want that to happen.

Modify `Tray::update` to control the visibility of a whole tray module
only and ensure that the children of `Item` are still visible when
necessary.
This commit is contained in:
Aleksei Bavshin 2021-09-19 18:30:41 +03:00
parent fe5ac0fe08
commit fbedc3d133
No known key found for this signature in database
GPG Key ID: 4F071603387A382A
2 changed files with 3 additions and 5 deletions

View File

@ -62,6 +62,7 @@ Item::Item(const std::string& bn, const std::string& op, const Json::Value& conf
event_box.signal_button_press_event().connect(sigc::mem_fun(*this, &Item::handleClick)); event_box.signal_button_press_event().connect(sigc::mem_fun(*this, &Item::handleClick));
event_box.signal_scroll_event().connect(sigc::mem_fun(*this, &Item::handleScroll)); event_box.signal_scroll_event().connect(sigc::mem_fun(*this, &Item::handleScroll));
// initial visibility // initial visibility
event_box.show_all();
event_box.set_visible(show_passive_); event_box.set_visible(show_passive_);
cancellable_ = Gio::Cancellable::create(); cancellable_ = Gio::Cancellable::create();

View File

@ -35,11 +35,8 @@ void Tray::onRemove(std::unique_ptr<Item>& item) {
} }
auto Tray::update() -> void { auto Tray::update() -> void {
if (box_.get_children().empty()) { // Show tray only when items are availale
box_.hide(); box_.set_visible(!box_.get_children().empty());
} else {
box_.show_all();
}
// Call parent update // Call parent update
AModule::update(); AModule::update();
} }