From: Masahiro S. ()
<sa...@to...> - 2007-07-15 06:58:57
|
酒井です。 またまた昔のメールを発掘。 From: Masao Mutoh <mu...@hi...> Date: Sun, 9 Feb 2003 14:12:26 +0900 > むとうです。 > > Ruby/GTKをGTK+-2.2環境で動作確認をしていたのですが、 > Gdk::GC.newで、"abstract class"というTypeErrorが > 出てインスタンスが生成できないことがわかりました。 > #このエラーはgobj_s_allocate()が出します。 > > これは、gdk_gc_get_type()がGTK+-2.0系から > 以下のように変更になっているのが原因でした。 > > GTK+-2.0.6 > object_type = g_type_register_static (G_TYPE_OBJECT, > "GdkGC", > &object_info, 0); > > GTK+-2.2.0 > object_type = g_type_register_static (G_TYPE_OBJECT, > "GdkGC", > &object_info, > G_TYPE_FLAG_ABSTRACT); > > この変更の経緯を知らないので何とも言えないのですが、 > Abstractなんだけどインスタンスを生成できる(newとかは存在する) > クラスというのはちょっと気持ち悪いですね.....。 > あ、でも、gtk_widget_newとかg_object_newとかあるからそうでもないか。 > > とはいえ、このままだとGdk::GC.newを生成できないので、 > glib/src/rbgobj_object.cに以下の関数を追加しました。 > > void rbgobj_abstract_but_create_instance_class(gtype); > > ここで登録しておいたクラスはG_TYPE_FLAG_ABSTRACTであっても > allocateできるようになります。 > > とりあえず、Ruby-GNOME-0.3はこれで行きたいと思いますが、 > 別の良案があれば教えてください。 これなのですが、rbgobj_abstract_but_create_instance_class は廃止して、 とりあえず常に allocate 出来るようにしようかと思います。 というのも、rbgobj_abstract_but_create_instance_class で指定する方式だ と、gtk側の実装(≠仕様)が変わるたびに対応が必要になってしまうためです。 -- 酒井 政裕 / Masahiro Sakai |