Проблема: есть GtkToolbar, в нем находится GtkToolItem, в который завернуто GtkMenuButton. Никак не пойму, как сделать так, что бы в меню переполнения находился объект с таки же меню, как в исходном GtkMenuButton. О существовании GtkMenuToolButton знаю, но мне нужен именно такой подход, плюс проблемы он не решает. Сжатый код, который демонстрирует проблему: постоянно вываливается
Gtk-WARNING **: gtk_menu_attach_to_widget(): menu already attached to GtkMenuButton
#include <gtk/gtk.h>
static gboolean
on_create (GtkToolItem *tool_item, gpointer data)
{
GtkWidget *menu_button;
GtkWidget *menu_item;
GtkMenu *submenu;
menu_button = gtk_bin_get_child(GTK_BIN(tool_item));
submenu = gtk_menu_button_get_popup(GTK_MENU_BUTTON(menu_button));
menu_item = gtk_menu_item_new_with_label ("goo!");
gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_item), GTK_WIDGET(submenu));
gtk_tool_item_set_proxy_menu_item(tool_item, "menuitem", menu_item);
return TRUE;
}
int
main (int argc, char ** argv)
{
GtkWidget *main_window;
GtkWidget *toolbar;
GtkWidget *menu_button;
GtkWidget *menu;
GtkWidget *image;
GtkToolItem *tool_item;
gtk_init (&argc, &argv);
main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (main_window), "Toolbar arrow test");
gtk_window_set_resizable (GTK_WINDOW (main_window), TRUE);
menu = gtk_menu_new ();
menu_button = gtk_menu_button_new ();
image = gtk_image_new_from_file ("aaa.png");
gtk_button_set_image (GTK_BUTTON (menu_button), image);
gtk_menu_button_set_popup (GTK_MENU_BUTTON (menu_button), menu);
tool_item = gtk_tool_item_new ();
g_signal_connect (G_OBJECT (tool_item), "create-menu-proxy", G_CALLBACK (on_create), NULL);
gtk_container_add (GTK_CONTAINER (tool_item), menu_button);
toolbar = gtk_toolbar_new();
gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar), TRUE);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), tool_item, 0);
gtk_container_add (GTK_CONTAINER (main_window), toolbar);
gtk_widget_show_all (main_window);
gtk_main();
return 0;
}