summaryrefslogtreecommitdiff
path: root/src/battery/battery.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/battery/battery.cpp')
-rw-r--r--src/battery/battery.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/battery/battery.cpp b/src/battery/battery.cpp
index 9ac6ebf1..92185db7 100644
--- a/src/battery/battery.cpp
+++ b/src/battery/battery.cpp
@@ -77,15 +77,16 @@ auto Battery::Update() -> void {
*charge_state == ChargeStatus::kChargingFast ||
*charge_state == ChargeStatus::kFullCharge;
- if (!state_ || state_->is_charging != is_charging ||
- state_->percent != percent) {
- EmitEvent();
+ if (state_ && state_->is_charging == is_charging &&
+ state_->percent == percent) {
+ return;
}
state_ = BatteryState{
.percent = percent,
.is_charging = is_charging,
};
+ EmitEvent();
}
auto Battery::State() -> std::optional<BatteryState> {
@@ -94,8 +95,15 @@ auto Battery::State() -> std::optional<BatteryState> {
}
auto Battery::EmitEvent() -> void {
- events::System().Dispatch(system_fsm::BatteryStateChanged{});
- events::Ui().Dispatch(system_fsm::BatteryStateChanged{});
+ auto state = state_;
+ if (!state) {
+ return;
+ }
+ system_fsm::BatteryStateChanged ev{
+ .new_state = *state,
+ };
+ events::System().Dispatch(ev);
+ events::Ui().Dispatch(ev);
}
} // namespace battery