# HG changeset patch # User Jan Dj¸«£rv # Date 1165146273 0 # Node ID 42ad3938ee1a7f4be7fc6c19d8dc26bf3d9d5d9c # Parent dd30954df7e19f3a229f4a4df6fcb3b8436e3664 (update_frame_tool_bar): Handle modifying a toolbar item without an image. diff -r dd30954df7e1 -r 42ad3938ee1a src/gtkutil.c --- 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),