At Sun, 12 Nov 2000 22:17:48 +0900,
とみたまさひろ <tommy / tmtm.org> wrote:

> > これは Gtk+/Cが追加された widgetを返すからでしょうか?
> > たぶん、Rubyと glibの習慣の違いが問題なんだと思うんですが、どうでしょう?
> 
> いえ、そういう問題じゃなくて、Gtk::Toolbar#append_item は、引数で指定
> したラベル文字列やアイコンを元に、動的にウィジェットが生成されるので、
> 生成したウィジェットを返してもらわないと、そのウィジェットに対する操作
> ができないんです。

なるほど〜。こんな簡単な patchで良いのでしょうか?

# なんかいけてない APIだな…
--
        yashi

--- rbgtktoolbar.c~ Thu Mar 30 16:17:47 2000 +++ rbgtktoolbar.c Sun Nov 12 09:20:47 2000 @@ -35,55 +35,61 @@ tbar_append_item(self, text, ttext, ptext, icon, func) VALUE self, text, ttext, ptext, icon, func; { + GtkWidget *ret = NULL; + if (NIL_P(func)) { func = rb_f_lambda(); } add_relative(self, func); - gtk_toolbar_append_item(GTK_TOOLBAR(get_widget(self)), - NIL_P(text)?NULL:STR2CSTR(text), - NIL_P(ttext)?NULL:STR2CSTR(ttext), - NIL_P(ptext)?NULL:STR2CSTR(ptext), - get_widget(icon), - exec_callback, - (gpointer)func); - return self; + ret = gtk_toolbar_append_item(GTK_TOOLBAR(get_widget(self)), + NIL_P(text)?NULL:STR2CSTR(text), + NIL_P(ttext)?NULL:STR2CSTR(ttext), + NIL_P(ptext)?NULL:STR2CSTR(ptext), + get_widget(icon), + exec_callback, + (gpointer)func); + return ret ? make_widget(gWidget, ret) : Qnil; } static VALUE tbar_prepend_item(self, text, ttext, ptext, icon, func) VALUE self, text, ttext, ptext, icon, func; { + GtkWidget *ret = NULL; + if (NIL_P(func)) { func = rb_f_lambda(); } add_relative(self, func); - gtk_toolbar_prepend_item(GTK_TOOLBAR(get_widget(self)), - NIL_P(text)?NULL:STR2CSTR(text), - NIL_P(ttext)?NULL:STR2CSTR(ttext), - NIL_P(ptext)?NULL:STR2CSTR(ptext), - get_widget(icon), - exec_callback, - (gpointer)func); - return self; + ret = gtk_toolbar_prepend_item(GTK_TOOLBAR(get_widget(self)), + NIL_P(text)?NULL:STR2CSTR(text), + NIL_P(ttext)?NULL:STR2CSTR(ttext), + NIL_P(ptext)?NULL:STR2CSTR(ptext), + get_widget(icon), + exec_callback, + (gpointer)func); + return ret ? make_widget(gWidget, ret) : Qnil; } static VALUE tbar_insert_item(self, text, ttext, ptext, icon, func, pos) VALUE self, text, ttext, ptext, icon, func, pos; { + GtkWidget *ret = NULL; + if (NIL_P(func)) { func = rb_f_lambda(); } add_relative(self, func); - gtk_toolbar_insert_item(GTK_TOOLBAR(get_widget(self)), - NIL_P(text)?NULL:STR2CSTR(text), - NIL_P(ttext)?NULL:STR2CSTR(ttext), - NIL_P(ptext)?NULL:STR2CSTR(ptext), - get_widget(icon), - exec_callback, - (gpointer)func, - NUM2INT(pos)); - return self; + ret = gtk_toolbar_insert_item(GTK_TOOLBAR(get_widget(self)), + NIL_P(text)?NULL:STR2CSTR(text), + NIL_P(ttext)?NULL:STR2CSTR(ttext), + NIL_P(ptext)?NULL:STR2CSTR(ptext), + get_widget(icon), + exec_callback, + (gpointer)func, + NUM2INT(pos)); + return ret ? make_widget(gWidget, ret) : Qnil; } static VALUE