宮木です。
随分勉強させて頂きました。

Kazunori Akaishi <akaishi / ruby.freak.ne.jp> wrote:

>|akaishi です。
>|
>|From: Hiroshi Igarashi <igarashi / ueda.info.waseda.ac.jp>
>|Subject: [ruby-list:15195] Re: Gtk::Menu の使い方に関する質問
>|Date: Fri, 2 Jul 1999 13:42:20 +0900
>|
>|> > しかしTEST ボタンを押すとき、目に見えているのはメニューではなくてオプショ
>|> > ンメニュー(のみ)です。そしてどうやらラベルはメニューアイテムではなく(一
>|> > 時的に)オプションメニューに親がすげかえられている(?)ようです。
>|> 
>|> このへん、私も昨晩GTK+のソースを見て確認しました。
>|> 一瞬Ruby/GTKのバグかと思いましたが、そうではないようです。
>|> #GTK+にNULLが渡ってしまうのはやっぱりバグか。
>|
>|MenuItem の child がとれないことの説明は上記で良いとして、

なるほど、MenuItemの子どもをOptionMenuが横取りして一つだけ
見えるようにするのがOptionMenuの役目っていう事なんですね。
なんか理解できる気がします。

ところで、少し話は逸れますが、MenuにRadioMenuItemをappend
してもget_activeで得られるオブジェクトはMenuItemになります
がこれはこういうものなんでしょうか。いえ、特にそれで困って
いるわけではないですが。

>|> 宮木さんのスクリプトを上記のように書き換えた場合、
>|> opt.childrenは要素数1のArray [false]を返します。
>|> これは変ですね。Ruby/GTKのバグかもしれません。調べてみます。
>|
>|自分のところでは動いているのになんでやー、と思って調べたところ、事前に 
>|MenuItem の child を参照しているかしていないかで挙動が異なるようです。
>|例えば、
>|
>|['Item1','Item2','Item3'].each{|text|
>|  menuitem = Gtk::MenuItem.new(text)
>|  menuitem.child                       # この行を追加
>|  menu.append menuitem
>|  menuitem.show
>|}
>|
>|このようにしてやると、opt.children がちゃんと参照できます。
>|# Gtk+ の中で何らかの最適化機構が働いているのかも。
>|
>|念のためこちらで動作確認したプログラムを添付します。

確かに動きますね。うーむ。
--
E-mail miyaki / wni.co.jp 宮木 昌広