Only display the battery icon if it has changed (should save battery time, too)
This commit is contained in:
parent
c3dad8ae5f
commit
0a2aaa0735
|
@ -41,13 +41,30 @@
|
||||||
/* Battery */
|
/* Battery */
|
||||||
/* private */
|
/* private */
|
||||||
/* types */
|
/* types */
|
||||||
|
typedef enum _BatteryLevel
|
||||||
|
{
|
||||||
|
BATTERY_LEVEL_UNKNOWN = 0,
|
||||||
|
BATTERY_LEVEL_ERROR,
|
||||||
|
BATTERY_LEVEL_CAUTION,
|
||||||
|
BATTERY_LEVEL_LOW,
|
||||||
|
BATTERY_LEVEL_NORMAL,
|
||||||
|
BATTERY_LEVEL_CHARGING
|
||||||
|
} BatteryLevel;
|
||||||
|
#define BATTERY_LEVEL_LAST BATTERY_LEVEL_CHARGING
|
||||||
|
#define BATTERY_LEVEL_COUNT (BATTERY_LEVEL_LAST + 1)
|
||||||
|
|
||||||
typedef struct _Battery
|
typedef struct _Battery
|
||||||
{
|
{
|
||||||
PanelAppletHelper * helper;
|
PanelAppletHelper * helper;
|
||||||
|
BatteryLevel level;
|
||||||
|
|
||||||
|
/* widgets */
|
||||||
GtkWidget * hbox;
|
GtkWidget * hbox;
|
||||||
GtkWidget * image;
|
GtkWidget * image;
|
||||||
GtkWidget * scale;
|
GtkWidget * scale;
|
||||||
guint timeout;
|
guint timeout;
|
||||||
|
|
||||||
|
/* platform-specific */
|
||||||
#if defined(__NetBSD__) || defined(__linux__)
|
#if defined(__NetBSD__) || defined(__linux__)
|
||||||
int fd;
|
int fd;
|
||||||
#endif
|
#endif
|
||||||
|
@ -91,6 +108,7 @@ static GtkWidget * _battery_init(PanelApplet * applet)
|
||||||
return NULL;
|
return NULL;
|
||||||
applet->priv = battery;
|
applet->priv = battery;
|
||||||
battery->helper = applet->helper;
|
battery->helper = applet->helper;
|
||||||
|
battery->level = -1;
|
||||||
battery->timeout = 0;
|
battery->timeout = 0;
|
||||||
#if defined(__NetBSD__) || defined(__linux__)
|
#if defined(__NetBSD__) || defined(__linux__)
|
||||||
battery->fd = -1;
|
battery->fd = -1;
|
||||||
|
@ -129,35 +147,31 @@ static void _battery_destroy(PanelApplet * applet)
|
||||||
|
|
||||||
|
|
||||||
/* battery_set */
|
/* battery_set */
|
||||||
|
static void _set_image(Battery * battery, BatteryLevel level);
|
||||||
|
|
||||||
static void _battery_set(Battery * battery, gdouble value)
|
static void _battery_set(Battery * battery, gdouble value)
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[16];
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%.1lf%%", value);
|
snprintf(buf, sizeof(buf), "%.1lf%%", value);
|
||||||
/* XXX only set image and show when necessary? */
|
/* XXX only show when necessary? */
|
||||||
if(value >= 0.0 && value <= 100.0)
|
if(value >= 0.0 && value <= 100.0)
|
||||||
gtk_widget_show(battery->hbox);
|
gtk_widget_show(battery->hbox);
|
||||||
if(value < 0.0)
|
if(value < 0.0)
|
||||||
{
|
{
|
||||||
gtk_image_set_from_icon_name(GTK_IMAGE(battery->image),
|
_set_image(battery, BATTERY_LEVEL_UNKNOWN);
|
||||||
"stock_dialog-question",
|
value = 0.0;
|
||||||
battery->helper->icon_size);
|
|
||||||
snprintf(buf, sizeof(buf), "%s", _("Unknown"));
|
snprintf(buf, sizeof(buf), "%s", _("Unknown"));
|
||||||
}
|
}
|
||||||
else if(value <= 10.0)
|
else if(value <= 10.0)
|
||||||
gtk_image_set_from_icon_name(GTK_IMAGE(battery->image),
|
_set_image(battery, BATTERY_LEVEL_CAUTION);
|
||||||
"battery-caution", battery->helper->icon_size);
|
|
||||||
else if(value <= 20.0)
|
else if(value <= 20.0)
|
||||||
gtk_image_set_from_icon_name(GTK_IMAGE(battery->image),
|
_set_image(battery, BATTERY_LEVEL_LOW);
|
||||||
"battery-low", battery->helper->icon_size);
|
|
||||||
else if(value <= 100.0)
|
else if(value <= 100.0)
|
||||||
gtk_image_set_from_icon_name(GTK_IMAGE(battery->image),
|
_set_image(battery, BATTERY_LEVEL_NORMAL);
|
||||||
"battery", battery->helper->icon_size);
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gtk_image_set_from_icon_name(GTK_IMAGE(battery->image),
|
_set_image(battery, BATTERY_LEVEL_ERROR);
|
||||||
"error", battery->helper->icon_size);
|
|
||||||
gtk_widget_hide(battery->hbox);
|
|
||||||
value = 0.0;
|
value = 0.0;
|
||||||
snprintf(buf, sizeof(buf), "%s", _("Error"));
|
snprintf(buf, sizeof(buf), "%s", _("Error"));
|
||||||
}
|
}
|
||||||
|
@ -168,6 +182,24 @@ static void _battery_set(Battery * battery, gdouble value)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _set_image(Battery * battery, BatteryLevel level)
|
||||||
|
{
|
||||||
|
char const * icons[BATTERY_LEVEL_COUNT] =
|
||||||
|
{
|
||||||
|
"stock_dialog-question",
|
||||||
|
"stock_dialog-error",
|
||||||
|
"battery-caution",
|
||||||
|
"battery-low",
|
||||||
|
"battery",
|
||||||
|
"battery" /* XXX find a better icon */
|
||||||
|
};
|
||||||
|
|
||||||
|
if(battery->level == level)
|
||||||
|
return;
|
||||||
|
gtk_image_set_from_icon_name(GTK_IMAGE(battery->image), icons[level],
|
||||||
|
battery->helper->icon_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* callbacks */
|
/* callbacks */
|
||||||
/* on_timeout */
|
/* on_timeout */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user