今のgtkモジュールにはMenuFactoryはないですよね。
ほっとけばいがらしさんか、かんださんが作るんだろうけど、
ちょっと考えてみました。

ruby側では

menu_items = [ 
 ["/_File", nil, nil, 0, "<Branch>"], 
 ["/_File/_New", "<control>N", file_cb, 1, nil], 
… 
 ] 

などとして、 

factory = Gtk::MenuFactory::new(GTK::GTK_MENU_FACTORY_MENU_BAR) 
factory.add_entries(menu_items) 

と呼ぶものとします。

rbgtk.c のほうでは

static VALUE
menu_factory_add_entries(self, ary)
    VALUE self, ary;
{
    GtkMenuEntry menu_items;
    int nmenu_items = RARRY(ary)->len;

    menu_items = (GtkMenuEntry *) aryを処理したもん

    gtk_menu_factory_add_entries(GTK_ITEM_FACTORY(get_widget(self)),
                    menu_items, nmenu_items);
    return self;
}

のようなかんじかな?

この「aryを処理したもん」はCでは

   static GtkMenuEntry menu_items[] =
   {
       {"/_File", NULL, NULL, 0, "<Branch>"},
       {"/_File/_New", "<control>N", file_cb, 1, NULL},
       .....
   };

のようになるんですが、mallocしてこういう配列を組み立てるんですか?
これのfreeはどこでやるのか、とか、
file_cb みたいなrubyのメソッドをどう入れるのか( rb_funcall ? )
とか、数々の謎が... 

だめだな、やはり本職におまかせしよう。

-- 
Kikutani, Makoto  kikutani / sprintmail.com