aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-09-23 12:51:34 -0500
committerTed Gould <ted@canonical.com>2009-09-23 12:51:34 -0500
commit5a40fa084024e174cd1e76781102d1c366a13d0a (patch)
tree3888ccc519fd751ffbfadb1b7550cdafeb085173
parent40a0102f12f2c355d32394a8480fe953726b65c9 (diff)
downloadayatana-indicator-messages-5a40fa084024e174cd1e76781102d1c366a13d0a.tar.gz
ayatana-indicator-messages-5a40fa084024e174cd1e76781102d1c366a13d0a.tar.bz2
ayatana-indicator-messages-5a40fa084024e174cd1e76781102d1c366a13d0a.zip
Putting in a little code to scale icons.
-rw-r--r--src/indicator-messages.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/indicator-messages.c b/src/indicator-messages.c
index a3f22aa..070b2be 100644
--- a/src/indicator-messages.c
+++ b/src/indicator-messages.c
@@ -194,7 +194,27 @@ new_indicator_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusm
mi_data->icon = gtk_image_new();
GdkPixbuf * pixbuf = dbusmenu_menuitem_property_get_image(newitem, INDICATOR_MENUITEM_PROP_ICON);
if (pixbuf != NULL) {
- gtk_image_set_from_pixbuf(GTK_IMAGE(mi_data->icon), pixbuf);
+ /* If we've got a pixbuf we need to make sure it's of a reasonable
+ size to fit in the menu. If not, rescale it. */
+ GdkPixbuf * resized_pixbuf;
+ gint width, height;
+ gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height);
+ if (gdk_pixbuf_get_width(pixbuf) > width ||
+ gdk_pixbuf_get_height(pixbuf) > height) {
+ resized_pixbuf = gdk_pixbuf_scale_simple(pixbuf,
+ width,
+ height,
+ GDK_INTERP_BILINEAR);
+ } else {
+ resized_pixbuf = pixbuf;
+ }
+
+ gtk_image_set_from_pixbuf(GTK_IMAGE(mi_data->icon), resized_pixbuf);
+
+ /* The other pixbuf should be free'd by the dbusmenu. */
+ if (resized_pixbuf != pixbuf) {
+ g_object_unref(resized_pixbuf);
+ }
}
gtk_misc_set_alignment(GTK_MISC(mi_data->icon), 0.0, 0.5);
gtk_box_pack_start(GTK_BOX(hbox), mi_data->icon, FALSE, FALSE, 0);