From ea49a097760f4757c0fafa460724f4b642d649c0 Mon Sep 17 00:00:00 2001 From: infirit Date: Sat, 22 Nov 2014 15:30:47 +0100 Subject: Add a gtkimage with the current pixbuf to button-widget We need to add a child to the button to get the right allocation of the pixbuf. When the button is created without a pixbuf, get_preferred_width/height are called the first time when the widget is allocated and 0x0 size is cached by gtksizerequest. Since the widget doesn't change its size when a pixbuf is set, gtk_widget_queue_resize() always uses the cached values instead of calling get_preferred_width_height() again. So the actual size, based on pixbuf size, is never used. We are overriding the draw() method, so having a child doesn't affect the widget rendering anyway. Taken from gnome-panel commit: 0b8ace11087855d741cdeed97dc839db50319ae8 from: Carlos Garcia Campos --- mate-panel/button-widget.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mate-panel/button-widget.c b/mate-panel/button-widget.c index 475446c7..f7001987 100644 --- a/mate-panel/button-widget.c +++ b/mate-panel/button-widget.c @@ -240,6 +240,17 @@ button_widget_reload_pixbuf (ButtonWidget *button) (GtkIconSize) -1, NULL); g_free (error); } + + /* We need to add a child to the button to get the right allocation of the pixbuf. + * When the button is created without a pixbuf, get_preferred_width/height are + * called the first time when the widget is allocated and 0x0 size is cached by + * gtksizerequest. Since the widget doesn't change its size when a pixbuf is set, + * gtk_widget_queue_resize() always uses the cached values instead of calling + * get_preferred_width_height() again. So the actual size, based on pixbuf size, + * is never used. We are overriding the draw() method, so having a child doesn't + * affect the widget rendering anyway. + */ + gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_pixbuf (button->priv->pixbuf)); } button->priv->pixbuf_hc = make_hc_pixbuf (button->priv->pixbuf); -- cgit v1.2.1