Merge pull request #3028 from bartelsielski/upower-warning_level

Upower warning level
pull/3044/merge
Alexis Rouillard 2024-03-22 23:22:56 +01:00 committed by GitHub
commit cc084f5f86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 28 additions and 6 deletions

View File

@ -71,6 +71,7 @@ class UPower : public AModule {
GDBusConnection *login1_connection;
std::unique_ptr<UPowerTooltip> upower_tooltip;
std::string lastStatus;
const char *lastWarningLevel;
bool showAltText;
bool showIcon = true;
bool upowerRunning;

View File

@ -8,6 +8,17 @@
#include "gtkmm/tooltip.h"
#include "util/gtk_icon.hpp"
static const char* getDeviceWarningLevel(UpDeviceLevel level) {
switch (level) {
case UP_DEVICE_LEVEL_CRITICAL:
return "critical";
case UP_DEVICE_LEVEL_LOW:
return "low";
default:
return nullptr;
}
}
namespace waybar::modules::upower {
UPower::UPower(const std::string& id, const Json::Value& config)
: AModule(config, "upower", id),
@ -304,11 +315,12 @@ auto UPower::update() -> void {
return;
}
UpDeviceKind kind;
UpDeviceState state;
double percentage;
gint64 time_empty;
gint64 time_full;
UpDeviceKind kind = UP_DEVICE_KIND_UNKNOWN;
UpDeviceState state = UP_DEVICE_STATE_UNKNOWN;
UpDeviceLevel level = UP_DEVICE_LEVEL_UNKNOWN;
double percentage = 0.0;
gint64 time_empty = 0;
gint64 time_full = 0;
gchar* icon_name{(char*)'\0'};
std::string percentString{""};
std::string time_format{""};
@ -318,7 +330,7 @@ auto UPower::update() -> void {
if (displayDevice) {
g_object_get(displayDevice, "kind", &kind, "state", &state, "percentage", &percentage,
"icon-name", &icon_name, "time-to-empty", &time_empty, "time-to-full", &time_full,
NULL);
"warning-level", &level, NULL);
/* Every Device which is handled by Upower and which is not
* UP_DEVICE_KIND_UNKNOWN (0) or UP_DEVICE_KIND_LINE_POWER (1) is a Battery
*/
@ -338,6 +350,15 @@ auto UPower::update() -> void {
}
lastStatus = status;
const char* warning_level = getDeviceWarningLevel(level);
if (lastWarningLevel && box_.get_style_context()->has_class(lastWarningLevel)) {
box_.get_style_context()->remove_class(lastWarningLevel);
}
if (warning_level && !box_.get_style_context()->has_class(warning_level)) {
box_.get_style_context()->add_class(warning_level);
}
lastWarningLevel = warning_level;
if (devices.size() == 0 && !displayDeviceValid && hideIfEmpty) {
event_box_.set_visible(false);
// Call parent update