aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/indicator-power.c72
1 files changed, 49 insertions, 23 deletions
diff --git a/src/indicator-power.c b/src/indicator-power.c
index f94d27c..48d85a6 100644
--- a/src/indicator-power.c
+++ b/src/indicator-power.c
@@ -35,7 +35,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
/* Indicator Stuff */
#include <libindicator/indicator.h>
#include <libindicator/indicator-object.h>
-#include <libindicator/indicator-image-helper.h>
#define DEFAULT_ICON "gpm-battery-missing"
@@ -315,7 +314,7 @@ set_accessible_desc (IndicatorPower *self,
priv->accessible_desc = g_strdup (desc);
}
-static guint
+static void
menu_add_device (GtkMenu *menu,
GVariant *device)
{
@@ -323,18 +322,17 @@ menu_add_device (GtkMenu *menu,
UpDeviceState state;
GtkWidget *icon;
GtkWidget *item;
+ GIcon *device_gicons;
gchar *device_icon = NULL;
- gchar **device_icons;
gchar *object_path = NULL;
gdouble percentage;
guint64 time;
const gchar *device_name;
gchar *short_details = NULL;
gchar *details = NULL;
- guint n_devices = 0;
if (device == NULL)
- return n_devices;
+ return;
g_variant_get (device,
"(susdut)",
@@ -345,17 +343,21 @@ menu_add_device (GtkMenu *menu,
&state,
&time);
+ if (kind == UP_DEVICE_KIND_LINE_POWER)
+ return;
+
g_debug ("%s: got data from object %s", G_STRFUNC, object_path);
- n_devices++;
+ /* Process the data */
+ device_gicons = g_icon_new_for_string (device_icon, NULL);
+ icon = gtk_image_new_from_gicon (device_gicons,
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
- device_icons = g_strsplit (device_icon, " ", -1);
- icon = gtk_image_new_from_icon_name (device_icons[3], GTK_ICON_SIZE_SMALL_TOOLBAR);
- g_strfreev (device_icons);
device_name = device_kind_to_localised_string (kind);
build_device_time_details (device_name, time, state, percentage, &short_details, &details);
+ /* Create menu item */
item = gtk_image_menu_item_new ();
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), icon);
gtk_menu_item_set_label (GTK_MENU_ITEM (item), details);
@@ -363,6 +365,27 @@ menu_add_device (GtkMenu *menu,
g_signal_connect (G_OBJECT (item), "activate",
G_CALLBACK (show_info_cb), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+}
+
+static gsize
+menu_add_devices (GtkMenu *menu,
+ GVariant *devices)
+{
+ GVariant *device;
+ gsize n_devices;
+ guint i;
+
+ if (devices == NULL)
+ return 0;
+
+ n_devices = g_variant_n_children (devices);
+ g_debug ("Num devices: '%" G_GSIZE_FORMAT "'\n", n_devices);
+
+ for (i = 0; i < n_devices; i++)
+ {
+ device = g_variant_get_child_value (devices, i);
+ menu_add_device (menu, device);
+ }
return n_devices;
}
@@ -374,7 +397,7 @@ build_menu (IndicatorPower *self)
GtkWidget *item;
GtkWidget *image;
GList *children;
- guint n_devices = 0;
+ gsize n_devices = 0;
if (priv->menu == NULL)
priv->menu = GTK_MENU (gtk_menu_new ());
@@ -383,7 +406,7 @@ build_menu (IndicatorPower *self)
g_list_foreach (children, (GFunc) gtk_widget_destroy, NULL);
/* devices */
- n_devices += menu_add_device (priv->menu, priv->device);
+ n_devices = menu_add_devices (priv->menu, priv->devices);
/* only do the separator if we have at least one device */
if (n_devices != 0)
@@ -416,11 +439,10 @@ build_menu (IndicatorPower *self)
}
static GVariant *
-get_primary_device (GVariant *container)
+get_primary_device (GVariant *devices)
{
UpDeviceKind kind;
UpDeviceState state;
- GVariant *devices;
GVariant *primary_device = NULL;
gchar *object_path;
gchar *device_icon;
@@ -429,8 +451,6 @@ get_primary_device (GVariant *container)
gsize n_devices;
guint i;
- devices = g_variant_get_child_value (container, 0);
-
n_devices = g_variant_n_children (devices);
g_debug ("Num devices: '%" G_GSIZE_FORMAT "'\n", n_devices);
@@ -461,10 +481,11 @@ get_devices_cb (GObject *source_object,
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_icons;
gchar *device_icon = NULL;
gchar *object_path = NULL;
gdouble percentage;
@@ -473,14 +494,15 @@ get_devices_cb (GObject *source_object,
gchar *short_timestring = NULL;
gchar *detailed_timestring = NULL;
- priv->devices = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
- if (priv->devices == 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)
@@ -503,12 +525,13 @@ get_devices_cb (GObject *source_object,
g_debug ("%s: got data from object %s", G_STRFUNC, object_path);
/* set icon */
- device_icons = g_strsplit (device_icon, " ", -1);
- indicator_image_helper_update (priv->status_image,
- device_icons[3]);
- g_strfreev (device_icons);
+ device_gicons = g_icon_new_for_string (device_icon, NULL);
+ gtk_image_set_from_gicon (priv->status_image,
+ device_gicons,
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
gtk_widget_show (GTK_WIDGET (priv->status_image));
+
/* get the device name */
device_name = device_kind_to_localised_string (kind);
@@ -659,11 +682,14 @@ get_image (IndicatorObject *io)
{
IndicatorPower *self = INDICATOR_POWER (io);
IndicatorPowerPrivate *priv = self->priv;
+ GIcon *gicon;
if (priv->status_image == NULL)
{
/* Will create the status icon if it doesn't exist already */
- priv->status_image = indicator_image_helper (DEFAULT_ICON);
+ gicon = g_themed_icon_new (DEFAULT_ICON);
+ priv->status_image = GTK_IMAGE (gtk_image_new_from_gicon (gicon,
+ GTK_ICON_SIZE_LARGE_TOOLBAR));
gtk_widget_show (GTK_WIDGET (priv->status_image));
}