Mercurial > emacs
changeset 74376:42ad3938ee1a
(update_frame_tool_bar): Handle modifying a toolbar item
without an image.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Sun, 03 Dec 2006 11:44:33 +0000 |
parents | dd30954df7e1 |
children | 9a698acca252 |
files | src/gtkutil.c |
diffstat | 1 files changed, 27 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gtkutil.c Sun Dec 03 11:44:22 2006 +0000 +++ b/src/gtkutil.c Sun Dec 03 11:44:33 2006 +0000 @@ -3684,6 +3684,9 @@ struct image *img; Lisp_Object image; GtkWidget *wicon = iter ? GTK_WIDGET (iter->data) : 0; + GtkToolItem *ti = NULL; + GtkWidget *wvbox; + GList *chlist; if (iter) iter = g_list_next (iter); @@ -3723,22 +3726,40 @@ if (wicon) gtk_widget_hide (wicon); else + /* Insert an empty (non-image) button */ gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), gtk_tool_button_new (NULL, ""), i); continue; } - if (! wicon) + if (wicon) + { + /* The child of the tool bar is a button. Inside that button + is a vbox. Inside that vbox is the GtkImage. */ + wvbox = gtk_bin_get_child (GTK_BIN (wicon)); + chlist = gtk_container_get_children (GTK_CONTAINER (wvbox)); + if (chlist == NULL) + /* In this case, we inserted an empty button (above) with no image */ + ti = GTK_TOOL_ITEM (wicon); + } + + if (! wicon || ti != NULL) { GtkWidget *w = xg_get_image_for_pixmap (f, img, x->widget, NULL); - GtkToolItem *ti = gtk_tool_button_new (w, ""); - gtk_misc_set_padding (GTK_MISC (w), hmargin, vmargin); - gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), - ti, - i); + + if (ti == NULL) + { + ti = gtk_tool_button_new (w, ""); + + gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), ti, i); + } + else + gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (ti), w); + + /* The EMACS_INT cast avoids a warning. */ g_signal_connect (GTK_WIDGET (ti), "clicked", GTK_SIGNAL_FUNC (xg_tool_bar_callback),