トップ «前の日記(2003-09-16) 最新 次の日記(2003-09-18)» 月表示 編集

日々の流転


2003-09-17 [長年日記]

λ. Experimental GLib TreeModel interface

gobjectのインターフェースをRubyで実装するための、Geoff Youngs さんの実験的なコード。この辺りは色々と難しい問題が山積みなので、あまり手を出したくなかったのだけど、そうも言ってられなくなってきたなぁ。

Tags: ruby

λ. g_signal_override_class_closure()

それで思い出したのは、g_signal_override_class_closure()とg_signal_chain_from_overridden()。こいつらをRubyから使えるようにすれば、シグナルのデフォルトハンドラーに関しては、Cレベルでゴチャゴチャやらなくても済むようになるはず。

素直に実装すれば

class MyButton < Gtk::Button
  register_type("MyButton")
 
  signal_override("clicked"){|instance, *args|
    puts "#{instance.inspect}.clicked"
    instance.signal_chain_from_overridden(*args)
  }
end

のように使う事になると思うのだけど、出来ればdefine_methodのようにinstanceのコンテキストでブロックを実行するようにして、

class MyButton < Gtk::Button
  register_type("MyButton")
 
  signal_override("clicked"){|*args|
    puts "#{self.inspect}.clicked"
    signal_chain_from_overridden(*args)
  }
end

と書けるようにしたいところだ。やり方が分からないけど (^^;)

Tags: ruby

λ. モズグズ様立体化

なんとなくchikoさんへ。

λ. Phantasm初クリア

Phantasm初クリア。使ったのは咲夜(時符)。「人間と妖怪の境界」から先が全然だめ。ボムの多い咲夜を使っててよかった (^^;

Tags: 東方

λ. 買った本

月刊「現代」 10月号
-
Tags:
本日のツッコミ(全2件) [ツッコミを入れる]
ψ むとぽん (2003-09-20 00:31)

単にinitializeとかで実行すれば良いってことではない?<br><br>class MyButton < Gtk::Button<br> register_type("MyButton")<br> <br> def initialize<br> super<br> signal_override("clicked"){|*args|<br> puts "#{self.inspect}.clicked"<br> signal_chain_from_overridden(*args)<br> }<br> end<br>end

ψ さかい (2003-09-20 09:23)

いや、g_signal_override_class_closure()はGTypeに対するオペレーションですので、initializeで実行するのはまずいです。(同じGTypeについて複数回呼び出すとエラーになります)<br><br>void g_signal_override_class_closure (guint signal_id,<br> GType instance_type,<br> GClosure *class_closure);