From: Minero Aoki <aamine / dp.u-netsurf.ne.jp>
Subject: [ruby-ext:00660] Re: (gtk) testgtk/ctree
Date: Fri, 03 Dec 1999 20:48:20 +0900

> あおきです。
> 
>   In mail "[ruby-ext:00654] Re: (gtk) testgtk/ctree"
>     Yasushi Shoji <yashi / yashi.com> wrote:
> 
> > > 次に(2) GC::start の # を除いて実行してみて下さい。
> > 
> > みごとに落ちますね。Rubyの GCの事は、まるでしらなかったのでいろいろ調べ
> > てまわっているのですが、自分の無知をさらけだしてますね < patchたち。
> > 
> > 僕が投げた ctreeに関しての patchはぜんぶ破棄してくださいm(__)m
> > 
> > # っていうかこんなやつが、Ruby/Gtkの patch書いてて良いのか‥‥。(汗
> 
> 自信持って書ける人はあまりいないですよ、きっと… ^^;;

^^;; がんばるぞ〜

> で、添付したパッチでどうでしょう。
> グローバルなハッシュを使って、ノードに渡したデータだけを
> リファレンスカウント風に管理してます。

まだ、patchを読んだだけなんですが、これだと同じ rowに同じ dataを入れると
ref countだけ上がって、deleteの時に 消えないんじゃないでしょうか?

> +    count = rb_hash_aref(ctree_node_row_data, data);
       /* 2回めだと count == 1ですよね? */
> +    if (NIL_P(count))
> +    	count = INT2FIX(1);
> +    else {
> +        int i;
> +
> +        i = FIX2INT(count) + 1;
> +	count = INT2FIX(i);
> +    }
> +    rb_hash_aset(ctree_node_row_data, data, count);
> +
> +    gtk_ctree_node_set_row_data_full(GTK_CTREE(get_widget(self)),
> +				     get_ctree_node(node),
> +				     (gpointer)data,
> +				     on_destroy_notice);
       /* で、ここで上書きされる */

あと、いまごろ気がついたんですけど、Gtk::CTree#nodeで、CListの rowさえ返
せば、CListの method使うだけで良いとか? なにか不具合が、あるんでしたっけ?
--
              yashi