diff --git a/src/AModule.cpp b/src/AModule.cpp index 354d1bf9..da43259d 100644 --- a/src/AModule.cpp +++ b/src/AModule.cpp @@ -29,7 +29,7 @@ AModule::~AModule() { } auto AModule::update() -> void { - // Nothing here + pid_.push_back(util::command::forkExec(config_["on-update"].asString())); } bool AModule::handleToggle(GdkEventButton* const& e) { diff --git a/src/modules/backlight.cpp b/src/modules/backlight.cpp index b38f2603..8b63bd6c 100644 --- a/src/modules/backlight.cpp +++ b/src/modules/backlight.cpp @@ -175,6 +175,11 @@ auto waybar::modules::Backlight::update() -> void { return; } + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + const auto percent = best->get_max() == 0 ? 100 : best->get_actual() * 100 / best->get_max(); label_.set_markup(fmt::format( format_, fmt::arg("percent", std::to_string(percent)), fmt::arg("icon", getIcon(percent)))); diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 61ed50a4..b50c38a6 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -149,6 +149,11 @@ const std::string waybar::modules::Battery::formatTimeRemaining(float hoursRemai } auto waybar::modules::Battery::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + auto [capacity, time_remaining, status] = getInfos(); if (status == "Unknown") { status = getAdapterStatus(capacity); diff --git a/src/modules/clock.cpp b/src/modules/clock.cpp index 2fa02142..5a781ef7 100644 --- a/src/modules/clock.cpp +++ b/src/modules/clock.cpp @@ -13,6 +13,11 @@ waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config) } auto waybar::modules::Clock::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + tzset(); // Update timezone information auto now = std::chrono::system_clock::now(); auto localtime = fmt::localtime(std::chrono::system_clock::to_time_t(now)); diff --git a/src/modules/cpu.cpp b/src/modules/cpu.cpp index 298f7a46..33d0d531 100644 --- a/src/modules/cpu.cpp +++ b/src/modules/cpu.cpp @@ -10,6 +10,11 @@ waybar::modules::Cpu::Cpu(const std::string& id, const Json::Value& config) } auto waybar::modules::Cpu::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + // TODO: as creating dynamic fmt::arg arrays is buggy we have to calc both auto cpu_load = getCpuLoad(); auto [cpu_usage, tooltip] = getCpuUsage(); diff --git a/src/modules/custom.cpp b/src/modules/custom.cpp index ca095088..1853b2fa 100644 --- a/src/modules/custom.cpp +++ b/src/modules/custom.cpp @@ -93,6 +93,11 @@ bool waybar::modules::Custom::handleToggle(GdkEventButton* const& e) { } auto waybar::modules::Custom::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + // Hide label if output is empty if (config_["exec"].isString() && (output_.out.empty() || output_.exit_code != 0)) { event_box_.hide(); diff --git a/src/modules/idle_inhibitor.cpp b/src/modules/idle_inhibitor.cpp index e5460ad8..c39e0114 100644 --- a/src/modules/idle_inhibitor.cpp +++ b/src/modules/idle_inhibitor.cpp @@ -26,6 +26,11 @@ waybar::modules::IdleInhibitor::~IdleInhibitor() { } auto waybar::modules::IdleInhibitor::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + label_.set_markup( fmt::format(format_, fmt::arg("status", status_), fmt::arg("icon", getIcon(0, status_)))); label_.get_style_context()->add_class(status_); diff --git a/src/modules/memory.cpp b/src/modules/memory.cpp index eeb92bfe..3e1ed746 100644 --- a/src/modules/memory.cpp +++ b/src/modules/memory.cpp @@ -9,6 +9,11 @@ waybar::modules::Memory::Memory(const std::string& id, const Json::Value& config } auto waybar::modules::Memory::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + parseMeminfo(); if (memtotal_ > 0 && memfree_ >= 0) { auto total_ram_gigabytes = memtotal_ / std::pow(1024, 2); diff --git a/src/modules/mpd.cpp b/src/modules/mpd.cpp index 7bad855b..f61dfc40 100644 --- a/src/modules/mpd.cpp +++ b/src/modules/mpd.cpp @@ -35,6 +35,11 @@ waybar::modules::MPD::MPD(const std::string& id, const Json::Value& config) } auto waybar::modules::MPD::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + std::lock_guard guard(connection_lock_); tryConnect(); diff --git a/src/modules/network.cpp b/src/modules/network.cpp index ba196cff..9513a93d 100644 --- a/src/modules/network.cpp +++ b/src/modules/network.cpp @@ -228,6 +228,11 @@ const std::string waybar::modules::Network::getNetworkState() const { } auto waybar::modules::Network::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + std::lock_guard lock(mutex_); std::string tooltip_format; auto down_octets = read_netstat(BANDWIDTH_CATEGORY, BANDWIDTH_DOWN_TOTAL_KEY); diff --git a/src/modules/pulseaudio.cpp b/src/modules/pulseaudio.cpp index ef2bc273..e336825c 100644 --- a/src/modules/pulseaudio.cpp +++ b/src/modules/pulseaudio.cpp @@ -196,6 +196,11 @@ const std::string waybar::modules::Pulseaudio::getPortIcon() const { } auto waybar::modules::Pulseaudio::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + auto format = format_; std::string format_name = "format"; if (monitor_.find("a2dp_sink") != std::string::npos) { diff --git a/src/modules/temperature.cpp b/src/modules/temperature.cpp index 78391a0d..d17c2ad8 100644 --- a/src/modules/temperature.cpp +++ b/src/modules/temperature.cpp @@ -19,6 +19,11 @@ waybar::modules::Temperature::Temperature(const std::string& id, const Json::Val } auto waybar::modules::Temperature::update() -> void { + // Run user-provided update handler if configured + if (config_["on-update"].isString()) { + AModule::update(); + } + auto [temperature_c, temperature_f] = getTemperature(); auto critical = isCritical(temperature_c); auto format = format_;