diff --git a/include/bar.hpp b/include/bar.hpp index 5e9dd24e4..823a3eb6d 100644 --- a/include/bar.hpp +++ b/include/bar.hpp @@ -59,6 +59,9 @@ class Bar { ~Bar() = default; void setVisible(bool visible); + void setHiddenClass(bool value); + void moveToTopLayer(); + void moveToBottomLayer(); void toggle(); void setExclusive(bool value); void handleSignal(int); diff --git a/src/bar.cpp b/src/bar.cpp index e5c1dcaf0..ebaf0373c 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -605,6 +605,22 @@ void waybar::Bar::setVisible(bool value) { surface_impl_->commit(); } +void waybar::Bar::setHiddenClass(bool value) { + if (value) { + window.get_style_context()->add_class("hidden"); + } else { + window.get_style_context()->remove_class("hidden"); + } +} + +void waybar::Bar::moveToTopLayer() { + surface_impl_->setLayer(bar_layer::TOP); + surface_impl_->commit(); +} + +void waybar::Bar::moveToBottomLayer() { + surface_impl_->setLayer(bar_layer::BOTTOM); + surface_impl_->commit(); } void waybar::Bar::setExclusive(bool value) { diff --git a/src/modules/sway/hide.cpp b/src/modules/sway/hide.cpp index 8c5c3e546..ac616f473 100644 --- a/src/modules/sway/hide.cpp +++ b/src/modules/sway/hide.cpp @@ -31,13 +31,19 @@ void Hide::onEvent(const struct Ipc::ipc_response& res) { bar->setVisible(true); bar->setExclusive(true); } - } + } } else if (payload.isMember("visible_by_modifier")) { - // bar_state_update: get visible_by_modifier visible_by_modifier_ = payload["visible_by_modifier"].asBool(); spdlog::debug("sway/hide: visible by modifier: {}", visible_by_modifier_); for (auto& bar : waybar::Client::inst()->bars) { - bar->setVisible(visible_by_modifier_); + if (visible_by_modifier_) { + bar->setHiddenClass(false); + bar->moveToTopLayer(); + } else { + bar->setHiddenClass(true); + bar->moveToBottomLayer(); + bar->setExclusive(false); + } } } }