aboutsummaryrefslogtreecommitdiff
path: root/libindicator/indicator-image-helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'libindicator/indicator-image-helper.c')
-rw-r--r--libindicator/indicator-image-helper.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/libindicator/indicator-image-helper.c b/libindicator/indicator-image-helper.c
index 86d6c25..b404b8f 100644
--- a/libindicator/indicator-image-helper.c
+++ b/libindicator/indicator-image-helper.c
@@ -30,6 +30,9 @@ static void
refresh_image (GtkImage * image)
{
g_return_if_fail(GTK_IS_IMAGE(image));
+ const gchar * icon_filename = NULL;
+ GtkIconInfo * icon_info = NULL;
+ gint icon_size = 22;
GIcon * icon_names = (GIcon *)g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA);
g_return_if_fail(icon_names != NULL);
@@ -38,38 +41,35 @@ refresh_image (GtkImage * image)
GtkIconTheme * default_theme = gtk_icon_theme_get_default();
g_return_if_fail(default_theme != NULL);
- gint icon_size = 22;
-
- GtkStyle * style = gtk_widget_get_style(GTK_WIDGET(image));
- GValue styleprop = {0};
- gtk_style_get_style_property(style, GTK_TYPE_IMAGE, "x-ayatana-indicator-dynamic", &styleprop);
-
- if (G_VALUE_HOLDS_BOOLEAN(&styleprop) && g_value_get_boolean(&styleprop)) {
- PangoContext * context = gtk_widget_get_pango_context(GTK_WIDGET(image));
- PangoFontMetrics * metrics = pango_context_get_metrics(context, style->font_desc, pango_context_get_language(context));
- icon_size = PANGO_PIXELS(pango_font_metrics_get_ascent(metrics)) + PANGO_PIXELS(pango_font_metrics_get_descent(metrics));
- g_debug("Looking for icon size %d", icon_size);
- pango_font_metrics_unref(metrics);
- }
-
/* Look through the themes for that icon */
- GtkIconInfo * icon_info = gtk_icon_theme_lookup_by_gicon(default_theme, icon_names, icon_size, 0);
+ icon_info = gtk_icon_theme_lookup_by_gicon(default_theme, icon_names, icon_size, 0);
if (icon_info == NULL) {
- g_warning("Unable to find icon in theme.");
- return;
+ /* Try using the second item in the names, which should be the original filename supplied */
+ const gchar * const * names = g_themed_icon_get_names(G_THEMED_ICON( icon_names ));
+ if (names) {
+ icon_filename = names[1];
+ } else {
+ g_warning("Unable to find icon\n");
+ gtk_image_clear(image);
+ return;
+ }
+ } else {
+ /* Grab the filename */
+ icon_filename = gtk_icon_info_get_filename(icon_info);
}
-
- /* Grab the filename */
- const gchar * icon_filename = gtk_icon_info_get_filename(icon_info);
- g_return_if_fail(icon_filename != NULL); /* An error because we shouldn't get info without a filename */
+ g_return_if_fail(icon_filename != NULL); /* An error because we don't have a filename */
/* Build a pixbuf */
GError * error = NULL;
GdkPixbuf * pixbuf = gdk_pixbuf_new_from_file(icon_filename, &error);
- gtk_icon_info_free(icon_info);
+
+ if (icon_info != NULL) {
+ gtk_icon_info_free(icon_info);
+ }
if (pixbuf == NULL) {
- g_error("Unable to load icon from file '%s' because: %s", icon_filename, error == NULL ? "I don't know" : error->message);
+ g_warning("Unable to load icon from file '%s' because: %s", icon_filename, error == NULL ? "I don't know" : error->message);
+ gtk_image_clear(image);
return;
}
@@ -138,12 +138,14 @@ indicator_image_helper_update (GtkImage * image, const gchar * name)
g_return_if_fail(name != NULL);
g_return_if_fail(name[0] != '\0');
g_return_if_fail(image != NULL);
+ gboolean seen_previously = FALSE;
/* Build us a GIcon */
GIcon * icon_names = g_themed_icon_new_with_default_fallbacks(name);
+ g_warn_if_fail(icon_names != NULL);
g_return_if_fail(icon_names != NULL);
- gboolean seen_previously = (g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA) != NULL);
+ seen_previously = (g_object_get_data(G_OBJECT(image), INDICATOR_NAMES_DATA) != NULL);
/* Attach our names to the image */
g_object_set_data_full(G_OBJECT(image), INDICATOR_NAMES_DATA, icon_names, g_object_unref);