94
100
G_DEFINE_TYPE (XfpmBattery, xfpm_battery, GTK_TYPE_STATUS_ICON)
96
static const gchar * G_GNUC_CONST
97
xfpm_battery_get_icon_index (XfpmDeviceType type, guint percent)
103
else if (percent < 30)
105
return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "020" : "030");
107
else if (percent < 50)
109
return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS ) ? "040" : "030");
111
else if (percent < 70)
115
else if (percent < 90)
117
return ((type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "080" : "060");
124
xfpm_battery_refresh_visible (XfpmBattery *battery)
126
XfpmShowIcon show_icon;
127
gboolean visible = TRUE;
129
g_object_get (G_OBJECT (battery->priv->conf),
130
SHOW_TRAY_ICON_CFG, &show_icon,
133
if ( show_icon == SHOW_ICON_ALWAYS )
135
else if ( show_icon == NEVER_SHOW_ICON )
137
else if ( show_icon == SHOW_ICON_WHEN_BATTERY_PRESENT )
139
if ( battery->priv->present )
141
else visible = FALSE;
143
else if ( show_icon == SHOW_ICON_WHEN_BATTERY_CHARGING_DISCHARGING )
145
if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
150
XFPM_DEBUG_ENUM (show_icon, XFPM_TYPE_SHOW_ICON, "visible=%s", xfpm_bool_to_string (visible));
152
gtk_status_icon_set_visible (GTK_STATUS_ICON (battery), visible);
160
xfpm_battery_get_time_string (guint seconds)
162
char* timestring = NULL;
166
/* Add 0.5 to do rounding */
167
minutes = (int) ( ( seconds / 60.0 ) + 0.5 );
171
timestring = g_strdup (_("Unknown time"));
177
timestring = g_strdup_printf (ngettext ("%i minute",
183
hours = minutes / 60;
184
minutes = minutes % 60;
187
timestring = g_strdup_printf (ngettext (
192
/* TRANSLATOR: "%i %s %i %s" are "%i hours %i minutes"
193
* Swap order with "%2$s %2$i %1$s %1$i if needed */
194
timestring = g_strdup_printf (_("%i %s %i %s"),
195
hours, ngettext ("hour", "hours", hours),
196
minutes, ngettext ("minute", "minutes", minutes));
201
104
xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
203
106
gchar *msg = NULL;
206
if (battery->priv->type == XFPM_DEVICE_TYPE_BATTERY || battery->priv->type == XFPM_DEVICE_TYPE_UPS)
109
if (battery->priv->type == UP_DEVICE_KIND_BATTERY || battery->priv->type == UP_DEVICE_KIND_UPS)
208
111
switch (battery->priv->state)
210
case XFPM_DEVICE_STATE_FULLY_CHARGED:
113
case UP_DEVICE_STATE_FULLY_CHARGED:
211
114
msg = g_strdup_printf (_("Your %s is fully charged"), battery->priv->battery_name);
213
case XFPM_DEVICE_STATE_CHARGING:
116
case UP_DEVICE_STATE_CHARGING:
214
117
msg = g_strdup_printf (_("Your %s is charging"), battery->priv->battery_name);
216
119
if ( battery->priv->time_to_full != 0 )
218
121
gchar *tmp, *est_time_str;
219
122
tmp = g_strdup (msg);
222
125
est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_full);
224
msg = g_strdup_printf (_("%s (%i%%)\n%s until is fully charged."), tmp, battery->priv->percentage, est_time_str);
127
msg = g_strdup_printf (_("%s (%i%%)\n%s until it is fully charged."), tmp, battery->priv->percentage, est_time_str);
225
128
g_free (est_time_str);
230
case XFPM_DEVICE_STATE_DISCHARGING:
133
case UP_DEVICE_STATE_DISCHARGING:
231
134
if (battery->priv->ac_online)
232
135
msg = g_strdup_printf (_("Your %s is discharging"), battery->priv->battery_name);
234
137
msg = g_strdup_printf (_("System is running on %s power"), battery->priv->battery_name);
236
139
if ( battery->priv->time_to_empty != 0 )
238
141
gchar *tmp, *est_time_str;
239
142
tmp = g_strdup (msg);
242
145
est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_empty);
244
147
msg = g_strdup_printf (_("%s (%i%%)\nEstimated time left is %s."), tmp, battery->priv->percentage, est_time_str);
246
149
g_free (est_time_str);
249
case XFPM_DEVICE_STATE_EMPTY:
152
case UP_DEVICE_STATE_EMPTY:
250
153
msg = g_strdup_printf (_("Your %s is empty"), battery->priv->battery_name);
257
else if (battery->priv->type >= XFPM_DEVICE_TYPE_MONITOR)
160
else if (battery->priv->type >= UP_DEVICE_KIND_MONITOR)
259
162
switch (battery->priv->state)
261
case XFPM_DEVICE_STATE_FULLY_CHARGED:
164
case UP_DEVICE_STATE_FULLY_CHARGED:
262
165
msg = g_strdup_printf (_("Your %s is fully charged"), battery->priv->battery_name);
264
case XFPM_DEVICE_STATE_CHARGING:
167
case UP_DEVICE_STATE_CHARGING:
265
168
msg = g_strdup_printf (_("Your %s is charging"), battery->priv->battery_name);
267
case XFPM_DEVICE_STATE_DISCHARGING:
170
case UP_DEVICE_STATE_DISCHARGING:
268
171
msg = g_strdup_printf (_("Your %s is discharging"), battery->priv->battery_name);
270
case XFPM_DEVICE_STATE_EMPTY:
173
case UP_DEVICE_STATE_EMPTY:
271
174
msg = g_strdup_printf (_("Your %s is empty"), battery->priv->battery_name);
282
185
xfpm_battery_refresh_icon (XfpmBattery *battery)
284
187
gchar icon_name[128];
286
189
XFPM_DEBUG ("Battery state %d", battery->priv->state);
288
if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
289
battery->priv->type == XFPM_DEVICE_TYPE_UPS )
191
if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
192
battery->priv->type == UP_DEVICE_KIND_UPS )
291
194
if (!battery->priv->present)
293
196
g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, "missing");
295
else if (battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
198
else if (battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
297
200
g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, battery->priv->ac_online ? "charged" : "100");
299
else if ( battery->priv->state == XFPM_DEVICE_STATE_CHARGING ||
300
battery->priv->state == XFPM_DEVICE_STATE_PENDING_CHARGING)
202
else if ( battery->priv->state == UP_DEVICE_STATE_CHARGING ||
203
battery->priv->state == UP_DEVICE_STATE_PENDING_CHARGE)
302
g_snprintf (icon_name, 128, "%s%s-%s",
303
battery->priv->icon_prefix,
205
g_snprintf (icon_name, 128, "%s%s-%s",
206
battery->priv->icon_prefix,
304
207
xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage),
307
else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING ||
308
battery->priv->state == XFPM_DEVICE_STATE_PENDING_DISCHARGING)
210
else if ( battery->priv->state == UP_DEVICE_STATE_DISCHARGING ||
211
battery->priv->state == UP_DEVICE_STATE_PENDING_DISCHARGE)
310
g_snprintf (icon_name, 128, "%s%s",
311
battery->priv->icon_prefix,
213
g_snprintf (icon_name, 128, "%s%s",
214
battery->priv->icon_prefix,
312
215
xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage));
314
else if ( battery->priv->state == XFPM_DEVICE_STATE_EMPTY)
217
else if ( battery->priv->state == UP_DEVICE_STATE_EMPTY)
316
219
g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, battery->priv->ac_online ? "000-charging" : "000");
321
if ( !battery->priv->present || battery->priv->state == XFPM_DEVICE_STATE_EMPTY )
224
if ( !battery->priv->present || battery->priv->state == UP_DEVICE_STATE_EMPTY )
323
226
g_snprintf (icon_name, 128, "%s000", battery->priv->icon_prefix);
325
else if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
228
else if ( battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
327
230
g_snprintf (icon_name, 128, "%s100", battery->priv->icon_prefix);
329
else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING )
232
else if ( battery->priv->state == UP_DEVICE_STATE_DISCHARGING || battery->priv->state == UP_DEVICE_STATE_CHARGING )
331
g_snprintf (icon_name, 128, "%s%s",
332
battery->priv->icon_prefix,
234
g_snprintf (icon_name, 128, "%s%s",
235
battery->priv->icon_prefix,
333
236
xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage));
240
XFPM_DEBUG ("Battery icon %s", icon_name);
337
242
gtk_status_icon_set_from_icon_name (GTK_STATUS_ICON (battery), icon_name);
404
* Refresh tooltip function for UPS and battery device only.
407
xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
410
gchar *est_time_str = NULL;
411
gchar *power_status = NULL;
413
power_status = g_strdup_printf (battery->priv->ac_online ? _("Adaptor is online") : _("System is running on battery power"));
415
if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
417
if ( battery->priv->time_to_empty > 0 )
419
est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_empty);
420
tip = g_strdup_printf (_("%s\nYour %s is fully charged (%i%%).\nProvides %s runtime"),
422
battery->priv->battery_name,
423
battery->priv->percentage,
425
g_free (est_time_str);
429
tip = g_strdup_printf (_("%s\nYour %s is fully charged (%i%%)."),
431
battery->priv->battery_name,
432
battery->priv->percentage);
435
else if ( battery->priv->state == XFPM_DEVICE_STATE_CHARGING )
437
if ( battery->priv->time_to_full != 0 )
439
est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_full);
440
tip = g_strdup_printf (_("%s\nYour %s is charging (%i%%)\n%s until is fully charged."),
442
battery->priv->battery_name,
443
battery->priv->percentage,
445
g_free (est_time_str);
449
tip = g_strdup_printf (_("%s\nYour %s is charging (%i%%)."),
451
battery->priv->battery_name,
452
battery->priv->percentage);
455
else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING )
457
if ( battery->priv->time_to_empty != 0 )
459
est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_empty);
460
tip = g_strdup_printf (_("%s\nYour %s is discharging (%i%%)\nEstimated time left is %s."),
462
battery->priv->battery_name,
463
battery->priv->percentage,
465
g_free (est_time_str);
469
tip = g_strdup_printf (_("%s\nYour %s is discharging (%i%%)."),
471
battery->priv->battery_name,
472
battery->priv->percentage);
476
else if ( battery->priv->state == XFPM_DEVICE_STATE_PENDING_CHARGING )
478
tip = g_strdup_printf (_("%s\n%s waiting to discharge (%i%%)."), power_status, battery->priv->battery_name, battery->priv->percentage);
480
else if ( battery->priv->state == XFPM_DEVICE_STATE_PENDING_DISCHARGING )
482
tip = g_strdup_printf (_("%s\n%s waiting to charge (%i%%)."), power_status, battery->priv->battery_name, battery->priv->percentage);
484
else if ( battery->priv->state == XFPM_DEVICE_STATE_EMPTY )
486
tip = g_strdup_printf (_("%s\nYour %s is empty"), power_status, battery->priv->battery_name);
489
gtk_tooltip_set_text (tooltip, tip);
490
g_free (power_status);
495
306
xfpm_battery_check_charge (XfpmBattery *battery)
497
308
XfpmBatteryCharge charge;
498
309
guint critical_level, low_level;
500
311
g_object_get (G_OBJECT (battery->priv->conf),
501
312
CRITICAL_POWER_LEVEL, &critical_level,
504
315
low_level = critical_level + 10;
506
317
if ( battery->priv->percentage > low_level )
507
318
charge = XFPM_BATTERY_CHARGE_OK;
508
319
else if ( battery->priv->percentage <= low_level && battery->priv->percentage > critical_level )
509
320
charge = XFPM_BATTERY_CHARGE_LOW;
510
321
else if ( battery->priv->percentage <= critical_level )
511
322
charge = XFPM_BATTERY_CHARGE_CRITICAL;
324
charge = XFPM_BATTERY_CHARGE_UNKNOWN;
513
326
if ( charge != battery->priv->charge)
515
328
battery->priv->charge = charge;
526
xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props)
339
xfpm_battery_refresh (XfpmBattery *battery, UpDevice *device)
531
value = g_hash_table_lookup (props, "IsPresent");
535
g_warning ("No 'IsPresent' property found");
539
battery->priv->present = g_value_get_boolean (value);
541
value = g_hash_table_lookup (props, "State");
545
g_warning ("No 'State' property found");
548
state = g_value_get_uint (value);
344
guint64 to_empty, to_full;
346
"is-present", &present,
347
"percentage", &percentage,
349
"time-to-empty", &to_empty,
350
"time-to-full", &to_full,
353
battery->priv->present = present;
549
354
if ( state != battery->priv->state )
551
356
battery->priv->state = state;
552
xfpm_battery_refresh_visible (battery);
553
357
xfpm_battery_notify_state (battery);
556
value = g_hash_table_lookup (props, "Percentage");
560
g_warning ("No 'Percentage' property found on battery device");
564
battery->priv->percentage = (guint) g_value_get_double (value);
359
battery->priv->percentage = (guint) percentage;
566
361
xfpm_battery_check_charge (battery);
568
363
xfpm_battery_refresh_icon (battery);
570
if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
571
battery->priv->type == XFPM_DEVICE_TYPE_UPS )
573
value = g_hash_table_lookup (props, "TimeToEmpty");
577
g_warning ("No 'TimeToEmpty' property found on battery device");
581
battery->priv->time_to_empty = g_value_get_int64 (value);
583
value = g_hash_table_lookup (props, "TimeToFull");
587
g_warning ("No 'TimeToFull' property found on battery device");
591
battery->priv->time_to_full = g_value_get_int64 (value);
595
g_hash_table_destroy (props);
599
xfpm_battery_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBattery *battery)
601
if (type == BUTTON_BATTERY)
602
xfpm_battery_notify (battery);
606
xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery)
610
props = xfpm_power_get_interface_properties (battery->priv->proxy_prop,
611
UPOWER_IFACE_DEVICE);
614
xfpm_battery_refresh (battery, props);
618
xfpm_battery_query_tooltip (GtkStatusIcon *icon,
621
gboolean keyboard_mode,
624
XfpmBattery *battery;
626
battery = XFPM_BATTERY (icon);
628
if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
629
battery->priv->type == XFPM_DEVICE_TYPE_UPS )
631
xfpm_battery_set_tooltip_primary (battery, tooltip);
639
xfpm_battery_tray_icon_settings_changed (GObject *obj, GParamSpec *spec, XfpmBattery *battery)
641
xfpm_battery_refresh_visible (battery);
365
if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
366
battery->priv->type == UP_DEVICE_KIND_UPS )
368
battery->priv->time_to_empty = to_empty;
369
battery->priv->time_to_full = to_empty;
374
xfpm_battery_changed_cb (UpDevice *device,
375
#if UP_CHECK_VERSION(0, 99, 0)
378
XfpmBattery *battery)
380
xfpm_battery_refresh (battery, device);
644
383
static void xfpm_battery_get_property (GObject *object,
740
477
xfpm_battery_init (XfpmBattery *battery)
742
479
battery->priv = XFPM_BATTERY_GET_PRIVATE (battery);
744
481
battery->priv->conf = xfpm_xfconf_new ();
745
482
battery->priv->notify = xfpm_notify_new ();
746
battery->priv->proxy_prop = NULL;
747
battery->priv->state = XFPM_DEVICE_STATE_UNKNOWN;
748
battery->priv->type = XFPM_DEVICE_TYPE_UNKNOWN;
483
battery->priv->device = NULL;
484
battery->priv->client = NULL;
485
battery->priv->state = UP_DEVICE_STATE_UNKNOWN;
486
battery->priv->type = UP_DEVICE_KIND_UNKNOWN;
749
487
battery->priv->charge = XFPM_BATTERY_CHARGE_UNKNOWN;
750
488
battery->priv->icon_prefix = NULL;
751
489
battery->priv->time_to_full = 0;
752
490
battery->priv->time_to_empty = 0;
753
491
battery->priv->button = xfpm_button_new ();
754
492
battery->priv->ac_online = TRUE;
756
battery->priv->sig = g_signal_connect (G_OBJECT (battery->priv->conf), "notify::" SHOW_TRAY_ICON_CFG,
757
G_CALLBACK (xfpm_battery_tray_icon_settings_changed), battery);
760
battery->priv->sig_bt = g_signal_connect (G_OBJECT (battery->priv->button), "button-pressed",
761
G_CALLBACK (xfpm_battery_button_pressed_cb), battery);
767
498
XfpmBattery *battery;
769
500
battery = XFPM_BATTERY (object);
771
502
g_free (battery->priv->icon_prefix);
773
504
if (battery->priv->notify_idle != 0)
774
505
g_source_remove (battery->priv->notify_idle);
776
dbus_g_proxy_disconnect_signal (battery->priv->proxy, "Changed",
777
G_CALLBACK (xfpm_battery_changed_cb), battery);
507
if ( g_signal_handler_is_connected (battery->priv->device, battery->priv->sig_up ) )
508
g_signal_handler_disconnect (G_OBJECT (battery->priv->device), battery->priv->sig_up);
779
510
if ( g_signal_handler_is_connected (battery->priv->conf, battery->priv->sig ) )
780
511
g_signal_handler_disconnect (G_OBJECT (battery->priv->conf), battery->priv->sig);
782
513
if ( g_signal_handler_is_connected (battery->priv->button, battery->priv->sig_bt ) )
783
514
g_signal_handler_disconnect (G_OBJECT (battery->priv->button), battery->priv->sig_bt);
785
g_object_unref (battery->priv->proxy);
786
g_object_unref (battery->priv->proxy_prop);
516
g_object_unref (battery->priv->device);
787
517
g_object_unref (battery->priv->conf);
788
518
g_object_unref (battery->priv->notify);
789
519
g_object_unref (battery->priv->button);
793
523
G_OBJECT_CLASS (xfpm_battery_parent_class)->finalize (object);
797
xfpm_battery_get_icon_prefix_device_enum_type (XfpmDeviceType type)
799
if ( type == XFPM_DEVICE_TYPE_BATTERY )
801
return g_strdup (XFPM_PRIMARY_ICON_PREFIX);
803
else if ( type == XFPM_DEVICE_TYPE_UPS )
805
return g_strdup (XFPM_UPS_ICON_PREFIX);
807
else if ( type == XFPM_DEVICE_TYPE_MOUSE )
809
return g_strdup (XFPM_MOUSE_ICON_PREFIX);
811
else if ( type == XFPM_DEVICE_TYPE_KBD )
813
return g_strdup (XFPM_KBD_ICON_PREFIX);
815
else if ( type == XFPM_DEVICE_TYPE_PHONE )
817
return g_strdup (XFPM_PHONE_ICON_PREFIX);
820
return g_strdup (XFPM_PRIMARY_ICON_PREFIX);
823
526
static const gchar *
824
xfpm_battery_get_name (XfpmDeviceType type)
527
xfpm_battery_get_name (UpDeviceKind type)
826
529
const gchar *name = NULL;
830
case XFPM_DEVICE_TYPE_BATTERY:
533
case UP_DEVICE_KIND_BATTERY:
831
534
name = _("battery");
833
case XFPM_DEVICE_TYPE_UPS:
536
case UP_DEVICE_KIND_UPS:
836
case XFPM_DEVICE_TYPE_MONITOR:
539
case UP_DEVICE_KIND_MONITOR:
837
540
name = _("monitor battery");
839
case XFPM_DEVICE_TYPE_MOUSE:
542
case UP_DEVICE_KIND_MOUSE:
840
543
name = _("mouse battery");
842
case XFPM_DEVICE_TYPE_KBD:
545
case UP_DEVICE_KIND_KEYBOARD:
843
546
name = _("keyboard battery");
845
case XFPM_DEVICE_TYPE_PDA:
548
case UP_DEVICE_KIND_PDA:
846
549
name = _("PDA battery");
848
case XFPM_DEVICE_TYPE_PHONE:
551
case UP_DEVICE_KIND_PHONE:
849
552
name = _("Phone battery");
852
555
name = _("Unknown");
860
563
xfpm_battery_new (void)
862
565
XfpmBattery *battery = NULL;
864
567
battery = g_object_new (XFPM_TYPE_BATTERY, NULL);
866
569
return GTK_STATUS_ICON (battery);
869
572
void xfpm_battery_monitor_device (XfpmBattery *battery,
871
DBusGProxy *proxy_prop,
872
XfpmDeviceType device_type)
573
const char *object_path,
574
UpDeviceKind device_type)
874
577
battery->priv->type = device_type;
875
battery->priv->proxy_prop = proxy_prop;
876
battery->priv->proxy = proxy;
578
battery->priv->client = up_client_new();
877
579
battery->priv->icon_prefix = xfpm_battery_get_icon_prefix_device_enum_type (device_type);
878
580
battery->priv->battery_name = xfpm_battery_get_name (device_type);
881
dbus_g_proxy_add_signal (proxy, "Changed", G_TYPE_INVALID);
882
dbus_g_proxy_connect_signal (proxy, "Changed",
883
G_CALLBACK (xfpm_battery_changed_cb), battery, NULL);
582
device = up_device_new();
583
up_device_set_object_path_sync (device, object_path, NULL, NULL);
584
battery->priv->device = device;
585
#if UP_CHECK_VERSION(0, 99, 0)
586
battery->priv->sig_up = g_signal_connect (battery->priv->device, "notify", G_CALLBACK (xfpm_battery_changed_cb), battery);
588
battery->priv->sig_up = g_signal_connect (battery->priv->device, "changed", G_CALLBACK (xfpm_battery_changed_cb), battery);
885
590
g_object_set (G_OBJECT (battery),
886
591
"has-tooltip", TRUE,
889
xfpm_battery_changed_cb (proxy, battery);
594
xfpm_battery_refresh (battery, device);
892
XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery)
597
UpDeviceKind xfpm_battery_get_device_type (XfpmBattery *battery)
894
g_return_val_if_fail (XFPM_IS_BATTERY (battery), XFPM_DEVICE_TYPE_UNKNOWN );
599
g_return_val_if_fail (XFPM_IS_BATTERY (battery), UP_DEVICE_KIND_UNKNOWN );
896
601
return battery->priv->type;
899
604
XfpmBatteryCharge xfpm_battery_get_charge (XfpmBattery *battery)
901
606
g_return_val_if_fail (XFPM_IS_BATTERY (battery), XFPM_BATTERY_CHARGE_UNKNOWN);
903
608
return battery->priv->charge;
906
611
const gchar *xfpm_battery_get_battery_name (XfpmBattery *battery)
908
613
g_return_val_if_fail (XFPM_IS_BATTERY (battery), NULL);
910
615
return battery->priv->battery_name;
913
618
gchar *xfpm_battery_get_time_left (XfpmBattery *battery)
915
620
g_return_val_if_fail (XFPM_IS_BATTERY (battery), NULL);
917
622
return xfpm_battery_get_time_string (battery->priv->time_to_empty);