dellinです。 Ruby/GTKのItemFactoryを使ってRadioMenuItemのメニュー項目を作 ると、Segmentation Faultを起こすのに気づきました。 どうやら、create_itemとcreate_itemsを混ぜてつかうと落ちるみた いです。ただなぜかcreate_itemでRadioMenuItemを2つ以上つくって 混ぜたときに落ちる、という奇妙な振舞いをするのですが…。 # 混ぜない時に正しく動作すればいいことはいいのですが、原因が # わからないもので…。 実験環境は OS:VineLinux(kernel-2.4.5) Ruby:1.6.4, Ruby/GTK:0.25 でした。 メールの最後に再現スクリプトを掲載します。 また、落ちる条件をさぐるために作ったRadioMenuItem用パッチや、 ItemFactoryにあてるパッチを http://priest.team-ct.org/~dellin/ruby/ で公開しています。 =RadioMenuItemのパッチ * RadioMenuItem#set_groupを実装。 RadioMenuItem#groupでの返り値をつかってグループ化する =ItemFactoryへのパッチ * ItemFactory#create_itemのバグつぶし ブロック内変数に入るはずのCheckMenuItem, RadioMenuItem, TearoffMenuItemがすべてMenuItemとなってしまっていて、固 有の機能が使えなかったのを修正。 * ItemFactory#get_itemの追加 メニュー項目へのパスから各MenuItemのインスタンスを返す。 最初のcreate_itemsのバグについてはどう対処していいかが、私は まったくわかりませんので、わかる方はお願いします。 #### ここから再現スクリプト↓ #!/usr/bin/ruby require 'gtk' window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL) window.set_title($0) window.set_usize(400, 300) window.set_uposition(20, 20) window.signal_connect("destroy") do Gtk.main_quit end window.signal_connect("delete_event") do false end box1 = Gtk::VBox.new(false, 0) accel = Gtk::AccelGroup.new ifact = Gtk::ItemFactory.new(Gtk::ItemFactory::TYPE_MENU_BAR, "<main>", accel) ifact.create_item("/_Radio/Radio1", nil, Gtk::ItemFactory::RADIO_ITEM) ifact.create_item("/_Radio/Radio2", nil, Gtk::ItemFactory::RADIO_ITEM) ifact.create_items([ ["/_Radio/Radio3", nil, Gtk::ItemFactory::RADIO_ITEM], ["/_Radio/Radio4", nil, "/Radio/Radio3"] ]) menubar = ifact.get_widget("<main>") box1.pack_start(menubar, false, false, 0) menubar.show accel.attach(window) label1 = Gtk::Label::new("Gtk::ItemFactory test program") box1.pack_start(label1, true, false, 0) label1.show window.add(box1) box1.show window.show Gtk::main #### ここまで↑ -- dellin Email dellin / team-ct.org WWW http://priest.team-ct.org/~dellin/