From 4bd654838bff866644358212a106dfff77c33c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Wed, 13 Jul 2011 15:56:25 +0200 Subject: Create new function to store the logic to put the primary device --- src/indicator-power.c | 67 +++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/indicator-power.c b/src/indicator-power.c index 48d85a6..bbc653b 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -473,17 +473,13 @@ get_primary_device (GVariant *devices) } static void -get_devices_cb (GObject *source_object, - GAsyncResult *res, - gpointer user_data) +put_primary_device (IndicatorPower *self, + GVariant *device) { - IndicatorPower *self = INDICATOR_POWER (user_data); IndicatorPowerPrivate *priv = self->priv; UpDeviceKind kind; UpDeviceState state; GIcon *device_gicons; - GVariant *devices_container; - GError *error = NULL; gchar *short_details = NULL; gchar *details = NULL; gchar *device_icon = NULL; @@ -491,29 +487,9 @@ get_devices_cb (GObject *source_object, gdouble percentage; guint64 time; const gchar *device_name; - gchar *short_timestring = NULL; - gchar *detailed_timestring = NULL; - - devices_container = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error); - if (devices_container == NULL) - { - g_printerr ("Error getting devices: %s\n", error->message); - g_error_free (error); - - return; - } - priv->devices = g_variant_get_child_value (devices_container, 0); - - priv->device = get_primary_device (priv->devices); - if (priv->device == NULL) - { - g_printerr ("Error getting primary device"); - - return; - } /* set the icon and text */ - g_variant_get (priv->device, + g_variant_get (device, "(susdut)", &object_path, &kind, @@ -542,16 +518,45 @@ get_devices_cb (GObject *source_object, short_details); set_accessible_desc (self, details); - build_menu (self); - g_free (short_details); g_free (details); g_free (device_icon); - g_free (short_timestring); - g_free (detailed_timestring); g_free (object_path); } +static void +get_devices_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + IndicatorPower *self = INDICATOR_POWER (user_data); + IndicatorPowerPrivate *priv = self->priv; + GVariant *devices_container; + GError *error = NULL; + + devices_container = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error); + if (devices_container == NULL) + { + g_printerr ("Error getting devices: %s\n", error->message); + g_error_free (error); + + return; + } + priv->devices = g_variant_get_child_value (devices_container, 0); + + priv->device = get_primary_device (priv->devices); + if (priv->device == NULL) + { + g_printerr ("Error getting primary device"); + + return; + } + + put_primary_device (self, priv->device); + + build_menu (self); +} + static void receive_signal (GDBusProxy *proxy, gchar *sender_name, -- cgit v1.2.3 From af2a41775611c6c5936968b783a9040f1a51dd3c Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Wed, 13 Jul 2011 15:13:46 -0400 Subject: draw option checkbox as check, not radio --- src/indicator-power.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/indicator-power.c b/src/indicator-power.c index bbc653b..7f42b43 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -417,7 +417,6 @@ build_menu (IndicatorPower *self) /* options */ item = gtk_check_menu_item_new_with_label (_("Show Time Remaining")); - g_object_set (item, "draw-as-radio", TRUE, NULL); g_signal_connect (G_OBJECT (item), "toggled", G_CALLBACK (option_toggled_cb), self); gtk_menu_shell_append (GTK_MENU_SHELL (priv->menu), item); -- cgit v1.2.3 From d104cd9b6b891271785a61e0f6794fda893ced4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Thu, 14 Jul 2011 12:52:28 +0200 Subject: Show the apropiate icon depending of the status of the devices Follow https://wiki.ubuntu.com/BatteryStatusMenu : - If anything is discharging, the menu title should represent the thing that is estimated to lose power first. - If no devices are discharging, the menu title should represent the device that is estimated to take longest to charge. --- src/indicator-power.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/indicator-power.c b/src/indicator-power.c index bbc653b..9280bdb 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -443,11 +443,18 @@ get_primary_device (GVariant *devices) { UpDeviceKind kind; UpDeviceState state; + GVariant *device; + GVariant *primary_device_charging = NULL; + GVariant *primary_device_discharging = NULL; GVariant *primary_device = NULL; + gboolean charging = FALSE; + gboolean discharging = FALSE; gchar *object_path; gchar *device_icon; gdouble percentage; guint64 time; + guint64 min_discharging_time = G_MAXUINT64; + guint64 max_charging_time = 0; gsize n_devices; guint i; @@ -456,8 +463,8 @@ get_primary_device (GVariant *devices) for (i = 0; i < n_devices; i++) { - primary_device = g_variant_get_child_value (devices, i); - g_variant_get (primary_device, + device = g_variant_get_child_value (devices, i); + g_variant_get (device, "(susdut)", &object_path, &kind, @@ -467,6 +474,37 @@ get_primary_device (GVariant *devices) &time); g_debug ("%s: got data from object %s", G_STRFUNC, object_path); + + if (primary_device == NULL && kind == UP_DEVICE_KIND_BATTERY) + primary_device = device; + + if (state == UP_DEVICE_STATE_DISCHARGING) + { + discharging = TRUE; + if (time < min_discharging_time) + { + min_discharging_time = time; + primary_device_discharging = device; + } + } + else if (state == UP_DEVICE_STATE_CHARGING) + { + charging = TRUE; + if (time > max_charging_time) + { + max_charging_time = time; + primary_device_charging = device; + } + } + } + + if (discharging) + { + primary_device = primary_device_discharging; + } + else if (charging) + { + primary_device = primary_device_charging; } return primary_device; -- cgit v1.2.3 From cabdda614d6a6c31e4423a992a02e0cd66357464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Thu, 14 Jul 2011 15:03:26 +0200 Subject: Refine the text of the items in the menu to follow the specification - "X (H:MM to charge)" if it is charging, with the accessible name "X: MM minutes to charge" or "X: H hours MM minutes to charge" - "X (H:MM left)" if it is discharging with less than 12 hours left,x with the accessible name "X: MM minutes left" or "X: H hours MM minutes left". --- src/indicator-power.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/indicator-power.c b/src/indicator-power.c index fd3429f..ece0531 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -262,7 +262,8 @@ build_device_time_details (const gchar *device_name, UpDeviceState state, gdouble percentage, gchar **short_details, - gchar **details) + gchar **details, + gchar **accesible_name) { gchar *short_timestring = NULL; gchar *detailed_timestring = NULL; @@ -279,14 +280,18 @@ build_device_time_details (const gchar *device_name, if (state == UP_DEVICE_STATE_CHARGING) { /* TRANSLATORS: %2 is a time string, e.g. "1 hour 5 minutes" */ - *details = g_strdup_printf (_("%s (%s until charged (%.0lf%%))"), - device_name, detailed_timestring, percentage); + *accesible_name = g_strdup_printf (_("%s (%s to charge (%.0lf%%))"), + device_name, detailed_timestring, percentage); + *details = g_strdup_printf (_("%s (%s to charge)"), + device_name, short_timestring); } else if (state == UP_DEVICE_STATE_DISCHARGING) { /* TRANSLATORS: %2 is a time string, e.g. "1 hour 5 minutes" */ - *details = g_strdup_printf (_("%s (%s until empty (%.0lf%%))"), - device_name, detailed_timestring, percentage); + *accesible_name = g_strdup_printf (_("%s (%s left (%.0lf%%))"), + device_name, detailed_timestring, percentage); + *details = g_strdup_printf (_("%s (%s left)"), + device_name, short_timestring); } } else @@ -295,6 +300,7 @@ build_device_time_details (const gchar *device_name, * used when we don't have a time value */ *details = g_strdup_printf (_("%s (%.0lf%%)"), device_name, percentage); + *accesible_name = g_strdup (*details); *short_details = g_strdup_printf (_("(%.0lf%%)"), percentage); } @@ -330,6 +336,7 @@ menu_add_device (GtkMenu *menu, const gchar *device_name; gchar *short_details = NULL; gchar *details = NULL; + gchar *accesible_name = NULL; if (device == NULL) return; @@ -355,7 +362,7 @@ menu_add_device (GtkMenu *menu, device_name = device_kind_to_localised_string (kind); - build_device_time_details (device_name, time, state, percentage, &short_details, &details); + build_device_time_details (device_name, time, state, percentage, &short_details, &details, &accesible_name); /* Create menu item */ item = gtk_image_menu_item_new (); @@ -519,6 +526,7 @@ put_primary_device (IndicatorPower *self, GIcon *device_gicons; gchar *short_details = NULL; gchar *details = NULL; + gchar *accesible_name = NULL; gchar *device_icon = NULL; gchar *object_path = NULL; gdouble percentage; @@ -549,11 +557,11 @@ put_primary_device (IndicatorPower *self, device_name = device_kind_to_localised_string (kind); /* get the description */ - build_device_time_details (device_name, time, state, percentage, &short_details, &details); + build_device_time_details (device_name, time, state, percentage, &short_details, &details, &accesible_name); gtk_label_set_label (GTK_LABEL (priv->label), short_details); - set_accessible_desc (self, details); + set_accessible_desc (self, accesible_name); g_free (short_details); g_free (details); -- cgit v1.2.3 From ad01db76cb63adb53708cfaf5cf27a1e9989aa4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Thu, 14 Jul 2011 15:13:29 +0200 Subject: Only show the remaining time if it is discharging with less than 12 hours left --- src/indicator-power.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/indicator-power.c b/src/indicator-power.c index ece0531..5395cc9 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -287,11 +287,19 @@ build_device_time_details (const gchar *device_name, } else if (state == UP_DEVICE_STATE_DISCHARGING) { - /* TRANSLATORS: %2 is a time string, e.g. "1 hour 5 minutes" */ - *accesible_name = g_strdup_printf (_("%s (%s left (%.0lf%%))"), - device_name, detailed_timestring, percentage); - *details = g_strdup_printf (_("%s (%s left)"), - device_name, short_timestring); + if (time > 43200) /* 12 hours */ + { + *accesible_name = g_strdup_printf (_("%s"), device_name); + *details = g_strdup_printf (_("%s"), device_name); + } + else + { + /* TRANSLATORS: %2 is a time string, e.g. "1 hour 5 minutes" */ + *accesible_name = g_strdup_printf (_("%s (%s left (%.0lf%%))"), + device_name, detailed_timestring, percentage); + *details = g_strdup_printf (_("%s (%s left)"), + device_name, short_timestring); + } } } else -- cgit v1.2.3 From 0cdc5de675d492c4df77228cba8deac02e4672ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Thu, 14 Jul 2011 16:19:55 +0200 Subject: Show "X (charged)" if it is fully charged and not discharging --- src/indicator-power.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/indicator-power.c b/src/indicator-power.c index 5395cc9..8005c5d 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -304,13 +304,22 @@ build_device_time_details (const gchar *device_name, } else { - /* TRANSLATORS: %2 is a percentage value. Note: this string is only - * used when we don't have a time value */ - *details = g_strdup_printf (_("%s (%.0lf%%)"), - device_name, percentage); - *accesible_name = g_strdup (*details); - *short_details = g_strdup_printf (_("(%.0lf%%)"), - percentage); + if (state == UP_DEVICE_STATE_FULLY_CHARGED) + { + *details = g_strdup_printf (_("%s (charged)"), device_name); + *accesible_name = g_strdup (*details); + *short_details = g_strdup (*details); + } + else + { + /* TRANSLATORS: %2 is a percentage value. Note: this string is only + * used when we don't have a time value */ + *details = g_strdup_printf (_("%s (%.0lf%%)"), + device_name, percentage); + *accesible_name = g_strdup (*details); + *short_details = g_strdup_printf (_("(%.0lf%%)"), + percentage); + } } } -- cgit v1.2.3