From 341d3300fa25ad06a5ff357fd492f5c36beb872d Mon Sep 17 00:00:00 2001 From: Robinhuett <5955614+Robinhuett@users.noreply.github.com> Date: Tue, 30 Oct 2018 21:28:31 +0100 Subject: [PATCH] Custom modules can control tooltip and CSS class --- include/modules/custom.hpp | 5 +++++ src/modules/custom.cpp | 42 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/include/modules/custom.hpp b/include/modules/custom.hpp index f055383..187f26b 100644 --- a/include/modules/custom.hpp +++ b/include/modules/custom.hpp @@ -15,8 +15,13 @@ class Custom : public ALabel { private: void delayWorker(); void continuousWorker(); + void parseOutput(); const std::string name_; + std::string text_; + std::string tooltip_; + std::string class_; + std::string prevclass_; waybar::util::SleeperThread thread_; waybar::util::command::res output_; }; diff --git a/src/modules/custom.cpp b/src/modules/custom.cpp index 5a38e35..bfc9c09 100644 --- a/src/modules/custom.cpp +++ b/src/modules/custom.cpp @@ -72,9 +72,47 @@ auto waybar::modules::Custom::update() -> void label_.set_name(""); } else { label_.set_name("custom-" + name_); - auto str = fmt::format(format_, output_.out); + + parseOutput(); + auto str = fmt::format(format_, text_); label_.set_text(str); - label_.set_tooltip_text(str); + if (text_ == tooltip_) { + label_.set_tooltip_text(str); + } else { + label_.set_tooltip_text(tooltip_); + } + if (class_ != "") { + if (prevclass_ != "") { + label_.get_style_context()->remove_class(prevclass_); + } + label_.get_style_context()->add_class(class_); + prevclass_ = class_; + } else { + label_.get_style_context()->remove_class(prevclass_); + prevclass_ = ""; + } + label_.show(); } +} + +void waybar::modules::Custom::parseOutput() +{ + std::istringstream output(output_.out); + std::string line; + int i = 0; + while (getline(output, line)) { + if (i == 0) { + text_ = line; + tooltip_ = line; + class_ = ""; + } else if (i == 1) { + tooltip_ = line; + } else if (i == 2) { + class_ = line; + } else { + break; + } + i++; + } } \ No newline at end of file