diff options
author | Bastien Nocera <hadess@hadess.net> | 2018-04-19 03:25:03 +0200 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2018-04-19 03:27:12 +0200 |
commit | e7de44f0d53bd509e7d5fcc84512d5398afe64aa (patch) | |
tree | be67921562e8431bda81b86050f5e58b6fcf3570 | |
parent | 33e9039eb058401ad7815a83eaf144459b1ecc32 (diff) | |
download | upower-e7de44f0d53bd509e7d5fcc84512d5398afe64aa.tar.gz |
daemon: Add battery-level specific icons
Rather than relying on the percentage equivalence, which just doesn't
work for "Unknown" battery levels.
https://bugs.freedesktop.org/show_bug.cgi?id=97484
-rw-r--r-- | src/up-device.c | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/src/up-device.c b/src/up-device.c index 336bd0e..cab93f9 100644 --- a/src/up-device.c +++ b/src/up-device.c @@ -91,16 +91,36 @@ update_warning_level (UpDevice *device) } static const gchar * -get_device_charge_icon (gdouble percentage, - gboolean charging) +get_device_charge_icon (gdouble percentage, + UpDeviceLevel battery_level, + gboolean charging) { - if (percentage < 10) - return charging ? "battery-caution-charging-symbolic" : "battery-caution-symbolic"; - else if (percentage < 30) - return charging ? "battery-low-charging-symbolic" : "battery-low-symbolic"; - else if (percentage < 60) - return charging ? "battery-good-charging-symbolic" : "battery-good-symbolic"; - return charging ? "battery-full-charging-symbolic" : "battery-full-symbolic"; + if (battery_level == UP_DEVICE_LEVEL_NONE) { + if (percentage < 10) + return charging ? "battery-caution-charging-symbolic" : "battery-caution-symbolic"; + else if (percentage < 30) + return charging ? "battery-low-charging-symbolic" : "battery-low-symbolic"; + else if (percentage < 60) + return charging ? "battery-good-charging-symbolic" : "battery-good-symbolic"; + return charging ? "battery-full-charging-symbolic" : "battery-full-symbolic"; + } else { + switch (battery_level) { + case UP_DEVICE_LEVEL_UNKNOWN: + /* The lack of symmetry is on purpose */ + return charging ? "battery-good-charging-symbolic" : "battery-caution-symbolic"; + case UP_DEVICE_LEVEL_LOW: + case UP_DEVICE_LEVEL_CRITICAL: + return charging ? "battery-caution-charging-symbolic" : "battery-caution-symbolic"; + case UP_DEVICE_LEVEL_NORMAL: + return charging ? "battery-low-charging-symbolic" : "battery-low-symbolic"; + case UP_DEVICE_LEVEL_HIGH: + return charging ? "battery-good-charging-symbolic" : "battery-good-symbolic"; + case UP_DEVICE_LEVEL_FULL: + return charging ? "battery-full-charging-symbolic" : "battery-full-symbolic"; + default: + g_assert_not_reached (); + } + } } /* This needs to be called when one of those properties changes: @@ -133,11 +153,15 @@ update_icon_name (UpDevice *device) break; case UP_DEVICE_STATE_CHARGING: case UP_DEVICE_STATE_PENDING_CHARGE: - icon_name = get_device_charge_icon (up_exported_device_get_percentage (skeleton), TRUE); + icon_name = get_device_charge_icon (up_exported_device_get_percentage (skeleton), + up_exported_device_get_battery_level (skeleton), + TRUE); break; case UP_DEVICE_STATE_DISCHARGING: case UP_DEVICE_STATE_PENDING_DISCHARGE: - icon_name = get_device_charge_icon (up_exported_device_get_percentage (skeleton), FALSE); + icon_name = get_device_charge_icon (up_exported_device_get_percentage (skeleton), + up_exported_device_get_battery_level (skeleton), + FALSE); break; default: icon_name = "battery-missing-symbolic"; |