京都大学の高橋です。

  マイナーウィジェットシリーズ今度は panes.rb だ!
…ということで testgtk/panes.rb を書いてたら
ハマってしまったので質問させてください。

[質問]
Gtk::Container のサブクラスで child を
(再生成すること無く)pack し直すにはどうすればいいでしょうか?

  具体的には次のようなことをしたいわけです。

child = paned.child1   # paned は HPaned(又は VPaned)のインスタンス
paned.remove(child)
paned.pack1(child, resize, shrink)  # resize, shrink の条件を変えて再 pack

  ところがこれを実行すると再 pack するところで
destroyed GtkObject と怒られてしまいます。
本家 C の Gtk+ ならば remove して再 pack するところを
  gtk_widget_ref(child);
        …
  gtk_widget_unref(child);
でくくればうまくいきます。
Ruby/Gtk でも Gtk::Widget#ref、unref を定義して
同じようにしてやればいいのですが、
明示的に reference count を増減するのって Ruby らしくない気がして
迷っています。

  何かいいアイデアはありませんでしょうか?


# まだ testgtk/panes.rb は動きませんが、Gtk::Paned クラスにいくつか
  メソッド(上のスクリプト中の child1、pack1 メソッドも)
  を追加するパッチを、いつものように
    http://www-nh.scphys.kyoto-u.ac.jp/~thitoshi/ruby/
  以下に置きました。

-------------------------------------------------------------------
                       TAKAHASHI Hitoshi
      Experimental Nuclear and Hadronic Physics Laboratory
             Department of Physics, Kyoto University
            E-mail: thitoshi / ne.scphys.kyoto-u.ac.jp
  URL: http://www-nh.scphys.kyoto-u.ac.jp/~thitoshi/member.html
-------------------------------------------------------------------