[Glade-users] Dynamically adding menu items to menu bar

On Feb 19, 2009, at 9:19 PM, John Coppens wrote:

On Thu, 19 Feb 2009 20:19:46 -0500
Jonathan Lane <lanej at horizon.com> wrote:

GtkWidget *cmds_menu;
GtkAction *action;
GtkWidget *w;

cmds_menu = gtk_menu_new();
action = GTK_ACTION(gtk_builder_get_object(builder,
w = gtk_action_create_menu_item(action);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(w), cmds_menu);

/* Applications from cfg file
for (i = 0; i < g_list_length(app_cfg->procs); i++) {
   struct app_proc *proc = g_list_nth_data(app_cfg->procs, i);
   assert(proc != NULL);

   action = gtk_action_new(proc->name, proc->desc, NULL, NULL);
   w = gtk_action_create_menu_item(action);
   gtk_menu_shell_insert(GTK_MENU_SHELL(cmds_menu), w, -1);

This is about the same I tried to do. The cast  
gave a runtime problem, because the type of cmds_menu wasn't  

Actually, it is a GtkMenuShell -- at least it certainly should be --  
because it came from gtk_menu_new().  What you're thinking of I think  
is the "commands_menuitem" from glade being a GtkAction instead of a  
GtkMenuItem, and that's why I first grabbed the GtkAction and then  
used gtk_action_create_menu_item() to get at a GtkMenuItem to which I  
could add a submenu.  Somehow I think this is my problem though -- the  
proxy isn't working.. but I don't know enough about the inner-workings  
of these widgets to know for sure.

if I recall rightly. If you look it up inside the .xml, you'll see  
the menu structure is somewhat separate from the rest.

It is, but it assigns the Commands menu with:

   <object class="GtkAction" id="commands_menuitem">
     <property name="name">commands_menuitem</property>
     <property name="label" translatable="yes">_Commands</property>


<menuitem action="commands_menuitem"/>

So I'd think I ought to be able to get at the Action and then convert  
it to a MenuItem.  But I don't know.  Documentation on all of this  
seems non-existant.  Google turns up several questions but no answers :(

I did find an example where the menu is directly built in XML inside
source file, then read in.

Do you have a link for that?  I'd really appreciate it.

It's a bit longish:


Thanks much for this.

I have a couple of toolbars which work fine, but I believe I can't  
new ones. Tried, and gave up. A buttonbar did the same for me. Teh
advantages of 3.5.7 (which I compiled myself) are enough to take a few
other problems along.

My problem was that gtk_builder_get_object() couldn't find the  
toolbars I'd defined in glade.  Then I tried doing it programatically  
and it couldn't find the VBox I wanted to pack it into.  I'm sure it's  
something stupid, but I really don't want to do something tonight that  
requires that I re-test everything at the last minute.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]