diff --git a/include/modules/dwl/window.hpp b/include/modules/dwl/window.hpp index 619360a5..212fb513 100644 --- a/include/modules/dwl/window.hpp +++ b/include/modules/dwl/window.hpp @@ -32,6 +32,8 @@ class Window : public AAppIconLabel, public sigc::trackable { std::string appid_; std::string layout_symbol_; bool active_; + bool hide_inactive_; + bool hide_empty_; uint32_t layout_; struct zdwl_ipc_output_v2 *output_status_; diff --git a/man/waybar-dwl-window.5.scd b/man/waybar-dwl-window.5.scd index c7f70908..907d5332 100644 --- a/man/waybar-dwl-window.5.scd +++ b/man/waybar-dwl-window.5.scd @@ -17,6 +17,16 @@ Addressed by *dwl/window* default: {title} ++ The format, how information should be displayed. +*hide-empty*: ++ + typeof: bool ++ + default: false ++ + Option to hide the module when the content would be empty. + +*hide-inactive*: ++ + typeof: bool ++ + default: false ++ + Option to hide the module when the window is unfocused. + *rotate*: ++ typeof: integer ++ Positive value to rotate the text label (in 90 degree increments). diff --git a/src/modules/dwl/window.cpp b/src/modules/dwl/window.cpp index 82d92003..b5dd377c 100644 --- a/src/modules/dwl/window.cpp +++ b/src/modules/dwl/window.cpp @@ -76,7 +76,15 @@ static const wl_registry_listener registry_listener_impl = {.global = handle_glo Window::Window(const std::string &id, const Bar &bar, const Json::Value &config) : AAppIconLabel(config, "window", id, "{}", 0, true), bar_(bar), - active_(false) { + active_(false), + hide_inactive_(false), + hide_empty_(false) { + if (config_["hide-inactive"].isBool()) { + hide_inactive_ = config["hide-inactive"].asBool(); + } + if (config_["hide-empty"].isBool()) { + hide_empty_ = config["hide-empty"].asBool(); + } struct wl_display *display = Client::inst()->wl_display; struct wl_registry *registry = wl_display_get_registry(display); @@ -122,10 +130,18 @@ void Window::handle_frame() { if (tooltipEnabled()) { label_.set_tooltip_text(title_); } - if (active_) { - box_.get_style_context()->add_class("active"); + if (hide_empty_ && title_.empty()) { + box_.set_visible(false); } else { - box_.get_style_context()->remove_class("active"); + if (active_) { + box_.get_style_context()->add_class("active"); + box_.set_visible(true); + } else { + box_.get_style_context()->remove_class("active"); + if (hide_inactive_) { + box_.set_visible(false); + } + } } }