diff options
author | Ted Gould <ted@gould.cx> | 2010-11-11 09:25:43 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2010-11-11 09:25:43 -0600 |
commit | 69960b2da287fcd59b002fbee6083506df1784f9 (patch) | |
tree | 6690de70620175fe5d4a6b2f89b3b6b2d05abd37 /libindicator/indicator-image-helper.c | |
parent | ecc6acd2a576fcc11d51ded532f570fb29ab475e (diff) | |
parent | 022e4bfbcb06a66552007abc8f9f329ce86c9995 (diff) | |
download | libayatana-indicator-69960b2da287fcd59b002fbee6083506df1784f9.tar.gz libayatana-indicator-69960b2da287fcd59b002fbee6083506df1784f9.tar.bz2 libayatana-indicator-69960b2da287fcd59b002fbee6083506df1784f9.zip |
Merging in trunk to solve conflicts
Diffstat (limited to 'libindicator/indicator-image-helper.c')
-rw-r--r-- | libindicator/indicator-image-helper.c | 50 |
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); |