From: Kentaro F. <fu...@me...> - 2009-03-10 18:24:50
|
福地です。 GooCanvas については現時点でこれをそのまま Ruby に対応させるだけの手間を かけている余裕がないので、GooCanvas の同等品を Ruby 上で実装するという 荒技に取り組んでいます。(仕事向けには簡単なので十分なので) その過程で発見したのですが、GtkWidgetClass には、set_scroll_adjustments_signal という、set-scroll-adjustments シグナルを受け取るシグナルハンドラの ID を記憶 しておくメンバ変数があります。このシグナルハンドラのあるなしが、そのウィジェットが 例えば Gtk::ScrolledWindow に add できるかどうかが判定されます。これを Ruby から 登録できるようにしようと思っていじろうとしていたのですが、途中でわからなくなって しまいました。 ひとまず、シグナルハンドラIDを手動でセットできるよう、こんな関数を書いて static guint query_signal_id(self) VALUE self; { GSignalQuery* query; Data_Get_Struct(self, GSignalQuery, query); return query->signal_id; } static VALUE widget_s_set_scroll_adjustments_signal_id(self, sig) VALUE self, sig; { GtkWidgetClass* gclass; guint sigid; sigid = query_signal_id(sig); gclass = (GtkWidgetClass*)g_type_class_ref(CLASS2GTYPE(self)); gclass->set_scroll_adjustments_signal = sigid; return self; } Gtk::Widget クラスのクラスメソッドとして登録し、添付した sctest.rb を 実行したところ、 #<GLib::Signal: Hoge#set-scroll-adjustments> 370 (eval):3:in `instance_method': undefined method `signal_do_set-scroll-adjustments' for class `Hoge' from (eval):3:in `signal_new' from sctest.rb:19:in `call' from sctest.rb:19:in `add' from sctest.rb:19 というエラーが出てしまいました。エラーメッセージを見るに、"-"と"_"の違いのために signal_do_set_scroll_adjustments が呼ばれていないように見えますが、これの原因は どこでしょうか? -------------------------------- FUKUCHI kentaro | 福地健太郎 E-mail: fu...@me... Web: http://megaui.net/fukuchi/ |