aboutsummaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2014-03-25 14:48:57 -0500
committerCharles Kerr <charles.kerr@canonical.com>2014-03-25 14:48:57 -0500
commit8fcb63c1e8fed2988f811c3352efa0077c950162 (patch)
treeb821822f4100b53b803261722aa4aa4716e2ba3b /src/device.c
parent9b33101ad8a9fc093e226c25e497fd8b1d51aee5 (diff)
parent6b9e3d4fb5e11d5d09bc376aa2a56db6a02b55ee (diff)
downloadayatana-indicator-power-8fcb63c1e8fed2988f811c3352efa0077c950162.tar.gz
ayatana-indicator-power-8fcb63c1e8fed2988f811c3352efa0077c950162.tar.bz2
ayatana-indicator-power-8fcb63c1e8fed2988f811c3352efa0077c950162.zip
sync to lp:indicator-power
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c169
1 files changed, 68 insertions, 101 deletions
diff --git a/src/device.c b/src/device.c
index 8b97ef5..e3b655a 100644
--- a/src/device.c
+++ b/src/device.c
@@ -543,20 +543,19 @@ device_kind_to_localised_string (UpDeviceKind kind)
* between 30 seconds and one minute; otherwise
* * the empty string.
*/
-static void
-get_brief_time_remaining (const IndicatorPowerDevice * device,
- char * str,
- gulong size)
+static char *
+get_brief_time_remaining (const IndicatorPowerDevice * device)
{
+ gchar * str = NULL;
const IndicatorPowerDevicePrivate * p = device->priv;
if (p->time > 0)
{
int minutes = p->time / 60;
- int hours = minutes / 60;
+ const int hours = minutes / 60;
minutes %= 60;
- g_snprintf (str, size, "%0d:%02d", hours, minutes);
+ str = g_strdup_printf("%0d:%02d", hours, minutes);
}
else if (p->inestimable != NULL)
{
@@ -564,21 +563,15 @@ get_brief_time_remaining (const IndicatorPowerDevice * device,
if (elapsed < 30)
{
- g_snprintf (str, size, _("estimating…"));
+ str = g_strdup_printf (_("estimating…"));
}
else if (elapsed < 60)
{
- g_snprintf (str, size, _("unknown"));
- }
- else
- {
- *str = '\0';
+ str = g_strdup_printf (_("unknown"));
}
}
- else
- {
- *str = '\0';
- }
+
+ return str;
}
/**
@@ -588,19 +581,11 @@ get_brief_time_remaining (const IndicatorPowerDevice * device,
* * if the component is charging, it should be “H:MM to charge”
* * if the component is discharging, it should be “H:MM left”.
*/
-static void
-get_expanded_time_remaining (const IndicatorPowerDevice * device,
- char * str,
- gulong size)
+static char*
+get_expanded_time_remaining (const IndicatorPowerDevice * device)
{
- const IndicatorPowerDevicePrivate * p;
-
- g_return_if_fail (str != NULL);
- g_return_if_fail (size > 0);
- *str = '\0';
- g_return_if_fail (INDICATOR_IS_POWER_DEVICE(device));
-
- p = device->priv;
+ char * str = NULL;
+ const IndicatorPowerDevicePrivate * p = device->priv;
if (p->time && ((p->state == UP_DEVICE_STATE_CHARGING) || (p->state == UP_DEVICE_STATE_DISCHARGING)))
{
@@ -611,39 +596,33 @@ get_expanded_time_remaining (const IndicatorPowerDevice * device,
if (p->state == UP_DEVICE_STATE_CHARGING)
{
/* TRANSLATORS: H:MM (hours, minutes) to charge the battery. Example: "1:30 to charge" */
- g_snprintf (str, size, _("%0d:%02d to charge"), hours, minutes);
+ str = g_strdup_printf (_("%0d:%02d to charge"), hours, minutes);
}
else // discharging
{
/* TRANSLATORS: H:MM (hours, minutes) to discharge the battery. Example: "1:30 left"*/
- g_snprintf (str, size, _("%0d:%02d left"), hours, minutes);
+ str = g_strdup_printf (_("%0d:%02d left"), hours, minutes);
}
}
else
{
- get_brief_time_remaining (device, str, size);
+ str = get_brief_time_remaining (device);
}
+
+ return str;
}
/**
* The '''accessible time-remaining string''' for a component
* should be the same as the expanded time-remaining string,
* except the H:MM time should be rendered as “''H'' hours ''M'' minutes”,
- * or just as “''M'' * minutes” if the time is less than one hour.
+ * or just as “''M'' minutes” if the time is less than one hour.
*/
-static void
-get_accessible_time_remaining (const IndicatorPowerDevice * device,
- char * str,
- gulong size)
+static char *
+get_accessible_time_remaining (const IndicatorPowerDevice * device)
{
- const IndicatorPowerDevicePrivate * p;
-
- g_return_if_fail (str != NULL);
- g_return_if_fail (size > 0);
- *str = '\0';
- g_return_if_fail (INDICATOR_IS_POWER_DEVICE(device));
-
- p = device->priv;
+ char * str = NULL;
+ const IndicatorPowerDevicePrivate * p = device->priv;
if (p->time && ((p->state == UP_DEVICE_STATE_CHARGING) || (p->state == UP_DEVICE_STATE_DISCHARGING)))
{
@@ -657,7 +636,7 @@ get_accessible_time_remaining (const IndicatorPowerDevice * device,
{
/* TRANSLATORS: "X (hour,hours) Y (minute,minutes) to charge" the battery.
Example: "1 hour 10 minutes to charge" */
- g_snprintf (str, size, _("%d %s %d %s to charge"),
+ str = g_strdup_printf (_("%d %s %d %s to charge"),
hours, g_dngettext (NULL, "hour", "hours", hours),
minutes, g_dngettext (NULL, "minute", "minutes", minutes));
}
@@ -665,7 +644,7 @@ get_accessible_time_remaining (const IndicatorPowerDevice * device,
{
/* TRANSLATORS: "Y (minute,minutes) to charge" the battery.
Example: "59 minutes to charge" */
- g_snprintf (str, size, _("%d %s to charge"),
+ str = g_strdup_printf (_("%d %s to charge"),
minutes, g_dngettext (NULL, "minute", "minutes", minutes));
}
}
@@ -675,7 +654,7 @@ get_accessible_time_remaining (const IndicatorPowerDevice * device,
{
/* TRANSLATORS: "X (hour,hours) Y (minute,minutes) left" until the battery's empty.
Example: "1 hour 10 minutes left" */
- g_snprintf (str, size, _("%d %s %d %s left"),
+ str = g_strdup_printf (_("%d %s %d %s left"),
hours, g_dngettext (NULL, "hour", "hours", hours),
minutes, g_dngettext (NULL, "minute", "minutes", minutes));
}
@@ -683,15 +662,17 @@ get_accessible_time_remaining (const IndicatorPowerDevice * device,
{
/* TRANSLATORS: "Y (minute,minutes) left" until the battery's empty.
Example: "59 minutes left" */
- g_snprintf (str, size, _("%d %s left"),
+ str = g_strdup_printf (_("%d %s left"),
minutes, g_dngettext (NULL, "minute", "minutes", minutes));
}
}
}
else
{
- get_brief_time_remaining (device, str, size);
+ str = get_brief_time_remaining (device);
}
+
+ return str;
}
/**
@@ -727,72 +708,61 @@ time_is_relevant (const IndicatorPowerDevice * device)
* visible label, except with the accessible time-remaining string
* instead of the expanded time-remaining string.
*/
-static void
+static char *
get_menuitem_text (const IndicatorPowerDevice * device,
- gchar * str,
- gulong size,
gboolean accessible)
{
+ char * str = NULL;
const IndicatorPowerDevicePrivate * p = device->priv;
const char * kind_str = device_kind_to_localised_string (p->kind);
if (p->state == UP_DEVICE_STATE_FULLY_CHARGED)
{
/* TRANSLATORS: example: "battery (charged)" */
- g_snprintf (str, size, _("%s (charged)"), kind_str);
+ str = g_strdup_printf (_("%s (charged)"), kind_str);
}
else
{
- char buf[64];
+ char * time_str = NULL;
if (time_is_relevant (device))
{
if (accessible)
- get_accessible_time_remaining (device, buf, sizeof(buf));
+ time_str = get_accessible_time_remaining (device);
else
- get_expanded_time_remaining (device, buf, sizeof(buf));
- }
- else
- {
- *buf = '\0';
+ time_str = get_expanded_time_remaining (device);
}
- if (*buf)
+ if (time_str && *time_str)
{
/* TRANSLATORS: example: "battery (time remaining)" */
- g_snprintf (str, size, _("%s (%s)"), kind_str, buf);
+ str = g_strdup_printf (_("%s (%s)"), kind_str, time_str);
}
else
{
- g_strlcpy (str, kind_str, size);
+ str = g_strdup (kind_str);
}
+
+ g_free (time_str);
}
+
+ return str;
}
-void
-indicator_power_device_get_readable_text (const IndicatorPowerDevice * device,
- gchar * str,
- gulong size)
+char *
+indicator_power_device_get_readable_text (const IndicatorPowerDevice * device)
{
- g_return_if_fail (str != NULL);
- g_return_if_fail (size > 0);
- *str = '\0';
- g_return_if_fail (INDICATOR_IS_POWER_DEVICE(device));
+ g_return_val_if_fail (INDICATOR_IS_POWER_DEVICE(device), NULL);
- get_menuitem_text (device, str, size, FALSE);
+ return get_menuitem_text (device, FALSE);
}
-void
-indicator_power_device_get_accessible_text (const IndicatorPowerDevice * device,
- gchar * str,
- gulong size)
+char *
+indicator_power_device_get_accessible_text (const IndicatorPowerDevice * device)
{
- g_return_if_fail (str != NULL);
- g_return_if_fail (size > 0);
- *str = '\0';
- g_return_if_fail (INDICATOR_IS_POWER_DEVICE(device));
+ g_return_val_if_fail (INDICATOR_IS_POWER_DEVICE(device), NULL);
- get_menuitem_text (device, str, size, TRUE);
+ return get_menuitem_text (device, TRUE);
}
/**
@@ -807,20 +777,16 @@ indicator_power_device_get_accessible_text (const IndicatorPowerDevice * device,
*
* If both conditions are true, the time and percentage should be separated by a space.
*/
-void
+char*
indicator_power_device_get_readable_title (const IndicatorPowerDevice * device,
- gchar * str,
- gulong size,
gboolean want_time,
gboolean want_percent)
{
- char tr[64];
+ char * str = NULL;
+ char * time_str = NULL;
const IndicatorPowerDevicePrivate * p;
- g_return_if_fail (str != NULL);
- g_return_if_fail (size > 0);
- *str = '\0';
- g_return_if_fail (INDICATOR_IS_POWER_DEVICE(device));
+ g_return_val_if_fail (INDICATOR_IS_POWER_DEVICE(device), NULL);
p = device->priv;
@@ -835,45 +801,46 @@ indicator_power_device_get_readable_title (const IndicatorPowerDevice * device,
// try to build the time-remaining string
if (want_time)
{
- get_brief_time_remaining (device, tr, sizeof(tr));
-
- if (!*tr)
- want_time = FALSE;
+ time_str = get_brief_time_remaining (device);
+ want_time = time_str && *time_str;
}
if (want_time && want_percent)
{
/* TRANSLATORS: after the icon, a time-remaining string + battery %. Example: "(0:59, 33%)" */
- g_snprintf (str, size, _("(%s, %.0lf%%)"), tr, p->percentage);
+ str = g_strdup_printf (_("(%s, %.0lf%%)"), time_str, p->percentage);
}
else if (want_time)
{
/* TRANSLATORS: after the icon, a time-remaining string Example: "(0:59)" */
- g_snprintf (str, size, _("(%s)"), tr);
+ str = g_strdup_printf (_("(%s)"), time_str);
}
else if (want_percent)
{
/* TRANSLATORS: after the icon, a battery %. Example: "(33%)" */
- g_snprintf (str, size, _("(%.0lf%%)"), p->percentage);
+ str = g_strdup_printf (_("(%.0lf%%)"), p->percentage);
}
else
{
- *str = '\0';
+ str = NULL;
}
+
+ g_free (time_str);
+ return str;
}
/**
* Regardless, the accessible name for the whole menu title should be the same
* as the accessible name for that thing’s component inside the menu itself.
*/
-void
+char *
indicator_power_device_get_accessible_title (const IndicatorPowerDevice * device,
- gchar * str,
- gulong size,
gboolean want_time G_GNUC_UNUSED,
gboolean want_percent G_GNUC_UNUSED)
{
- indicator_power_device_get_accessible_text (device, str, size);
+ g_return_val_if_fail (INDICATOR_IS_POWER_DEVICE(device), NULL);
+
+ return indicator_power_device_get_accessible_text (device);
}
/***