gir_ffi 0.0.14 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/History.txt +6 -0
  2. data/README.rdoc +36 -12
  3. data/examples/01_empty_window.rb +1 -3
  4. data/examples/02_hello_world.rb +1 -3
  5. data/examples/03_upgraded_hello_world.rb +1 -3
  6. data/examples/04_webkit.rb +2 -2
  7. data/examples/05_notification.rb +1 -2
  8. data/examples/print_class.rb +6 -4
  9. data/lib/ffi-glib.rb +107 -0
  10. data/lib/ffi-glib/array.rb +14 -0
  11. data/lib/ffi-glib/byte_array.rb +10 -0
  12. data/lib/ffi-glib/hash_table.rb +55 -0
  13. data/lib/ffi-glib/list.rb +9 -0
  14. data/lib/ffi-glib/list_methods.rb +31 -0
  15. data/lib/ffi-glib/s_list.rb +9 -0
  16. data/lib/ffi-gobject.rb +94 -0
  17. data/lib/ffi-gobject/closure.rb +12 -0
  18. data/lib/ffi-gobject/helper.rb +119 -0
  19. data/lib/ffi-gobject/initially_unowned.rb +10 -0
  20. data/lib/ffi-gobject/ruby_closure.rb +47 -0
  21. data/lib/ffi-gobject/value.rb +65 -0
  22. data/lib/ffi-gobject_introspection.rb +3 -0
  23. data/lib/{gir_ffi → ffi-gobject_introspection}/g_error.rb +1 -1
  24. data/lib/ffi-gobject_introspection/gobject_lib.rb +7 -0
  25. data/lib/{gir_ffi → ffi-gobject_introspection}/i_arg_info.rb +2 -2
  26. data/lib/{gir_ffi → ffi-gobject_introspection}/i_base_info.rb +1 -1
  27. data/lib/{gir_ffi → ffi-gobject_introspection}/i_callable_info.rb +4 -4
  28. data/lib/{gir_ffi → ffi-gobject_introspection}/i_callback_info.rb +1 -1
  29. data/lib/{gir_ffi → ffi-gobject_introspection}/i_constant_info.rb +2 -3
  30. data/lib/{gir_ffi → ffi-gobject_introspection}/i_enum_info.rb +1 -1
  31. data/lib/{gir_ffi → ffi-gobject_introspection}/i_field_info.rb +1 -1
  32. data/lib/{gir_ffi → ffi-gobject_introspection}/i_flags_info.rb +1 -1
  33. data/lib/{gir_ffi → ffi-gobject_introspection}/i_function_info.rb +1 -1
  34. data/lib/{gir_ffi → ffi-gobject_introspection}/i_interface_info.rb +1 -1
  35. data/lib/{gir_ffi → ffi-gobject_introspection}/i_object_info.rb +1 -1
  36. data/lib/{gir_ffi → ffi-gobject_introspection}/i_property_info.rb +1 -1
  37. data/lib/{gir_ffi → ffi-gobject_introspection}/i_registered_type_info.rb +1 -1
  38. data/lib/{gir_ffi → ffi-gobject_introspection}/i_repository.rb +37 -23
  39. data/lib/{gir_ffi → ffi-gobject_introspection}/i_signal_info.rb +1 -1
  40. data/lib/{gir_ffi → ffi-gobject_introspection}/i_struct_info.rb +1 -1
  41. data/lib/{gir_ffi → ffi-gobject_introspection}/i_type_info.rb +2 -2
  42. data/lib/{gir_ffi → ffi-gobject_introspection}/i_union_info.rb +1 -1
  43. data/lib/{gir_ffi → ffi-gobject_introspection}/i_value_info.rb +1 -1
  44. data/lib/{gir_ffi → ffi-gobject_introspection}/i_vfunc_info.rb +1 -1
  45. data/lib/{gir_ffi → ffi-gobject_introspection}/lib.rb +1 -1
  46. data/lib/ffi-gtk/base.rb +17 -0
  47. data/lib/ffi-gtk2.rb +5 -0
  48. data/lib/ffi-gtk3.rb +5 -0
  49. data/lib/gir_ffi.rb +11 -4
  50. data/lib/gir_ffi/arg_helper.rb +5 -4
  51. data/lib/gir_ffi/builder.rb +3 -25
  52. data/lib/gir_ffi/builder/argument.rb +0 -2
  53. data/lib/gir_ffi/builder/argument/hash_table_base.rb +1 -1
  54. data/lib/gir_ffi/builder/argument/list_base.rb +1 -1
  55. data/lib/gir_ffi/builder/module.rb +1 -6
  56. data/lib/gir_ffi/builder/type/unintrospectable.rb +1 -1
  57. data/lib/gir_ffi/callback_helper.rb +14 -7
  58. data/lib/gir_ffi/in_out_pointer.rb +1 -1
  59. data/lib/gir_ffi/in_pointer.rb +1 -1
  60. data/lib/gir_ffi/module_base.rb +4 -0
  61. data/lib/gir_ffi/type_map.rb +29 -0
  62. data/lib/gir_ffi/version.rb +1 -1
  63. data/tasks/test.rake +20 -1
  64. data/test/arg_helper_test.rb +10 -13
  65. data/test/builder_test.rb +2 -2
  66. data/test/class_base_test.rb +1 -1
  67. data/test/{glib_overrides_test.rb → ffi-glib/glib_overrides_test.rb} +3 -5
  68. data/test/{g_object_overrides_test.rb → ffi-gobject/g_object_overrides_test.rb} +7 -37
  69. data/test/ffi-gobject/gobject_test.rb +22 -0
  70. data/test/ffi-gobject/value_test.rb +34 -0
  71. data/test/{unit → ffi-gobject_introspection}/i_base_info_test.rb +2 -2
  72. data/test/{unit → ffi-gobject_introspection}/i_constant_info_test.rb +1 -1
  73. data/test/ffi-gobject_introspection/i_object_info_test.rb +20 -0
  74. data/test/{unit → ffi-gobject_introspection}/i_repository_test.rb +11 -11
  75. data/test/function_definition_builder_test.rb +1 -1
  76. data/test/gir_ffi_test_helper.rb +114 -0
  77. data/test/girffi_test.rb +2 -2
  78. data/test/gtk_overrides_test.rb +15 -12
  79. data/test/integration/generated_gimarshallingtests_test.rb +10 -5
  80. data/test/integration/generated_gio_test.rb +1 -1
  81. data/test/integration/generated_gobject_test.rb +1 -1
  82. data/test/integration/generated_gtk_test.rb +3 -3
  83. data/test/integration/generated_regress_test.rb +11 -3
  84. data/test/interface_type_builder_test.rb +1 -1
  85. data/test/module_builder_test.rb +1 -1
  86. data/test/test_helper.rb +2 -111
  87. data/test/type_builder_test.rb +2 -2
  88. data/test/unintrospectable_type_builder_test.rb +1 -1
  89. data/test/unit/builder_test.rb +1 -1
  90. data/test/unit/callback_helper_test.rb +13 -10
  91. data/test/unit/constant_builder_test.rb +1 -1
  92. data/test/unit/in_out_pointer_test.rb +1 -1
  93. data/test/unit/in_pointer_test.rb +1 -1
  94. data/test/unit/object_type_builder_test.rb +1 -1
  95. metadata +62 -43
  96. data/lib/gir_ffi/g_object.rb +0 -38
  97. data/lib/gir_ffi/overrides/glib.rb +0 -225
  98. data/lib/gir_ffi/overrides/gobject.rb +0 -330
  99. data/lib/gir_ffi/overrides/gtk.rb +0 -29
  100. data/test/g_object_test.rb +0 -21
  101. data/test/i_object_info_test.rb +0 -20
