山崎です。

> Object classの gobj_sig_connect()を介さずに自前で、
> gtk_signal_connect_full() を呼ぶと言うのは駄目ですかね?

それなら問題無いのですが、( ruby/gtk の gobj_sig_connect が
呼んでいる) callback は、その中で signal_setup_args -> arg_set_value
を呼んでいて使えないので、これらの代わりを用意するのは無駄だなあと
と思ったのがそもそもの始まりです。

C/gtk viewer ウイジェットは、GtkWidget から派生する形で実装しています。
ruby/gtk viewer 拡張コードも、Gtk::Widget を親クラスとしています。
拡張ライブラリは、ruby/gtk とは別のディレクトリに置いています。
     ext/
        gtk/
	gtkTB/    <= ruby/gtk viewer 拡張コード
私のviewer拡張コードを追加する際に、ruby/gtk には変更はしていません。
ヘッダファイルの参照はしています。

> あと、質問なんですが、山崎さんの最初の mailにあった様に argumentの処理を
> class毎にしても、結局新しい classを追加するときには 元からある物も
> compileが必要ですよね?
 
元からあるものの compile は不要です。というのは、
最初のメールでした提案を、
  (A) このような個別の処理を、rbgtkwidget.c などそれぞれのウイジェットに
      対応したソースファイルで用意しリストなどの形に登録して...
  (B) *_signal_callback を必要なウイジェットには用意し、シグナルのパラメ
      ータ処理を行ってから、親ウイジェットまたは本来の callback を呼ぶ
とすると、

(B)の場合、自分の拡張コードの中から、ruby/gtk 内の関数を呼んでいますが、
自分の拡張コードを書き換えて make しても、私の環境ではダイナミックリンク
で、ruby/gtk のソースのコンパイルはしません。スタティックリンクでも
同様でした。
難点としては、*_callback がいくつもできるので、それに対応して拡張ライブラ
リの中で signal_connect 関数も別々に用意しないと行けないことで、
signal_connectメソッドとして使う分には変わりませんが再定義した形になります。

(A)では、   
    if (rb_obj_is_kind_of(obj, gWidget)) {
        if (strcmp(signame, "draw") == 0) {
            rb_ary_push(args, make_gdkrectangle(GTK_VALUE_POINTER(params[0])));
            return;
        }
みたいな処理を関数にして、それぞれのウイジェットの Init_gtk_* の中から
初期化時に関数ポインタのリストに追加していくようにします。なので、
再コンパイルは不要です。条件に合っているか調べる処理を、ソースに順に直接
並べるか、イベントが発生した時にポインタをたどるかという違いです。

> ばらばらに compileできて
> require 'gtk'
> require 'gtk-newclass'
> とかできたら楽だなぁ〜と‥‥。

今でもその様にして使っています。仮に私が提案した様にしても、同じように
使えると思います。

私が気にしている一番の問題は、標準で gtk に入っているものだけを使う分には
関係ないので、必要性があまりないということです。
gtk ライブラリ自体が標準配布の中で閉じてなくて、ウイジェットの追加が簡単
なのと、gtk や gnome のサイト等に追加ウイジェットのライブラリがあったので
(GtkXmHTML など。ruby から使うにはシグナルのところで特別な処理が必要そう
です)、 ruby/gtk もこうなっているといいかなと思ったので提案しました。

----------------------------------------------------
山崎