diff options
-rw-r--r-- | debian/changelog | 21 | ||||
-rw-r--r-- | src/indicator-messages.c | 48 |
2 files changed, 54 insertions, 15 deletions
diff --git a/debian/changelog b/debian/changelog index f51b8ce..91778f9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,24 +1,19 @@ -indicator-messages (0.2.3-0ubuntu1~ppa3~minwidth2) karmic; urgency=low +indicator-messages (0.2.3-0ubuntu1~ppa4) UNRELEASED; urgency=low - * Small bug with the blacklist not resorting. + * Merging in the min menu width feature (LP: #428292) - -- Ted Gould <ted@ubuntu.com> Wed, 23 Sep 2009 16:09:04 -0500 + -- Ted Gould <ted@ubuntu.com> Thu, 24 Sep 2009 12:46:02 -0500 -indicator-messages (0.2.3-0ubuntu1~ppa3~minwidth2) karmic; urgency=low +indicator-messages (0.2.3-0ubuntu1~ppa3) karmic; urgency=low - * Too big + * Merging in icon scaling branch from trunk. Now better icons. + (LP: #433143) - -- Ted Gould <ted@ubuntu.com> Wed, 23 Sep 2009 15:59:26 -0500 - -indicator-messages (0.2.3-0ubuntu1~ppa3~minwidth1) karmic; urgency=low - - * Putting in a min-width for launchers - - -- Ted Gould <ted@ubuntu.com> Wed, 23 Sep 2009 15:55:47 -0500 + -- Ted Gould <ted@ubuntu.com> Thu, 24 Sep 2009 12:38:36 -0500 indicator-messages (0.2.3-0ubuntu1~ppa2) karmic; urgency=low - * Merging in updated trunk + * Merging in updated trunk (LP: #434097 and LP: #435184) -- Ted Gould <ted@ubuntu.com> Wed, 23 Sep 2009 15:52:59 -0500 diff --git a/src/indicator-messages.c b/src/indicator-messages.c index c86389c..0d0e294 100644 --- a/src/indicator-messages.c +++ b/src/indicator-messages.c @@ -164,7 +164,29 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, in is already cached, shouldn't be a big deal really. */ GdkPixbuf * pixbuf = dbusmenu_menuitem_property_get_image(mi, 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) { + g_debug("Resizing icon from %dx%d to %dx%d", gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), width, height); + resized_pixbuf = gdk_pixbuf_scale_simple(pixbuf, + width, + height, + GDK_INTERP_BILINEAR); + } else { + g_debug("Happy with icon sized %dx%d", gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf)); + 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); + } } } else { g_warning("Indicator Item property '%s' unknown", prop); @@ -194,7 +216,29 @@ 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) { + g_debug("Resizing icon from %dx%d to %dx%d", gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), width, height); + resized_pixbuf = gdk_pixbuf_scale_simple(pixbuf, + width, + height, + GDK_INTERP_BILINEAR); + } else { + g_debug("Happy with icon sized %dx%d", gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf)); + 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); |