From: Quintus <qu...@qu...> - 2013-02-24 08:33:36
|
Am Sun, 24 Feb 2013 14:56:40 +0900 (JST) schrieb Kouhei Sutou <ko...@co...>: > > That is, the symbol has been converted to a string. I’m not sure > > whether this is a bug or expected behaviour, but if the latter, I > > was unable to find it documented somewhere. Can someone light up > > this? > > GObject doesn't have symbol type. So Ruby/GLib2 maps Symbol > to G_TYPE_STRING(*). > > (*) > http://developer.gnome.org/gobject/stable/gobject-Type-Information.html#G-TYPE-STRING:CAPS > > So you get string by the column that is specified as Symbol. Thank you kou :-). So this is kind of expected behaviour... However, I can’t imagine GObject has a type for Ruby objects, which work as expected: ============================================= require "gtk2" class Foo def initialize @foo = 12 end end model = Gtk::ListStore.new(String, Foo, Integer) row = model.append row[0] = "String" row[1] = Foo.new row[2] = 10 row2 = model.iter_first p [row[0], row[1], row[2]] ============================================= The Foo instance coming out here is exactly the same that I passed in (it even has the same object_id), so it is possible to store arbitrary objects into ListStore. Perhaps it is possible to store the Symbol instance (i.e. the VALUE pointer rather than the ID it maps to) the same way? I’m not sure how ID is defined, but I imagine it to be some kind of integral value, so another option could be storing it as an integer probably and converting that back on retrieval? > Thanks, > -- > kou Vale, Marvin |