あおきです。

  In mail "[ruby-list:17127] Gtk::Tree and Pixmap"
    OZAWA Sakuro <crouton / duelists.org> wrote:

> さくです。

> 以下のコードで期待どおり
(略)
> というツリーができるのですが、rootにPixmapを付けようと、#-〜#-のかわりに
> #+〜#+のコードにおきかえると、[+]がなく、rootを開くことができなくなって
> しまいました。
> # subtree.showというコードを加えると、展開された状態にはなります。
> 
> window.realizeのせいのような気はしますが、使わないわけにもいきませんし。
> どうするのが正しいのでしょう。

ウィンドウのサイズを変えると+があらわれるので、Gtk+のバグのようです。
具体的には、gtk_item_realize のあとサイズ調節がされてないのが原因でした。
(gtkのメンテナにも報告しておきました)

とりあえずの対処としては、以下のように、add の前に item を実体化
するといいです。
-------------------------------------------------------------------
あおきみねろう

require 'gtk' window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL) window.set_usize(200, 200) window.signal_connect('destroy'){ exit 0 } root = Gtk::Tree.new window.add(root) item = Gtk::TreeItem.new root.append item item.realize # 親ウィンドウもまとめて実体化される pix, mask = Gdk::Pixmap.create_from_xpm(window.window, nil, 'test.xpm') pm = Gtk::Pixmap.new(pix, mask) label = Gtk::Label.new('root') hbox = Gtk::HBox.new(false, 0) hbox.pack_start(pm, false ,false, 0) hbox.pack_start(label, false, false, 0) item.add hbox subtree = Gtk::Tree.new 1.upto(3) do |name| item = Gtk::TreeItem.new("subitem #{name}") subtree.append item end item.set_subtree subtree window.show_all # 一気に表示 Gtk.main