gir_ffi 0.6.7 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/{History.txt → Changelog.md} +93 -61
- data/{DESIGN.rdoc → DESIGN.md} +7 -7
- data/README.md +5 -7
- data/TODO.md +90 -0
- data/lib/ffi-glib.rb +0 -1
- data/lib/ffi-glib/array.rb +13 -29
- data/lib/ffi-glib/array_methods.rb +13 -0
- data/lib/ffi-glib/container_class_methods.rb +6 -1
- data/lib/ffi-glib/hash_table.rb +3 -2
- data/lib/ffi-glib/list.rb +3 -17
- data/lib/ffi-glib/list_methods.rb +22 -3
- data/lib/ffi-glib/ptr_array.rb +19 -19
- data/lib/ffi-glib/s_list.rb +3 -17
- data/lib/ffi-gobject.rb +10 -17
- data/lib/ffi-gobject/object.rb +19 -9
- data/lib/ffi-gobject/object_class.rb +14 -0
- data/lib/ffi-gobject/ruby_closure.rb +4 -5
- data/lib/ffi-gobject/value.rb +7 -5
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
- data/lib/gir_ffi-base.rb +0 -2
- data/lib/gir_ffi-base/gobject.rb +1 -0
- data/lib/gir_ffi-base/gobject/lib.rb +1 -1
- data/lib/gir_ffi.rb +2 -0
- data/lib/gir_ffi/arg_helper.rb +18 -8
- data/lib/gir_ffi/builders/argument_builder.rb +62 -55
- data/lib/gir_ffi/builders/base_argument_builder.rb +52 -106
- data/lib/gir_ffi/builders/base_type_builder.rb +3 -3
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +34 -0
- data/lib/gir_ffi/builders/callback_argument_builder.rb +73 -0
- data/lib/gir_ffi/builders/callback_builder.rb +19 -9
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +54 -0
- data/lib/gir_ffi/builders/closure_convertor.rb +9 -0
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +9 -0
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +9 -0
- data/lib/gir_ffi/builders/enum_builder.rb +16 -16
- data/lib/gir_ffi/builders/field_builder.rb +36 -15
- data/lib/gir_ffi/builders/function_builder.rb +32 -27
- data/lib/gir_ffi/builders/interface_builder.rb +14 -4
- data/lib/gir_ffi/builders/mapping_method_builder.rb +95 -43
- data/lib/gir_ffi/builders/module_builder.rb +22 -35
- data/lib/gir_ffi/builders/null_convertor.rb +9 -0
- data/lib/gir_ffi/builders/object_builder.rb +11 -14
- data/lib/gir_ffi/builders/property_builder.rb +107 -9
- data/lib/gir_ffi/builders/registered_type_builder.rb +2 -2
- data/lib/gir_ffi/builders/return_value_builder.rb +42 -33
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +15 -0
- data/lib/gir_ffi/builders/signal_builder.rb +18 -58
- data/lib/gir_ffi/builders/struct_builder.rb +1 -2
- data/lib/gir_ffi/builders/type_builder.rb +1 -0
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +4 -4
- data/lib/gir_ffi/builders/user_defined_builder.rb +151 -26
- data/lib/gir_ffi/builders/vfunc_builder.rb +57 -0
- data/lib/gir_ffi/builders/with_layout.rb +10 -8
- data/lib/gir_ffi/builders/with_methods.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +42 -8
- data/lib/gir_ffi/class_base.rb +1 -2
- data/lib/gir_ffi/enum_base.rb +26 -4
- data/lib/gir_ffi/error_argument_info.rb +21 -0
- data/lib/gir_ffi/{setter_argument_info.rb → field_argument_info.rb} +2 -1
- data/lib/gir_ffi/g_type.rb +25 -0
- data/lib/gir_ffi/in_out_pointer.rb +3 -14
- data/lib/gir_ffi/in_pointer.rb +20 -21
- data/lib/gir_ffi/info_ext.rb +2 -0
- data/lib/gir_ffi/info_ext/i_callable_info.rb +0 -9
- data/lib/gir_ffi/info_ext/i_callback_info.rb +17 -0
- data/lib/gir_ffi/info_ext/i_function_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_property_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -0
- data/lib/gir_ffi/info_ext/i_signal_info.rb +14 -16
- data/lib/gir_ffi/info_ext/i_type_info.rb +72 -34
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +12 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +3 -2
- data/lib/gir_ffi/interface_base.rb +8 -3
- data/lib/gir_ffi/module_base.rb +3 -5
- data/lib/gir_ffi/object_base.rb +8 -0
- data/lib/gir_ffi/receiver_argument_info.rb +21 -0
- data/lib/gir_ffi/receiver_type_info.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +23 -0
- data/lib/gir_ffi/signal_base.rb +1 -1
- data/lib/{ffi-glib → gir_ffi}/sized_array.rb +10 -6
- data/lib/gir_ffi/struct_base.rb +10 -9
- data/lib/gir_ffi/type_base.rb +1 -0
- data/lib/gir_ffi/type_map.rb +3 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +4 -1
- data/lib/gir_ffi/union_base.rb +4 -21
- data/lib/gir_ffi/user_data_argument_info.rb +21 -0
- data/lib/gir_ffi/user_data_type_info.rb +17 -0
- data/lib/gir_ffi/user_defined_type_info.rb +18 -4
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_base.rb +8 -0
- data/lib/gir_ffi/vfunc_implementation.rb +11 -0
- data/lib/gir_ffi/zero_terminated.rb +18 -24
- data/test/base_test_helper.rb +2 -3
- data/test/ffi-glib/array_test.rb +3 -3
- data/test/ffi-glib/ruby_closure_test.rb +3 -3
- data/test/ffi-gobject/value_test.rb +15 -1
- data/test/ffi-gobject_test.rb +2 -1
- data/test/gir_ffi/arg_helper_test.rb +21 -2
- data/test/gir_ffi/builders/argument_builder_test.rb +213 -287
- data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_builder_test.rb +26 -8
- data/test/gir_ffi/builders/field_builder_test.rb +18 -3
- data/test/gir_ffi/builders/function_builder_test.rb +30 -12
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -0
- data/test/gir_ffi/builders/module_builder_test.rb +0 -39
- data/test/gir_ffi/builders/object_builder_test.rb +27 -27
- data/test/gir_ffi/builders/property_builder_test.rb +110 -0
- data/test/gir_ffi/builders/return_value_builder_test.rb +168 -200
- data/test/gir_ffi/builders/signal_builder_test.rb +58 -14
- data/test/gir_ffi/builders/struct_builder_test.rb +2 -41
- data/test/gir_ffi/builders/user_defined_builder_test.rb +88 -20
- data/test/gir_ffi/builders/vfunc_builder_test.rb +44 -0
- data/test/gir_ffi/g_type_test.rb +29 -0
- data/test/gir_ffi/in_pointer_test.rb +28 -9
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -9
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +19 -0
- data/test/gir_ffi/info_ext/i_function_info_test.rb +9 -0
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -11
- data/test/gir_ffi/info_ext/i_type_info_test.rb +140 -16
- data/test/gir_ffi/interface_base_test.rb +9 -3
- data/test/gir_ffi/object_base_test.rb +1 -2
- data/test/{ffi-glib → gir_ffi}/sized_array_test.rb +28 -28
- data/test/gir_ffi/type_map_test.rb +1 -1
- data/test/gir_ffi/user_defined_type_info_test.rb +36 -4
- data/test/gir_ffi_test.rb +5 -5
- data/test/gir_ffi_test_helper.rb +4 -0
- data/test/integration/generated_gimarshallingtests_test.rb +163 -59
- data/test/integration/generated_gobject_test.rb +21 -8
- data/test/integration/generated_pango_test.rb +2 -2
- data/test/integration/generated_regress_test.rb +361 -101
- data/test/lib/autogen.sh +5 -1
- metadata +51 -35
- data/TODO.rdoc +0 -63
- data/lib/gir_ffi-base/gir_ffi/library.rb +0 -17
- data/lib/gir_ffi-base/gir_ffi/struct.rb +0 -27
data/lib/ffi-glib.rb
CHANGED
data/lib/ffi-glib/array.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'ffi-glib/container_class_methods'
|
2
|
+
require 'ffi-glib/array_methods'
|
3
|
+
|
1
4
|
module GLib
|
2
5
|
load_class :Array
|
3
6
|
|
@@ -5,12 +8,10 @@ module GLib
|
|
5
8
|
# be necessary to create objects of this class from Ruby directly.
|
6
9
|
class Array
|
7
10
|
include Enumerable
|
11
|
+
include ArrayMethods
|
12
|
+
extend ContainerClassMethods
|
8
13
|
|
9
14
|
attr_reader :element_type
|
10
|
-
def element_type= val
|
11
|
-
@element_type = val
|
12
|
-
check_element_size_match
|
13
|
-
end
|
14
15
|
|
15
16
|
class << self
|
16
17
|
undef :new
|
@@ -26,15 +27,6 @@ module GLib
|
|
26
27
|
self
|
27
28
|
end
|
28
29
|
|
29
|
-
# Re-implementation of the g_array_index macro
|
30
|
-
def index idx
|
31
|
-
if idx >= length or idx < 0
|
32
|
-
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
33
|
-
end
|
34
|
-
ptr = GirFFI::InOutPointer.new element_type, data_ptr + idx * get_element_size
|
35
|
-
ptr.to_ruby_value
|
36
|
-
end
|
37
|
-
|
38
30
|
def each
|
39
31
|
length.times do |idx|
|
40
32
|
yield index(idx)
|
@@ -49,32 +41,24 @@ module GLib
|
|
49
41
|
@struct[:data]
|
50
42
|
end
|
51
43
|
|
52
|
-
undef :data
|
53
|
-
|
54
|
-
# @deprecated From 0.7.0, data will return the actual data as a string,
|
55
|
-
# as generated by GirFFI.
|
56
|
-
alias data data_ptr
|
57
|
-
|
58
44
|
def get_element_size
|
59
45
|
Lib.g_array_get_element_size self
|
60
46
|
end
|
61
47
|
|
48
|
+
alias element_size get_element_size
|
49
|
+
|
62
50
|
def ==(other)
|
63
51
|
self.to_a == other.to_a
|
64
52
|
end
|
65
53
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
54
|
+
def reset_typespec typespec
|
55
|
+
@element_type = typespec
|
56
|
+
check_element_size_match
|
57
|
+
self
|
70
58
|
end
|
71
59
|
|
72
|
-
def self.
|
73
|
-
|
74
|
-
when self then it
|
75
|
-
when FFI::Pointer then wrap elmtype, it
|
76
|
-
else self.new(elmtype).tap {|arr| arr.append_vals it }
|
77
|
-
end
|
60
|
+
def self.from_enumerable elmtype, it
|
61
|
+
self.new(elmtype).tap {|arr| arr.append_vals it }
|
78
62
|
end
|
79
63
|
|
80
64
|
private
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GLib
|
2
|
+
# Common methods for GLib::Array and GLib::PtrArray
|
3
|
+
module ArrayMethods
|
4
|
+
# Re-implementation of the g_array_index and g_ptr_array_index macros
|
5
|
+
def index idx
|
6
|
+
if idx >= length or idx < 0
|
7
|
+
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
8
|
+
end
|
9
|
+
ptr = GirFFI::InOutPointer.new element_type, data_ptr + idx * element_size
|
10
|
+
ptr.to_ruby_value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
module GLib
|
2
|
+
# Common methods for container classes: Array, PtrArray, List, SList and
|
3
|
+
# HashTable.
|
2
4
|
module ContainerClassMethods
|
3
5
|
def wrap typespec, ptr
|
4
6
|
super(ptr).tap do |container|
|
@@ -6,7 +8,10 @@ module GLib
|
|
6
8
|
end
|
7
9
|
end
|
8
10
|
|
9
|
-
|
11
|
+
# FIXME: Drop Ruby 1.8.7 support and make first argument optional.
|
12
|
+
def from *args
|
13
|
+
it, typespec = *args.reverse
|
14
|
+
typespec ||= :void
|
10
15
|
case it
|
11
16
|
when nil
|
12
17
|
nil
|
data/lib/ffi-glib/hash_table.rb
CHANGED
@@ -12,12 +12,13 @@ module GLib
|
|
12
12
|
attr_reader :value_type
|
13
13
|
|
14
14
|
def each
|
15
|
-
prc =
|
15
|
+
prc = proc {|keyptr, valptr, userdata|
|
16
16
|
key = GirFFI::ArgHelper.cast_from_pointer key_type, keyptr
|
17
17
|
val = GirFFI::ArgHelper.cast_from_pointer value_type, valptr
|
18
18
|
yield key, val
|
19
19
|
}
|
20
|
-
|
20
|
+
callback = GLib::HFunc.from prc
|
21
|
+
::GLib::Lib.g_hash_table_foreach self.to_ptr, callback, nil
|
21
22
|
end
|
22
23
|
|
23
24
|
def to_hash
|
data/lib/ffi-glib/list.rb
CHANGED
@@ -7,27 +7,13 @@ module GLib
|
|
7
7
|
class List
|
8
8
|
include ListMethods
|
9
9
|
|
10
|
-
class << self
|
11
|
-
remove_method :new
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.new type
|
15
|
-
_real_new.tap do |it|
|
16
|
-
struct = self::Struct.new(FFI::Pointer.new(0))
|
17
|
-
it.instance_variable_set :@struct, struct
|
18
|
-
it.element_type = type
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
10
|
def self.from_enumerable type, arr
|
23
|
-
arr.inject(self.new type) { |lst, val|
|
24
|
-
lst.append val }
|
11
|
+
arr.inject(self.new type) { |lst, val| lst.append val }
|
25
12
|
end
|
26
13
|
|
27
14
|
def append data
|
28
|
-
|
29
|
-
|
30
|
-
self.class.wrap(elm_t, Lib.g_list_append(self, data_ptr))
|
15
|
+
self.class.wrap(element_type,
|
16
|
+
Lib.g_list_append(self, element_ptr_for(data)))
|
31
17
|
end
|
32
18
|
end
|
33
19
|
end
|
@@ -1,15 +1,20 @@
|
|
1
1
|
require 'ffi-glib/container_class_methods'
|
2
2
|
|
3
3
|
module GLib
|
4
|
+
# Common methods for List and SList.
|
4
5
|
module ListMethods
|
5
6
|
include Enumerable
|
6
|
-
|
7
|
+
attr_reader :element_type
|
7
8
|
|
8
9
|
def self.included base
|
9
|
-
base.extend ContainerClassMethods
|
10
10
|
# Override default field accessors.
|
11
11
|
replace_method base, :next, :tail
|
12
12
|
replace_method base, :data, :head
|
13
|
+
|
14
|
+
class << base; self end.send :remove_method, :new
|
15
|
+
base.extend ListClassMethods
|
16
|
+
|
17
|
+
base.extend ContainerClassMethods
|
13
18
|
end
|
14
19
|
|
15
20
|
def self.replace_method base, old, new
|
@@ -35,7 +40,7 @@ module GLib
|
|
35
40
|
end
|
36
41
|
|
37
42
|
def reset_typespec typespec
|
38
|
-
|
43
|
+
@element_type = typespec
|
39
44
|
self
|
40
45
|
end
|
41
46
|
|
@@ -55,6 +60,20 @@ module GLib
|
|
55
60
|
@current = @current.tail
|
56
61
|
element
|
57
62
|
end
|
63
|
+
|
64
|
+
def element_ptr_for data
|
65
|
+
GirFFI::InPointer.from(element_type, data)
|
66
|
+
end
|
67
|
+
|
68
|
+
module ListClassMethods
|
69
|
+
def new type
|
70
|
+
_real_new.tap do |it|
|
71
|
+
struct = self::Struct.new(FFI::Pointer.new(0))
|
72
|
+
it.instance_variable_set :@struct, struct
|
73
|
+
it.instance_variable_set :@element_type, type
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
58
77
|
end
|
59
78
|
end
|
60
79
|
|
data/lib/ffi-glib/ptr_array.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'ffi-glib/container_class_methods'
|
2
|
+
require 'ffi-glib/array_methods'
|
3
|
+
|
1
4
|
module GLib
|
2
5
|
load_class :PtrArray
|
3
6
|
|
@@ -5,8 +8,10 @@ module GLib
|
|
5
8
|
# pointers.
|
6
9
|
class PtrArray
|
7
10
|
include Enumerable
|
11
|
+
include ArrayMethods
|
12
|
+
extend ContainerClassMethods
|
8
13
|
|
9
|
-
|
14
|
+
attr_reader :element_type
|
10
15
|
|
11
16
|
POINTER_SIZE = FFI.type_size(:pointer)
|
12
17
|
|
@@ -20,23 +25,19 @@ module GLib
|
|
20
25
|
wrap(type, Lib.g_ptr_array_new)
|
21
26
|
end
|
22
27
|
|
23
|
-
def self.
|
24
|
-
|
25
|
-
it.element_type = type}
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.from type, it
|
29
|
-
case it
|
30
|
-
when self then it
|
31
|
-
when FFI::Pointer then wrap type, it
|
32
|
-
else self.new(type).tap {|arr| arr.add_array it}
|
33
|
-
end
|
28
|
+
def self.from_enumerable(type, it)
|
29
|
+
self.new(type).tap {|arr| arr.add_array it}
|
34
30
|
end
|
35
31
|
|
36
32
|
def self.add array, data
|
37
33
|
array.add data
|
38
34
|
end
|
39
35
|
|
36
|
+
def reset_typespec typespec
|
37
|
+
@element_type = typespec
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
40
41
|
def add data
|
41
42
|
ptr = GirFFI::InPointer.from element_type, data
|
42
43
|
Lib.g_ptr_array_add self, ptr
|
@@ -46,13 +47,12 @@ module GLib
|
|
46
47
|
ary.each {|item| add item}
|
47
48
|
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
ptr.to_ruby_value
|
50
|
+
def data_ptr
|
51
|
+
@struct[:pdata]
|
52
|
+
end
|
53
|
+
|
54
|
+
def element_size
|
55
|
+
POINTER_SIZE
|
56
56
|
end
|
57
57
|
|
58
58
|
def each
|
data/lib/ffi-glib/s_list.rb
CHANGED
@@ -7,27 +7,13 @@ module GLib
|
|
7
7
|
class SList
|
8
8
|
include ListMethods
|
9
9
|
|
10
|
-
class << self
|
11
|
-
remove_method :new
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.new type
|
15
|
-
_real_new.tap do |it|
|
16
|
-
struct = self::Struct.new(FFI::Pointer.new(0))
|
17
|
-
it.instance_variable_set :@struct, struct
|
18
|
-
it.element_type = type
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
10
|
def self.from_enumerable type, arr
|
23
|
-
arr.reverse.inject(self.new type) { |lst, val|
|
24
|
-
lst.prepend val }
|
11
|
+
arr.reverse.inject(self.new type) { |lst, val| lst.prepend val }
|
25
12
|
end
|
26
13
|
|
27
14
|
def prepend data
|
28
|
-
|
29
|
-
|
30
|
-
self.class.wrap(elm_t, Lib.g_slist_prepend(self, data_ptr))
|
15
|
+
self.class.wrap(element_type,
|
16
|
+
Lib.g_slist_prepend(self, element_ptr_for(data)))
|
31
17
|
end
|
32
18
|
end
|
33
19
|
end
|
data/lib/ffi-gobject.rb
CHANGED
@@ -9,9 +9,11 @@ require 'ffi-gobject/value'
|
|
9
9
|
require 'ffi-gobject/initially_unowned'
|
10
10
|
require 'ffi-gobject/closure'
|
11
11
|
require 'ffi-gobject/object'
|
12
|
+
require 'ffi-gobject/object_class'
|
12
13
|
require 'ffi-gobject/ruby_closure'
|
13
14
|
require 'gir_ffi/builders/user_defined_builder'
|
14
15
|
|
16
|
+
# Module representing GLib's GObject namespace.
|
15
17
|
module GObject
|
16
18
|
def self.object_ref obj
|
17
19
|
Lib::g_object_ref obj.to_ptr
|
@@ -32,6 +34,7 @@ module GObject
|
|
32
34
|
def self.type_from_instance_pointer inst_ptr
|
33
35
|
return nil if inst_ptr.null?
|
34
36
|
klsptr = inst_ptr.get_pointer 0
|
37
|
+
# TODO: Cache the message name somewhere.
|
35
38
|
klsptr.send "get_#{GirFFI::TypeMap::TAG_TYPE_MAP[:GType]}", 0
|
36
39
|
end
|
37
40
|
|
@@ -60,10 +63,12 @@ module GObject
|
|
60
63
|
signal_id = signal_lookup_from_instance signal, object
|
61
64
|
detail_quark = GLib.quark_from_string(detail)
|
62
65
|
sig_info = object.class.find_signal signal
|
63
|
-
arr = sig_info.signal_arguments_to_gvalue_array object, *args
|
64
|
-
rval = sig_info.gvalue_for_signal_return_value
|
65
66
|
|
66
|
-
|
67
|
+
arr_ptr = sig_info.arguments_to_gvalue_array_pointer object, args
|
68
|
+
|
69
|
+
rval = sig_info.gvalue_for_return_value
|
70
|
+
|
71
|
+
Lib.g_signal_emitv arr_ptr, signal_id, detail_quark, rval
|
67
72
|
|
68
73
|
return rval
|
69
74
|
end
|
@@ -71,10 +76,10 @@ module GObject
|
|
71
76
|
def self.signal_connect object, detailed_signal, data=nil, &block
|
72
77
|
signal, _ = detailed_signal.split('::')
|
73
78
|
sig_info = object.class.find_signal signal
|
74
|
-
callback = sig_info.
|
79
|
+
callback = sig_info.create_callback(&block)
|
75
80
|
GirFFI::CallbackBase.store_callback callback
|
76
81
|
|
77
|
-
data_ptr = GirFFI::InPointer.
|
82
|
+
data_ptr = GirFFI::InPointer.from_closure_data data
|
78
83
|
|
79
84
|
Lib.g_signal_connect_data object, detailed_signal, callback, data_ptr, nil, 0
|
80
85
|
end
|
@@ -119,16 +124,4 @@ module GObject
|
|
119
124
|
TYPE_ARRAY = Lib.g_array_get_type
|
120
125
|
TYPE_HASH_TABLE = Lib.g_hash_table_get_type
|
121
126
|
TYPE_STRV = Lib.g_strv_get_type
|
122
|
-
|
123
|
-
TYPE_TAG_TO_GTYPE = {
|
124
|
-
:array => TYPE_ARRAY,
|
125
|
-
:gboolean => TYPE_BOOLEAN,
|
126
|
-
:gdouble => TYPE_DOUBLE,
|
127
|
-
:gfloat => TYPE_FLOAT,
|
128
|
-
:ghash => TYPE_HASH_TABLE,
|
129
|
-
:gint32 => TYPE_INT,
|
130
|
-
:glist => TYPE_POINTER,
|
131
|
-
:utf8 => TYPE_STRING,
|
132
|
-
:void => TYPE_NONE
|
133
|
-
}
|
134
127
|
end
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -24,13 +24,9 @@ module GObject
|
|
24
24
|
setup_instance_method "get_property"
|
25
25
|
setup_instance_method "set_property"
|
26
26
|
|
27
|
-
def
|
27
|
+
def get_property_extended property_name
|
28
|
+
gvalue = get_property property_name
|
28
29
|
type_info = get_property_type property_name
|
29
|
-
pspec = type_class.find_property property_name
|
30
|
-
|
31
|
-
gvalue = GObject::Value.for_g_type pspec.value_type
|
32
|
-
get_property_without_override property_name, gvalue
|
33
|
-
|
34
30
|
case type_info.tag
|
35
31
|
when :ghash, :glist
|
36
32
|
adjust_value_to_type gvalue.get_value_plain, type_info
|
@@ -39,12 +35,26 @@ module GObject
|
|
39
35
|
end
|
40
36
|
end
|
41
37
|
|
42
|
-
def
|
43
|
-
type_info = get_property_type property_name
|
38
|
+
def get_property_with_override property_name
|
44
39
|
pspec = type_class.find_property property_name
|
45
40
|
|
46
41
|
gvalue = GObject::Value.for_g_type pspec.value_type
|
47
|
-
|
42
|
+
get_property_without_override property_name, gvalue
|
43
|
+
|
44
|
+
gvalue
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_property_extended property_name, value
|
48
|
+
type_info = get_property_type property_name
|
49
|
+
adjusted_value = adjust_value_to_type(value, type_info)
|
50
|
+
|
51
|
+
set_property property_name, adjusted_value
|
52
|
+
end
|
53
|
+
|
54
|
+
def set_property_with_override property_name, value
|
55
|
+
pspec = type_class.find_property property_name
|
56
|
+
gvalue = GObject::Value.for_g_type pspec.value_type
|
57
|
+
gvalue.set_value value
|
48
58
|
set_property_without_override property_name, gvalue
|
49
59
|
end
|
50
60
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module GObject
|
2
|
+
load_class :ObjectClass
|
3
|
+
|
4
|
+
# Overrides for GObjectClass, a struct containing GObject's class data
|
5
|
+
class ObjectClass
|
6
|
+
def set_property= callback
|
7
|
+
@struct[:set_property] = GObject::ObjectSetPropertyFunc.from callback
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_property= callback
|
11
|
+
@struct[:get_property] = GObject::ObjectGetPropertyFunc.from callback
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|