diff options
-rw-r--r-- | src/indicator-power.c | 72 |
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)); } |