From ba278985e86315731871611996382f31d0e526c2 Mon Sep 17 00:00:00 2001 From: dmitry Date: Sun, 18 Apr 2021 21:34:29 +0300 Subject: [PATCH] Add ignore-list param to wlr/taskbar --- include/modules/wlr/taskbar.hpp | 7 +++++++ man/waybar-wlr-taskbar.5.scd | 9 ++++++++- src/modules/wlr/taskbar.cpp | 31 ++++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/include/modules/wlr/taskbar.hpp b/include/modules/wlr/taskbar.hpp index 7085d79d..bb65066a 100644 --- a/include/modules/wlr/taskbar.hpp +++ b/include/modules/wlr/taskbar.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include @@ -61,6 +62,7 @@ class Task Gtk::Label text_before_; Gtk::Label text_after_; bool button_visible_; + bool ignored_; bool with_icon_; std::string format_before_; @@ -132,10 +134,14 @@ class Taskbar : public waybar::AModule std::vector tasks_; std::vector> icon_themes_; + std::unordered_set ignore_list_; struct zwlr_foreign_toplevel_manager_v1 *manager_; struct wl_seat *seat_; + protected: + + public: /* Callbacks for global registration */ void register_manager(struct wl_registry*, uint32_t name, uint32_t version); @@ -155,6 +161,7 @@ class Taskbar : public waybar::AModule bool all_outputs() const; std::vector> icon_themes() const; + const std::unordered_set& ignore_list() const; }; } /* namespace waybar::modules::wlr */ diff --git a/man/waybar-wlr-taskbar.5.scd b/man/waybar-wlr-taskbar.5.scd index a2bff265..0e86238a 100644 --- a/man/waybar-wlr-taskbar.5.scd +++ b/man/waybar-wlr-taskbar.5.scd @@ -68,6 +68,10 @@ Addressed by *wlr/taskbar* typeof: string ++ Command to execute when the module is updated. +*ignore-list*: ++ + typeof: array ++ + List of app_id to be invisible. + # FORMAT REPLACEMENTS *{icon}*: The icon of the application. @@ -98,7 +102,10 @@ Addressed by *wlr/taskbar* "icon-theme": "Numix-Circle", "tooltip-format": "{title}", "on-click": "activate", - "on-click-middle": "close" + "on-click-middle": "close", + "ignore-list": [ + "Alacritty" + ] } ``` diff --git a/src/modules/wlr/taskbar.cpp b/src/modules/wlr/taskbar.cpp index ef46f36a..932a95e6 100644 --- a/src/modules/wlr/taskbar.cpp +++ b/src/modules/wlr/taskbar.cpp @@ -277,7 +277,7 @@ Task::Task(const waybar::Bar &bar, const Json::Value &config, Taskbar *tbar, bar_{bar}, config_{config}, tbar_{tbar}, handle_{tl_handle}, seat_{seat}, id_{global_id++}, content_{bar.vertical ? Gtk::ORIENTATION_VERTICAL : Gtk::ORIENTATION_HORIZONTAL, 0}, - button_visible_{false} + button_visible_{false}, ignored_{false} { zwlr_foreign_toplevel_handle_v1_add_listener(handle_, &toplevel_handle_impl, this); @@ -383,6 +383,21 @@ void Task::handle_app_id(const char *app_id) { app_id_ = app_id; + if (tbar_->ignore_list().count(app_id)) { + ignored_ = true; + if (button_visible_) { + auto output = gdk_wayland_monitor_get_wl_output(bar_.output->monitor->gobj()); + handle_output_leave(output); + } + } else { + bool is_was_ignored = ignored_; + ignored_ = false; + if (is_was_ignored) { + auto output = gdk_wayland_monitor_get_wl_output(bar_.output->monitor->gobj()); + handle_output_enter(output); + } + } + if (!with_icon_) return; @@ -405,6 +420,11 @@ void Task::handle_output_enter(struct wl_output *output) { spdlog::debug("{} entered output {}", repr(), (void*)output); + if (ignored_) { + spdlog::debug("{} is ignored", repr()); + return; + } + if (!button_visible_ && (tbar_->all_outputs() || tbar_->show_output(output))) { /* The task entered the output of the current bar make the button visible */ tbar_->add_button(button_); @@ -694,6 +714,14 @@ Taskbar::Taskbar(const std::string &id, const waybar::Bar &bar, const Json::Valu icon_themes_.push_back(it); } + + // Load ignore-list + if (config_["ignore-list"].isArray()) { + for (auto& app_name : config_["ignore-list"]) { + ignore_list_.emplace(app_name.asString()); + } + } + icon_themes_.push_back(Gtk::IconTheme::get_default()); } @@ -829,5 +857,6 @@ std::vector> Taskbar::icon_themes() const { return icon_themes_; } +const std::unordered_set &Taskbar::ignore_list() const { return ignore_list_; } } /* namespace waybar::modules::wlr */