@@ -1,38 +0,0 @@
1
- require 'ffi'
2
-
3
- module GirFFI
4
- # TODO: Rename to avoid constant lookup issues (and confusion).
5
- module GObject
6
- def self.type_init
7
- Lib::g_type_init
8
- end
9
-
10
- def self.object_ref obj
11
- Lib::g_object_ref obj.to_ptr
12
- end
13
-
14
- def self.object_ref_sink obj
15
- Lib::g_object_ref_sink obj.to_ptr
16
- end
17
-
18
- def self.object_unref obj
19
- Lib::g_object_unref obj.to_ptr
20
- end
21
-
22
- def self.object_is_floating obj
23
- Lib::g_object_is_floating obj.to_ptr
24
- end
25
-
26
- module Lib
27
- extend FFI::Library
28
- ffi_lib "gobject-2.0"
29
- attach_function :g_type_init, [], :void
30
- attach_function :g_object_ref, [:pointer], :void
31
- attach_function :g_object_ref_sink, [:pointer], :void
32
- attach_function :g_object_unref, [:pointer], :void
33
- attach_function :g_object_is_floating, [:pointer], :bool
34
- end
35
- end
36
- end
37
-
38
-
@@ -1,225 +0,0 @@
1
- module GirFFI
2
- module Overrides
3
- module GLib
4
- def self.included base
5
- base.extend ClassMethods
6
- extend_classes(base)
7
- attach_non_introspectable_functions(base)
8
- end
9
-
10
- def self.extend_classes base
11
- base::SList.class_eval {
12
- attr_accessor :element_type
13
- include ListInstanceMethods
14
- extend ListClassMethods
15
- include Enumerable
16
- }
17
- base::List.class_eval {
18
- attr_accessor :element_type
19
- include ListInstanceMethods
20
- extend ListClassMethods
21
- include Enumerable
22
- }
23
- base::HashTable.class_eval {
24
- attr_accessor :key_type
25
- attr_accessor :value_type
26
- include HashTableInstanceMethods
27
- extend HashTableClassMethods
28
- include Enumerable
29
- }
30
- base::ByteArray.class_eval {
31
- include ByteArrayInstanceMethods
32
- }
33
- base::Array.class_eval {
34
- attr_accessor :element_type
35
- include ArrayInstanceMethods
36
- }
37
- end
38
-
39
- def self.attach_non_introspectable_functions base
40
- base::Lib.attach_function :g_slist_prepend, [:pointer, :pointer],
41
- :pointer
42
-
43
- base::Lib.attach_function :g_list_append, [:pointer, :pointer],
44
- :pointer
45
-
46
- base::Lib.attach_function :g_hash_table_foreach,
47
- [:pointer, base::HFunc, :pointer], :void
48
- base::Lib.attach_function :g_hash_table_new,
49
- [base::HashFunc, base::EqualFunc], :pointer
50
- base::Lib.attach_function :g_hash_table_insert,
51
- [:pointer, :pointer, :pointer], :void
52
-
53
- base::Lib.attach_function :g_byte_array_new, [], :pointer
54
- base::Lib.attach_function :g_byte_array_append,
55
- [:pointer, :pointer, :uint], :pointer
56
-
57
- base::Lib.attach_function :g_array_new, [:int, :int, :uint], :pointer
58
- base::Lib.attach_function :g_array_append_vals,
59
- [:pointer, :pointer, :uint], :pointer
60
-
61
- base::Lib.attach_function :g_main_loop_new,
62
- [:pointer, :bool], :pointer
63
- end
64
-
65
- module ClassMethods
66
- # FIXME: Turn into real constructor
67
- def slist_new elmttype
68
- ::GLib::List._real_new(FFI::Pointer.new(0)).tap {|it|
69
- it.element_type = elmttype}
70
- end
71
-
72
- # FIXME: Turn into instance method; Use element type.
73
- def slist_prepend slist, data
74
- ::GLib::SList.wrap(slist.element_type, ::GLib::Lib.g_slist_prepend(slist, data))
75
- end
76
-
77
- # FIXME: Turn into real constructor
78
- def list_new elmttype
79
- ::GLib::List._real_new(FFI::Pointer.new(0)).tap {|it|
80
- it.element_type = elmttype}
81
- end
82
-
83
- # FIXME: Turn into instance method; Use element type.
84
- def list_append list, data
85
- ::GLib::List.wrap(list.element_type, ::GLib::Lib.g_list_append(list, data))
86
- end
87
-
88
- # FIXME: Turn into real constructor
89
- def hash_table_new keytype, valtype
90
- hash_fn, eq_fn = case keytype
91
- when :utf8
92
- lib = ::GLib::Lib.ffi_libraries.first
93
- [ FFI::Function.new(:uint, [:pointer], lib.find_function("g_str_hash")),
94
- FFI::Function.new(:int, [:pointer, :pointer], lib.find_function("g_str_equal"))]
95
- else
96
- [nil, nil]
97
- end
98
-
99
- ::GLib::HashTable.wrap(keytype, valtype, ::GLib::Lib.g_hash_table_new(hash_fn, eq_fn))
100
- end
101
-
102
- # FIXME: Turn into real constructor
103
- def byte_array_new
104
- ::GLib::ByteArray.wrap(::GLib::Lib.g_byte_array_new)
105
- end
106
-
107
- # FIXME: Turn into instance method
108
- def byte_array_append arr, data
109
- bytes = GirFFI::InPointer.from :utf8, data
110
- len = data.bytesize
111
- ::GLib::ByteArray.wrap(::GLib::Lib.g_byte_array_append arr.to_ptr, bytes, len)
112
- end
113
-
114
- # FIXME: Turn into real constructor
115
- def array_new type
116
- ffi_type = type == :utf8 ? :pointer : type
117
- arr = ::GLib::Array.wrap(
118
- ::GLib::Lib.g_array_new(0, 0, FFI.type_size(ffi_type)))
119
- arr.element_type = type
120
- arr
121
- end
122
-
123
- # FIXME: Turn into instance method
124
- def array_append_vals arr, data
125
- bytes = GirFFI::InPointer.from_array arr.element_type, data
126
- len = data.length
127
- res = ::GLib::Array.wrap(
128
- ::GLib::Lib.g_array_append_vals(arr.to_ptr, bytes, len))
129
- res.element_type = arr.element_type
130
- res
131
- end
132
-
133
- # FIXME: Turn into real constructor?
134
- def main_loop_new context, is_running
135
- ::GLib::MainLoop.wrap(::GLib::Lib.g_main_loop_new context, is_running)
136
- end
137
- end
138
-
139
- module ListInstanceMethods
140
- def each
141
- list = self
142
- rval = nil
143
- until list.nil?
144
- rval = yield GirFFI::ArgHelper.cast_from_pointer(element_type, list[:data])
145
- list = self.class.wrap(element_type, list[:next])
146
- end
147
- rval
148
- end
149
- end
150
-
151
- module ListClassMethods
152
- def wrap elmttype, ptr
153
- super(ptr).tap do |it|
154
- break if it.nil?
155
- it.element_type = elmttype
156
- end
157
- end
158
- end
159
-
160
- module HashTableClassMethods
161
- def wrap keytype, valtype, ptr
162
- super(ptr).tap do |it|
163
- break if it.nil?
164
- it.key_type = keytype
165
- it.value_type = valtype
166
- end
167
- end
168
- end
169
-
170
- module HashTableInstanceMethods
171
- def each
172
- prc = Proc.new {|keyptr, valptr, userdata|
173
- key = cast_from_pointer key_type, keyptr
174
- val = cast_from_pointer value_type, valptr
175
- yield key, val
176
- }
177
- ::GLib::Lib.g_hash_table_foreach self.to_ptr, prc, nil
178
- end
179
-
180
- def to_hash
181
- Hash[self.to_a]
182
- end
183
-
184
- def insert key, value
185
- keyptr = cast_to_pointer key_type, key
186
- valptr = cast_to_pointer value_type, value
187
- ::GLib::Lib.g_hash_table_insert self.to_ptr, keyptr, valptr
188
- end
189
-
190
- def cast_to_pointer type, it
191
- if type == :utf8
192
- GirFFI::InPointer.from :utf8, it
193
- else
194
- FFI::Pointer.new(it)
195
- end
196
- end
197
-
198
- def cast_from_pointer type, it
199
- case type
200
- when :utf8
201
- GirFFI::ArgHelper.ptr_to_utf8 it
202
- when :gint32
203
- GirFFI::ArgHelper.cast_pointer_to_int32 it
204
- else
205
- it.address
206
- end
207
- end
208
- end
209
-
210
- module ByteArrayInstanceMethods
211
- def to_string
212
- GirFFI::ArgHelper.ptr_to_utf8_length self[:data], self[:len]
213
- end
214
- end
215
-
216
- module ArrayInstanceMethods
217
- def to_a
218
- GirFFI::ArgHelper.ptr_to_typed_array(self.element_type,
219
- self[:data], self[:len])
220
- end
221
- end
222
- end
223
- end
224
- end
225
-
@@ -1,330 +0,0 @@
1
- module GirFFI
2
- module Overrides
3
- module GObject
4
-
5
- def self.included base
6
- base.extend ClassMethods
7
- extend_classes(base)
8
- attach_non_introspectable_functions(base)
9
- preload_methods(base)
10
- build_extra_classes(base)
11
- end
12
-
13
- def self.extend_classes base
14
- base::InitiallyUnowned.extend InitiallyUnownedClassMethods
15
- base::Value.class_eval {
16
- include ValueInstanceMethods
17
- extend ValueClassMethods
18
- }
19
- base::Closure.class_eval {
20
- include ClosureInstanceMethods
21
- }
22
- end
23
-
24
- def self.attach_non_introspectable_functions base
25
- base::Lib.attach_function :g_signal_connect_data,
26
- [:pointer, :string, base::Callback, :pointer, base::ClosureNotify,
27
- base::ConnectFlags],
28
- :ulong
29
- base::Lib.attach_function :g_closure_set_marshal,
30
- [:pointer, base::ClosureMarshal], :void
31
- end
32
-
33
- def self.preload_methods base
34
- base._setup_method :signal_emitv
35
- end
36
-
37
- def self.build_extra_classes base
38
- build_ruby_closure_class base
39
- end
40
-
41
- # Build the GObject::RubyClosure class. This class encapsulates Ruby
42
- # blocks as GObject Closures.
43
- def self.build_ruby_closure_class base
44
- klass = Class.new(base::Closure) do
45
- const_set :BLOCK_STORE, {}
46
-
47
- const_set :Struct, Class.new(FFI::Struct) {
48
- layout :parent, base::Closure::Struct, 0,
49
- :blockhash, :int64
50
- }
51
-
52
- def self.new &block
53
- raise ArgumentError unless block_given?
54
- wrap(new_simple(self::Struct.size, nil).to_ptr).tap do |it|
55
- h = block.object_id
56
- self::BLOCK_STORE[h] = block
57
- it[:blockhash] = h
58
- it.set_marshal Proc.new {|*args| marshaller(*args)}
59
- end
60
- end
61
-
62
- def self.marshaller(closure, return_value, n_param_values,
63
- param_values, invocation_hint, marshal_data)
64
- rclosure = self.wrap(closure.to_ptr)
65
-
66
- args = []
67
- n_param_values.times {|i|
68
- gv = ::GObject::Value.wrap(param_values.to_ptr +
69
- i * ::GObject::Value::Struct.size)
70
- args << gv.ruby_value
71
- }
72
-
73
- r = rclosure.invoke_block(*args)
74
- return_value.set_ruby_value r unless return_value.nil?
75
- end
76
-
77
- def block
78
- self.class::BLOCK_STORE[self[:blockhash]]
79
- end
80
-
81
- def invoke_block *args
82
- block.call(*args)
83
- end
84
- end
85
- base.const_set :RubyClosure, klass
86
- end
87
-
88
- module ClassMethods
89
- # FIXME: These four helper methods belong elsewhere.
90
- def type_from_instance_pointer inst_ptr
91
- base = ::GObject::TypeInstance.wrap inst_ptr
92
- kls = ::GObject::TypeClass.wrap(base[:g_class])
93
- kls[:g_type]
94
- end
95
-
96
- def type_from_instance instance
97
- type_from_instance_pointer instance.to_ptr
98
- end
99
-
100
- def signal_emit object, signal, *args
101
- type = type_from_instance object
102
- id = signal_lookup signal, type
103
-
104
- arr = Helper.signal_arguments_to_gvalue_array signal, object, *args
105
- rval = Helper.gvalue_for_signal_return_value signal, object
106
-
107
- ::GObject::Lib.g_signal_emitv arr[:values], id, 0, rval
108
-
109
- rval
110
- end
111
-
112
- def signal_connect object, signal, data=nil, &block
113
- sig = object.class._find_signal signal
114
- if sig.nil?
115
- raise "Signal #{signal} is invalid for #{object}"
116
- end
117
- if block.nil?
118
- raise ArgumentError, "Block needed"
119
- end
120
-
121
- rettype = GirFFI::Builder.itypeinfo_to_ffitype sig.return_type
122
-
123
- argtypes = GirFFI::Builder.ffi_argument_types_for_signal sig
124
-
125
- callback = FFI::Function.new rettype, argtypes,
126
- &(Helper.signal_callback_args(sig, object.class, &block))
127
- ::GObject::Lib::CALLBACKS << callback
128
-
129
- data_ptr = GirFFI::ArgHelper.object_to_inptr data
130
-
131
- ::GObject::Lib.g_signal_connect_data object, signal, callback, data_ptr, nil, 0
132
- end
133
- end
134
-
135
- module Helper
136
- TAG_TYPE_TO_GTYPE_NAME_MAP = {
137
- :utf8 => "gchararray",
138
- :gboolean => "gboolean",
139
- :void => "void"
140
- }
141
-
142
- def self.signal_callback_args sig, klass, &block
143
- return Proc.new do |*args|
144
- mapped = cast_back_signal_arguments sig, klass, *args
145
- block.call(*mapped)
146
- end
147
- end
148
-
149
- def self.signal_arguments_to_gvalue_array signal, instance, *rest
150
- sig = instance.class._find_signal signal
151
-
152
- arr = ::GObject::ValueArray.new sig.n_args+1
153
-
154
- arr.append signal_reciever_to_gvalue instance
155
-
156
- sig.args.zip(rest).each do |info, arg|
157
- arr.append signal_argument_to_gvalue info, arg
158
- end
159
-
160
- arr
161
- end
162
-
163
- def self.signal_reciever_to_gvalue instance
164
- val = ::GObject::Value.new
165
- val.init ::GObject.type_from_instance instance
166
- val.set_instance instance
167
- return val
168
- end
169
-
170
- def self.signal_argument_to_gvalue info, arg
171
- arg_type = info.argument_type
172
-
173
- val = gvalue_for_type_info arg_type
174
-
175
- if arg_type.tag == :interface
176
- interface = arg_type.interface
177
- case interface.info_type
178
- when :struct
179
- val.set_boxed arg
180
- when :object
181
- val.set_instance arg
182
- when :enum
183
- val.set_enum arg
184
- else
185
- raise NotImplementedError, interface.info_type
186
- end
187
- else
188
- val.set_ruby_value arg
189
- end
190
-
191
- return val
192
- end
193
-
194
- def self.gvalue_for_type_info info
195
- tag = info.tag
196
- gtype = case tag
197
- when :interface
198
- info.interface.g_type
199
- when :void
200
- return nil
201
- else
202
- ::GObject.type_from_name(TAG_TYPE_TO_GTYPE_NAME_MAP[tag])
203
- end
204
- ::GObject::Value.new.tap {|val| val.init gtype}
205
- end
206
-
207
- def self.gvalue_for_signal_return_value signal, object
208
- sig = object.class._find_signal signal
209
- rettypeinfo = sig.return_type
210
-
211
- gvalue_for_type_info rettypeinfo
212
- end
213
-
214
- # TODO: Generate cast back methods using existing Argument builders.
215
- def self.cast_back_signal_arguments signalinfo, klass, *args
216
- result = []
217
-
218
- # Instance
219
- instptr = args.shift
220
- instance = klass.wrap instptr
221
- result << instance
222
-
223
- # Extra arguments
224
- signalinfo.args.each do |info|
225
- result << cast_signal_argument(info, args.shift)
226
- end
227
-
228
- # User Data
229
- arg = args.shift
230
- arg = GirFFI::ArgHelper::OBJECT_STORE[arg.address]
231
- result << arg
232
-
233
- return result
234
- end
235
-
236
- def self.cast_signal_argument info, arg
237
- arg_t = info.argument_type
238
- if arg_t.tag == :interface
239
- iface = arg_t.interface
240
- kls = GirFFI::Builder.build_class iface
241
- case iface.info_type
242
- when :enum, :flags
243
- kls[arg]
244
- else
245
- kls.wrap(arg)
246
- end
247
- else
248
- arg
249
- end
250
- end
251
- end
252
-
253
- module InitiallyUnownedClassMethods
254
- def constructor_wrap ptr
255
- super.tap {|obj| GirFFI::GObject.object_ref_sink obj}
256
- end
257
- end
258
-
259
- module ValueClassMethods
260
- def wrap_ruby_value val
261
- self.new.set_ruby_value val
262
- end
263
- end
264
-
265
- module ValueInstanceMethods
266
- def set_ruby_value val
267
- if current_gtype == 0
268
- init_for_ruby_value val
269
- end
270
-
271
- case current_gtype_name
272
- when "gboolean"
273
- set_boolean val
274
- when "gint"
275
- set_int val
276
- when "gchararray"
277
- set_string val
278
- else
279
- nil
280
- end
281
- self
282
- end
283
-
284
- def init_for_ruby_value val
285
- case val
286
- when true, false
287
- init ::GObject.type_from_name("gboolean")
288
- when Integer
289
- init ::GObject.type_from_name("gint")
290
- end
291
- self
292
- end
293
-
294
- def current_gtype
295
- self[:g_type]
296
- end
297
-
298
- def current_gtype_name
299
- ::GObject.type_name current_gtype
300
- end
301
-
302
- def ruby_value
303
- case current_gtype_name.to_sym
304
- when :gboolean
305
- get_boolean
306
- when :gint
307
- get_int
308
- when :gchararray
309
- get_string
310
- when :GDate
311
- ::GLib::Date.wrap(get_boxed)
312
- when :GStrv
313
- ArgHelper.strv_to_utf8_array get_boxed
314
- else
315
- nil
316
- end
317
- end
318
- end
319
-
320
- module ClosureInstanceMethods
321
- def set_marshal marshal
322
- _v1 = GirFFI::CallbackHelper.wrap_in_callback_args_mapper(
323
- "GObject", "ClosureMarshal", marshal)
324
- ::GObject::Lib::CALLBACKS << _v1
325
- ::GObject::Lib.g_closure_set_marshal self, _v1
326
- end
327
- end
328
- end
329
- end
330
- end