refactor(ALabel): add generic label+tooltip helper to remove duplication

Modules duplicated the same boilerplate to format their label and tooltip
(read tooltip-format, fmt::format, set_tooltip_markup) across ~29 modules.

Add updateLabelAndTooltip(labelFormat, tooltipDefault, args...) and its
state-aware variant updateLabelAndTooltipForState(state, ...) to ALabel: they
build a single fmt arg store, render the label and the resolved tooltip format
(tooltip-format[-state] or default) through the dedup-aware setters, honoring
the tooltip toggle. resolveTooltipFormat() centralizes the format resolution.

Migrate temperature and disk as the first adopters.
This commit is contained in:
Alex
2026-07-03 23:46:31 +02:00
parent 1afb1a5229
commit 8eb916ac84
3 changed files with 47 additions and 29 deletions
+4 -16
View File
@@ -68,25 +68,13 @@ auto waybar::modules::Disk::update() -> void {
event_box_.hide();
} else {
event_box_.show();
label_.set_markup(fmt::format(
fmt::runtime(format), stats.f_bavail * 100 / stats.f_blocks, fmt::arg("free", free),
updateLabelAndTooltip(
format, "{used} used out of {total} on {path} ({percentage_used}%)",
stats.f_bavail * 100 / stats.f_blocks, fmt::arg("free", free),
fmt::arg("percentage_free", stats.f_bavail * 100 / stats.f_blocks), fmt::arg("used", used),
fmt::arg("percentage_used", percentage_used), fmt::arg("total", total),
fmt::arg("path", path_), fmt::arg("specific_free", specific_free),
fmt::arg("specific_used", specific_used), fmt::arg("specific_total", specific_total)));
}
if (tooltipEnabled()) {
std::string tooltip_format = "{used} used out of {total} on {path} ({percentage_used}%)";
if (config_["tooltip-format"].isString()) {
tooltip_format = config_["tooltip-format"].asString();
}
label_.set_tooltip_markup(fmt::format(
fmt::runtime(tooltip_format), stats.f_bavail * 100 / stats.f_blocks, fmt::arg("free", free),
fmt::arg("percentage_free", stats.f_bavail * 100 / stats.f_blocks), fmt::arg("used", used),
fmt::arg("percentage_used", percentage_used), fmt::arg("total", total),
fmt::arg("path", path_), fmt::arg("specific_free", specific_free),
fmt::arg("specific_used", specific_used), fmt::arg("specific_total", specific_total)));
fmt::arg("specific_used", specific_used), fmt::arg("specific_total", specific_total));
}
// Call parent update
ALabel::update();
+4 -13
View File
@@ -155,19 +155,10 @@ auto waybar::modules::Temperature::update() -> void {
event_box_.show();
auto max_temp = config_["critical-threshold"].isInt() ? config_["critical-threshold"].asInt() : 0;
label_.set_markup(fmt::format(fmt::runtime(format), fmt::arg("temperatureC", temperature_c),
fmt::arg("temperatureF", temperature_f),
fmt::arg("temperatureK", temperature_k),
fmt::arg("icon", getIcon(temperature_c, "", max_temp))));
if (tooltipEnabled()) {
std::string tooltip_format = "{temperatureC}°C";
if (config_["tooltip-format"].isString()) {
tooltip_format = config_["tooltip-format"].asString();
}
label_.set_tooltip_markup(fmt::format(
fmt::runtime(tooltip_format), fmt::arg("temperatureC", temperature_c),
fmt::arg("temperatureF", temperature_f), fmt::arg("temperatureK", temperature_k)));
}
updateLabelAndTooltip(format, "{temperatureC}°C", fmt::arg("temperatureC", temperature_c),
fmt::arg("temperatureF", temperature_f),
fmt::arg("temperatureK", temperature_k),
fmt::arg("icon", getIcon(temperature_c, "", max_temp)));
// Call parent update
ALabel::update();
}