gir_ffi 0.7.4 → 0.7.5
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 +4 -4
- data/Changelog.md +7 -0
- data/TODO.md +8 -0
- data/lib/ffi-glib/array.rb +7 -7
- data/lib/ffi-glib/byte_array.rb +3 -4
- data/lib/ffi-glib/bytes.rb +3 -3
- data/lib/ffi-glib/error.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +7 -7
- data/lib/ffi-glib/iconv.rb +3 -4
- data/lib/ffi-glib/list.rb +3 -3
- data/lib/ffi-glib/list_methods.rb +3 -3
- data/lib/ffi-glib/ptr_array.rb +6 -6
- data/lib/ffi-glib/s_list.rb +3 -3
- data/lib/ffi-glib/strv.rb +3 -3
- data/lib/ffi-glib/variant.rb +6 -2
- data/lib/ffi-glib.rb +3 -0
- data/lib/ffi-gobject/base.rb +1 -0
- data/lib/ffi-gobject/closure.rb +2 -2
- data/lib/ffi-gobject/initially_unowned.rb +4 -3
- data/lib/ffi-gobject/object.rb +5 -5
- data/lib/ffi-gobject/object_class.rb +2 -2
- data/lib/ffi-gobject/ruby_closure.rb +2 -3
- data/lib/ffi-gobject/value.rb +5 -5
- data/lib/ffi-gobject.rb +17 -22
- data/lib/ffi-gobject_introspection/i_arg_info.rb +0 -1
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -4
- data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -2
- data/lib/ffi-gobject_introspection/i_constant_info.rb +19 -11
- data/lib/ffi-gobject_introspection/i_enum_info.rb +4 -3
- data/lib/ffi-gobject_introspection/i_function_info.rb +7 -1
- data/lib/ffi-gobject_introspection/i_interface_info.rb +12 -0
- data/lib/ffi-gobject_introspection/i_object_info.rb +19 -8
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +0 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +10 -15
- data/lib/ffi-gobject_introspection/i_struct_info.rb +4 -2
- data/lib/ffi-gobject_introspection/i_type_info.rb +4 -2
- data/lib/ffi-gobject_introspection/i_union_info.rb +7 -3
- data/lib/ffi-gobject_introspection/i_value_info.rb +0 -1
- data/lib/ffi-gobject_introspection/lib.rb +1 -2
- data/lib/ffi-gobject_introspection.rb +0 -1
- data/lib/gir_ffi/allocation_helper.rb +2 -1
- data/lib/gir_ffi/arg_helper.rb +6 -2
- data/lib/gir_ffi/builder_helper.rb +1 -0
- data/lib/gir_ffi/builders/argument_builder_collection.rb +67 -0
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +2 -0
- data/lib/gir_ffi/builders/callback_argument_builder.rb +7 -5
- data/lib/gir_ffi/builders/callback_builder.rb +3 -1
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -0
- data/lib/gir_ffi/builders/closure_argument_builder.rb +13 -0
- data/lib/gir_ffi/builders/closure_convertor.rb +2 -0
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +2 -0
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +1 -0
- data/lib/gir_ffi/builders/enum_builder.rb +1 -4
- data/lib/gir_ffi/builders/field_builder.rb +2 -2
- data/lib/gir_ffi/builders/function_builder.rb +2 -1
- data/lib/gir_ffi/builders/interface_builder.rb +0 -3
- data/lib/gir_ffi/builders/mapping_method_builder.rb +24 -92
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +73 -0
- data/lib/gir_ffi/builders/null_argument_builder.rb +3 -0
- data/lib/gir_ffi/builders/null_builder.rb +1 -0
- data/lib/gir_ffi/builders/object_builder.rb +0 -2
- data/lib/gir_ffi/builders/property_builder.rb +4 -4
- data/lib/gir_ffi/builders/registered_type_builder.rb +35 -1
- data/lib/gir_ffi/builders/return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -0
- data/lib/gir_ffi/builders/signal_closure_builder.rb +46 -0
- data/lib/gir_ffi/builders/struct_builder.rb +0 -2
- data/lib/gir_ffi/builders/type_builder.rb +1 -1
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -1
- data/lib/gir_ffi/builders/union_builder.rb +0 -2
- data/lib/gir_ffi/builders/user_defined_builder.rb +6 -18
- data/lib/gir_ffi/builders/vfunc_builder.rb +6 -4
- data/lib/gir_ffi/builders/with_layout.rb +1 -2
- data/lib/gir_ffi/callback_base.rb +4 -4
- data/lib/gir_ffi/class_base.rb +28 -18
- data/lib/gir_ffi/enum_base.rb +2 -2
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -0
- data/lib/gir_ffi/in_out_pointer.rb +4 -4
- data/lib/gir_ffi/in_pointer.rb +2 -2
- data/lib/gir_ffi/info_ext/full_type_name.rb +16 -0
- data/lib/gir_ffi/info_ext/i_arg_info.rb +2 -3
- data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -8
- data/lib/gir_ffi/info_ext/i_property_info.rb +0 -1
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +0 -1
- data/lib/gir_ffi/info_ext/i_signal_info.rb +8 -40
- data/lib/gir_ffi/info_ext/i_type_info.rb +12 -2
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +1 -6
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +0 -5
- data/lib/gir_ffi/info_ext.rb +1 -0
- data/lib/gir_ffi/lib_c.rb +1 -0
- data/lib/gir_ffi/module_base.rb +2 -2
- data/lib/gir_ffi/object_base.rb +0 -16
- data/lib/gir_ffi/receiver_argument_info.rb +0 -4
- data/lib/gir_ffi/registered_type_base.rb +0 -1
- data/lib/gir_ffi/sized_array.rb +5 -5
- data/lib/gir_ffi/struct_base.rb +4 -0
- data/lib/gir_ffi/type_base.rb +2 -2
- data/lib/gir_ffi/type_map.rb +1 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -3
- data/lib/gir_ffi/user_data_type_info.rb +2 -0
- data/lib/gir_ffi/version.rb +2 -1
- data/lib/gir_ffi/zero_terminated.rb +6 -6
- data/lib/gir_ffi-base/glib/boolean.rb +2 -2
- data/lib/gir_ffi-base/glib/strv.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +1 -0
- data/lib/gir_ffi-base/gobject.rb +1 -1
- data/lib/gir_ffi.rb +2 -0
- data/test/ffi-glib/hash_table_test.rb +1 -1
- data/test/ffi-glib/strv_test.rb +27 -0
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +1 -5
- data/test/ffi-gobject_test.rb +3 -3
- data/test/gir_ffi/builders/{with_methods_test.rb → registered_type_builder_test.rb} +1 -1
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +136 -0
- data/test/gir_ffi/builders/user_defined_builder_test.rb +2 -1
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -11
- data/test/integration/generated_gimarshallingtests_test.rb +47 -2
- data/test/integration/generated_regress_test.rb +19 -11
- metadata +82 -25
- data/lib/gir_ffi/builders/signal_builder.rb +0 -51
- data/lib/gir_ffi/builders/with_methods.rb +0 -45
- data/lib/gir_ffi/signal_base.rb +0 -21
- data/lib/gir_ffi/vfunc_base.rb +0 -9
- data/test/gir_ffi/builders/signal_builder_test.rb +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18cf75d3dd4a310371647db4f56ab2bdcf516245
|
4
|
+
data.tar.gz: d3a5fe4123bdc4ae02e7eae61364e87fa7f01cca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5280cf6c320d6c50cf10bf320c8738ed5c14ae22867ceb8c8de74a31d6a1a6c5990cb572d26772574bac971296547ca333fcd91e051d3e8aaae2165851a2ac0d
|
7
|
+
data.tar.gz: 4f2d7eb7bb6161c3436388ce09b3948e7e04f428053055eedf4386f264dd7faac6c91d6b198abf52b471319b3a0cd6be6e905a68ee3076a21ac03a99731ea0db
|
data/Changelog.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.7.5 / 2014-06-22
|
4
|
+
|
5
|
+
* Use closures as signal handlers, rather than callbacks
|
6
|
+
* Obtain reference to GVariant on creation
|
7
|
+
* Make struct arguments work in JRuby
|
8
|
+
* Various refactoring & code cleanup
|
9
|
+
|
3
10
|
## 0.7.4 / 2014-05-03
|
4
11
|
|
5
12
|
* Correctly handle closure data arguments originating from C
|
data/TODO.md
CHANGED
@@ -89,6 +89,14 @@ to be put in place for that.
|
|
89
89
|
|
90
90
|
For how to handle objects, see https://bugzilla.gnome.org/show_bug.cgi?id=657202#c1
|
91
91
|
|
92
|
+
## External dependencies
|
93
|
+
|
94
|
+
Things that I think GirFFI cannot fix:
|
95
|
+
|
96
|
+
* gobject-introspection should correctly mark private fields as not readable.
|
97
|
+
* gobject-introspection should ignore functions that are only defined but not
|
98
|
+
implemented, or implement those cases in GIMarshallingTests.
|
99
|
+
|
92
100
|
## See Also
|
93
101
|
|
94
102
|
dnote
|
data/lib/ffi-glib/array.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'ffi-glib/container_class_methods'
|
2
2
|
require 'ffi-glib/array_methods'
|
3
3
|
|
4
|
-
|
5
|
-
load_class :Array
|
4
|
+
GLib.load_class :Array
|
6
5
|
|
6
|
+
module GLib
|
7
7
|
# Overrides for GArray, GLib's automatically growing array. It should not
|
8
8
|
# be necessary to create objects of this class from Ruby directly.
|
9
9
|
class Array
|
@@ -46,8 +46,8 @@ module GLib
|
|
46
46
|
|
47
47
|
alias element_size get_element_size
|
48
48
|
|
49
|
-
def ==
|
50
|
-
|
49
|
+
def == other
|
50
|
+
to_a == other.to_a
|
51
51
|
end
|
52
52
|
|
53
53
|
def reset_typespec typespec
|
@@ -57,7 +57,7 @@ module GLib
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.from_enumerable elmtype, it
|
60
|
-
|
60
|
+
new(elmtype).tap {|arr| arr.append_vals it }
|
61
61
|
end
|
62
62
|
|
63
63
|
private
|
@@ -68,11 +68,11 @@ module GLib
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def calculated_element_size
|
71
|
-
self.class.calculated_element_size
|
71
|
+
self.class.calculated_element_size element_type
|
72
72
|
end
|
73
73
|
|
74
74
|
def check_element_size_match
|
75
|
-
unless calculated_element_size ==
|
75
|
+
unless calculated_element_size == get_element_size
|
76
76
|
warn "WARNING: Element sizes do not match"
|
77
77
|
end
|
78
78
|
end
|
data/lib/ffi-glib/byte_array.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
load_class :ByteArray
|
1
|
+
GLib.load_class :ByteArray
|
3
2
|
|
3
|
+
module GLib
|
4
4
|
# Overrides for GByteArray, GLib's automatically growing array of bytes.
|
5
5
|
class ByteArray
|
6
6
|
def to_string
|
@@ -10,7 +10,7 @@ module GLib
|
|
10
10
|
def append data
|
11
11
|
bytes = GirFFI::InPointer.from :utf8, data
|
12
12
|
len = data.bytesize
|
13
|
-
self.class.wrap(Lib.g_byte_array_append
|
13
|
+
self.class.wrap(Lib.g_byte_array_append to_ptr, bytes, len)
|
14
14
|
end
|
15
15
|
|
16
16
|
class << self; undef :new; end
|
@@ -20,4 +20,3 @@ module GLib
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
data/lib/ffi-glib/bytes.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
load_class :Bytes
|
1
|
+
GLib.load_class :Bytes
|
3
2
|
|
3
|
+
module GLib
|
4
4
|
# Overrides for GBytes, GLib's immutable array of bytes.
|
5
5
|
class Bytes
|
6
6
|
include Enumerable
|
@@ -37,7 +37,7 @@ module GLib
|
|
37
37
|
|
38
38
|
def self.new arr
|
39
39
|
data = GirFFI::SizedArray.from :guint8, arr.size, arr
|
40
|
-
|
40
|
+
wrap Lib.g_bytes_new data.to_ptr, data.size
|
41
41
|
end
|
42
42
|
|
43
43
|
private
|
data/lib/ffi-glib/error.rb
CHANGED
data/lib/ffi-glib/hash_table.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'ffi-glib/container_class_methods'
|
2
2
|
|
3
|
-
|
4
|
-
load_class :HashTable
|
3
|
+
GLib.load_class :HashTable
|
5
4
|
|
5
|
+
module GLib
|
6
6
|
# Overrides for GHashTable, GLib's hash table implementation.
|
7
7
|
class HashTable
|
8
8
|
include Enumerable
|
@@ -12,23 +12,23 @@ module GLib
|
|
12
12
|
attr_reader :value_type
|
13
13
|
|
14
14
|
def each
|
15
|
-
prc = proc {|keyptr, valptr,
|
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
|
21
|
+
::GLib::Lib.g_hash_table_foreach to_ptr, callback, nil
|
22
22
|
end
|
23
23
|
|
24
24
|
def to_hash
|
25
|
-
Hash[
|
25
|
+
Hash[to_a]
|
26
26
|
end
|
27
27
|
|
28
28
|
def insert key, value
|
29
29
|
keyptr = GirFFI::InPointer.from key_type, key
|
30
30
|
valptr = GirFFI::InPointer.from value_type, value
|
31
|
-
::GLib::Lib.g_hash_table_insert
|
31
|
+
::GLib::Lib.g_hash_table_insert to_ptr, keyptr, valptr
|
32
32
|
end
|
33
33
|
|
34
34
|
class << self; remove_method :new; end
|
@@ -44,7 +44,7 @@ module GLib
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def self.from_enumerable typespec, hash
|
47
|
-
ghash =
|
47
|
+
ghash = new(*typespec)
|
48
48
|
hash.each do |key, val|
|
49
49
|
ghash.insert key, val
|
50
50
|
end
|
data/lib/ffi-glib/iconv.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
|
2
|
-
load_class :IConv
|
1
|
+
GLib.load_class :IConv
|
3
2
|
|
3
|
+
module GLib
|
4
4
|
# Overrides for IConv
|
5
5
|
class IConv
|
6
|
-
def self.open
|
6
|
+
def self.open to_codeset, from_codeset
|
7
7
|
to_ptr = GirFFI::InPointer.from(:utf8, to_codeset)
|
8
8
|
from_ptr = GirFFI::InPointer.from(:utf8, from_codeset)
|
9
9
|
result_ptr = Lib.g_iconv_open(to_ptr, from_ptr)
|
@@ -11,4 +11,3 @@ module GLib
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
data/lib/ffi-glib/list.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'ffi-glib/list_methods'
|
2
2
|
|
3
|
-
|
4
|
-
load_class :List
|
3
|
+
GLib.load_class :List
|
5
4
|
|
5
|
+
module GLib
|
6
6
|
# Overrides for GList, GLib's doubly linked list implementation.
|
7
7
|
class List
|
8
8
|
include ListMethods
|
9
9
|
|
10
10
|
def self.from_enumerable type, arr
|
11
|
-
arr.inject(
|
11
|
+
arr.inject(new type) { |lst, val| lst.append val }
|
12
12
|
end
|
13
13
|
|
14
14
|
def append data
|
@@ -44,8 +44,8 @@ module GLib
|
|
44
44
|
self
|
45
45
|
end
|
46
46
|
|
47
|
-
def ==
|
48
|
-
|
47
|
+
def == other
|
48
|
+
to_a == other.to_a
|
49
49
|
end
|
50
50
|
|
51
51
|
private
|
@@ -65,6 +65,7 @@ module GLib
|
|
65
65
|
GirFFI::InPointer.from(element_type, data)
|
66
66
|
end
|
67
67
|
|
68
|
+
# Common class methods for List and SList
|
68
69
|
module ListClassMethods
|
69
70
|
def new type
|
70
71
|
_real_new.tap do |it|
|
@@ -76,4 +77,3 @@ module GLib
|
|
76
77
|
end
|
77
78
|
end
|
78
79
|
end
|
79
|
-
|
data/lib/ffi-glib/ptr_array.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'ffi-glib/container_class_methods'
|
2
2
|
require 'ffi-glib/array_methods'
|
3
3
|
|
4
|
-
|
5
|
-
load_class :PtrArray
|
4
|
+
GLib.load_class :PtrArray
|
6
5
|
|
6
|
+
module GLib
|
7
7
|
# Overrides for GPtrArray, GLib's automatically growing array of
|
8
8
|
# pointers.
|
9
9
|
class PtrArray
|
@@ -25,8 +25,8 @@ module GLib
|
|
25
25
|
wrap(type, Lib.g_ptr_array_new)
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.from_enumerable
|
29
|
-
|
28
|
+
def self.from_enumerable type, it
|
29
|
+
new(type).tap {|arr| arr.add_array it}
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.add array, data
|
@@ -65,8 +65,8 @@ module GLib
|
|
65
65
|
@struct[:len]
|
66
66
|
end
|
67
67
|
|
68
|
-
def ==
|
69
|
-
|
68
|
+
def == other
|
69
|
+
to_a == other.to_a
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|
data/lib/ffi-glib/s_list.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'ffi-glib/list_methods'
|
2
2
|
|
3
|
-
|
4
|
-
load_class :SList
|
3
|
+
GLib.load_class :SList
|
5
4
|
|
5
|
+
module GLib
|
6
6
|
# Overrides for GSList, GLib's singly-linked list implementation.
|
7
7
|
class SList
|
8
8
|
include ListMethods
|
9
9
|
|
10
10
|
def self.from_enumerable type, arr
|
11
|
-
arr.reverse.inject(
|
11
|
+
arr.reverse.inject(new type) { |lst, val| lst.prepend val }
|
12
12
|
end
|
13
13
|
|
14
14
|
def prepend data
|
data/lib/ffi-glib/strv.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module GLib
|
2
2
|
# Extra methods for GLib::Strv. The bulk is defined in `gir_ffi-base/glib/strv.rb`
|
3
3
|
class Strv
|
4
|
-
def ==
|
5
|
-
|
4
|
+
def == other
|
5
|
+
to_a == other.to_a
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.from it
|
@@ -19,7 +19,7 @@ module GLib
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.from_enumerable enum
|
22
|
-
|
22
|
+
wrap GirFFI::InPointer.from_array :utf8, enum
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/ffi-glib/variant.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
load_class :Variant
|
1
|
+
GLib.load_class :Variant
|
3
2
|
|
3
|
+
module GLib
|
4
4
|
# Overrides for GVariant, GLib's variant data type.
|
5
5
|
class Variant
|
6
6
|
setup_instance_method "get_string"
|
@@ -9,6 +9,10 @@ module GLib
|
|
9
9
|
get_string_without_override.first
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.constructor_wrap ptr
|
13
|
+
super.tap {|variant| variant.ref }
|
14
|
+
end
|
15
|
+
|
12
16
|
alias get_string_without_override get_string
|
13
17
|
alias get_string get_string_with_override
|
14
18
|
end
|
data/lib/ffi-glib.rb
CHANGED
@@ -15,12 +15,15 @@ require 'ffi-glib/s_list'
|
|
15
15
|
require 'ffi-glib/strv'
|
16
16
|
require 'ffi-glib/variant'
|
17
17
|
|
18
|
+
# Module representing GLib's GLib namespace.
|
18
19
|
module GLib
|
19
20
|
load_class :HFunc
|
20
21
|
load_class :HashFunc
|
21
22
|
load_class :EqualFunc
|
22
23
|
load_class :Func
|
23
24
|
|
25
|
+
# Module for attaching functions from the glib library.
|
26
|
+
# NOTE: This module is defined by the call to GirFFI.setup above.
|
24
27
|
module Lib
|
25
28
|
attach_function :g_slist_prepend, [:pointer, :pointer], :pointer
|
26
29
|
|
data/lib/ffi-gobject/base.rb
CHANGED
data/lib/ffi-gobject/closure.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
|
2
|
-
load_class :InitiallyUnowned
|
1
|
+
GObject.load_class :InitiallyUnowned
|
3
2
|
|
3
|
+
module GObject
|
4
4
|
# Overrides for GInitiallyUnowned, GObject's base class for objects that
|
5
5
|
# start with a floating reference.
|
6
6
|
class InitiallyUnowned
|
7
|
+
# Wrapping method used in constructors. For InitiallyUnowned and
|
8
|
+
# descendants, this needs to sink the object's floating reference.
|
7
9
|
def self.constructor_wrap ptr
|
8
10
|
super.tap {|obj| ::GObject.object_ref_sink obj}
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
12
|
-
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
|
2
|
-
load_class :Object
|
1
|
+
GObject.load_class :Object
|
3
2
|
|
3
|
+
module GObject
|
4
4
|
# Overrides for GObject, GObject's generic base class.
|
5
5
|
class Object
|
6
6
|
|
7
7
|
setup_method "new"
|
8
8
|
|
9
9
|
# TODO: Generate accessor methods from GIR at class definition time
|
10
|
-
def method_missing
|
10
|
+
def method_missing method, *args
|
11
11
|
if respond_to?("get_#{method}")
|
12
12
|
return send("get_#{method}", *args)
|
13
13
|
end
|
@@ -17,7 +17,7 @@ module GObject
|
|
17
17
|
super
|
18
18
|
end
|
19
19
|
|
20
|
-
def signal_connect
|
20
|
+
def signal_connect event, &block
|
21
21
|
GObject.signal_connect(self, event, &block)
|
22
22
|
end
|
23
23
|
|
@@ -59,7 +59,7 @@ module GObject
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def type_class
|
62
|
-
GObject::ObjectClass.wrap(
|
62
|
+
GObject::ObjectClass.wrap(to_ptr.get_pointer 0)
|
63
63
|
end
|
64
64
|
|
65
65
|
alias get_property_without_override get_property
|
@@ -34,11 +34,10 @@ module GObject
|
|
34
34
|
closure.block = block
|
35
35
|
closure.set_marshal Proc.new {|*args| marshaller(*args)}
|
36
36
|
|
37
|
-
|
37
|
+
closure
|
38
38
|
end
|
39
39
|
|
40
|
-
def self.marshaller
|
41
|
-
_invocation_hint, _marshal_data)
|
40
|
+
def self.marshaller closure, return_value, param_values, _invocation_hint, _marshal_data
|
42
41
|
rclosure = wrap(closure.to_ptr)
|
43
42
|
param_values ||= []
|
44
43
|
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
load_class :Value
|
1
|
+
GObject.load_class :Value
|
3
2
|
|
3
|
+
module GObject
|
4
4
|
# Overrides for GValue, GObject's generic value container structure.
|
5
5
|
class Value
|
6
6
|
# TODO: Give more generic name
|
@@ -88,7 +88,7 @@ module GObject
|
|
88
88
|
|
89
89
|
# TODO: Give more generic name
|
90
90
|
def self.wrap_ruby_value val
|
91
|
-
|
91
|
+
new.set_ruby_value val
|
92
92
|
end
|
93
93
|
|
94
94
|
def self.from val
|
@@ -104,12 +104,12 @@ module GObject
|
|
104
104
|
|
105
105
|
def self.for_g_type g_type
|
106
106
|
return nil if g_type == TYPE_NONE
|
107
|
-
|
107
|
+
new.tap {|it| it.init g_type }
|
108
108
|
end
|
109
109
|
|
110
110
|
# TODO: Combine with wrap_ruby_value
|
111
111
|
def self.wrap_instance instance
|
112
|
-
|
112
|
+
new.tap {|it|
|
113
113
|
it.init GObject.type_from_instance instance
|
114
114
|
it.set_instance instance
|
115
115
|
}
|
data/lib/ffi-gobject.rb
CHANGED
@@ -16,19 +16,19 @@ require 'gir_ffi/builders/user_defined_builder'
|
|
16
16
|
# Module representing GLib's GObject namespace.
|
17
17
|
module GObject
|
18
18
|
def self.object_ref obj
|
19
|
-
Lib
|
19
|
+
Lib.g_object_ref obj.to_ptr
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.object_ref_sink obj
|
23
|
-
Lib
|
23
|
+
Lib.g_object_ref_sink obj.to_ptr
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.object_unref obj
|
27
|
-
Lib
|
27
|
+
Lib.g_object_unref obj.to_ptr
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.object_is_floating obj
|
31
|
-
Lib
|
31
|
+
Lib.g_object_is_floating obj.to_ptr
|
32
32
|
end
|
33
33
|
|
34
34
|
def self.type_from_instance_pointer inst_ptr
|
@@ -52,8 +52,6 @@ module GObject
|
|
52
52
|
ObjectClass.wrap klsptr
|
53
53
|
end
|
54
54
|
|
55
|
-
setup_method :signal_emitv
|
56
|
-
|
57
55
|
def self.signal_lookup_from_instance signal, object
|
58
56
|
signal_lookup signal, type_from_instance(object)
|
59
57
|
end
|
@@ -62,31 +60,29 @@ module GObject
|
|
62
60
|
signal, detail = detailed_signal.split('::')
|
63
61
|
signal_id = signal_lookup_from_instance signal, object
|
64
62
|
detail_quark = GLib.quark_from_string(detail)
|
65
|
-
sig_info = object.class.find_signal signal
|
66
|
-
|
67
|
-
arr_ptr = sig_info.arguments_to_gvalue_array_pointer object, args
|
68
63
|
|
69
|
-
|
64
|
+
sig_info = object.class.find_signal signal
|
65
|
+
argument_gvalues = sig_info.arguments_to_gvalues object, args
|
66
|
+
return_gvalue = sig_info.gvalue_for_return_value
|
70
67
|
|
71
|
-
|
68
|
+
signal_emitv argument_gvalues, signal_id, detail_quark, return_gvalue
|
72
69
|
|
73
|
-
|
70
|
+
return_gvalue
|
74
71
|
end
|
75
72
|
|
76
73
|
def self.signal_connect object, detailed_signal, data=nil, &block
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
GirFFI::CallbackBase.store_callback callback
|
74
|
+
raise ArgumentError, "Block needed" unless block_given?
|
75
|
+
signal_name, _ = detailed_signal.split('::')
|
76
|
+
sig_info = object.class.find_signal signal_name
|
81
77
|
|
82
|
-
|
78
|
+
closure = sig_info.wrap_in_closure {|*args| block.call(*args << data) }
|
83
79
|
|
84
|
-
|
80
|
+
# TODO: Provide _after variant
|
81
|
+
signal_connect_closure object, detailed_signal, closure, false
|
85
82
|
end
|
86
83
|
|
87
84
|
# Smells of :reek:LongParameterList: due to the C interface.
|
88
|
-
def self.param_spec_int
|
89
|
-
default_value, flags)
|
85
|
+
def self.param_spec_int name, nick, blurb, minimum, maximum, default_value, flags
|
90
86
|
ptr = Lib.g_param_spec_int(name, nick, blurb, minimum, maximum,
|
91
87
|
default_value, flags)
|
92
88
|
ParamSpecInt.wrap(ptr)
|
@@ -98,9 +94,8 @@ module GObject
|
|
98
94
|
load_class :ClosureMarshal
|
99
95
|
load_class :ParamFlags
|
100
96
|
|
97
|
+
# NOTE: This Lib module is set up in `gir_ffi-base/gobject/lib.rb`.
|
101
98
|
module Lib
|
102
|
-
# NOTE: This Lib module is set up in `gir_ffi-base/gobject/lib.rb`.
|
103
|
-
|
104
99
|
attach_function :g_object_ref, [:pointer], :void
|
105
100
|
attach_function :g_object_ref_sink, [:pointer], :void
|
106
101
|
attach_function :g_object_unref, [:pointer], :void
|
@@ -40,7 +40,7 @@ module GObjectIntrospection
|
|
40
40
|
method = method.to_s
|
41
41
|
single ||= method.to_s[0..-2]
|
42
42
|
count = method.sub(/^(get_)?/, "\\1n_")
|
43
|
-
|
43
|
+
class_eval <<-CODE
|
44
44
|
def #{method}
|
45
45
|
(0..(#{count} - 1)).map do |i|
|
46
46
|
#{single} i
|
@@ -70,7 +70,7 @@ module GObjectIntrospection
|
|
70
70
|
single = method.sub(/^find_/, "")
|
71
71
|
counter ||= "n_#{single}s"
|
72
72
|
fetcher ||= "#{single}"
|
73
|
-
|
73
|
+
class_eval <<-CODE
|
74
74
|
def #{method}(name)
|
75
75
|
(0..(#{counter} - 1)).each do |i|
|
76
76
|
it = #{fetcher}(i)
|
@@ -108,8 +108,7 @@ module GObjectIntrospection
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def self.wrap ptr
|
111
|
-
|
112
|
-
return new ptr
|
111
|
+
new ptr unless ptr.null?
|
113
112
|
end
|
114
113
|
|
115
114
|
def == other
|
@@ -22,7 +22,7 @@ module GObjectIntrospection
|
|
22
22
|
Lib.g_callable_info_get_n_args @gobj
|
23
23
|
end
|
24
24
|
|
25
|
-
def arg
|
25
|
+
def arg index
|
26
26
|
IArgInfo.wrap(Lib.g_callable_info_get_arg @gobj, index)
|
27
27
|
end
|
28
28
|
##
|
@@ -33,4 +33,3 @@ module GObjectIntrospection
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
@@ -14,24 +14,32 @@ module GObjectIntrospection
|
|
14
14
|
utf8: :v_string
|
15
15
|
}
|
16
16
|
|
17
|
-
def value_union
|
18
|
-
val = Lib::GIArgument.new
|
19
|
-
Lib.g_constant_info_get_value @gobj, val
|
20
|
-
return val
|
21
|
-
end
|
22
|
-
|
23
17
|
def value
|
24
|
-
|
25
|
-
|
26
|
-
if tag == :utf8
|
27
|
-
val.force_encoding("utf-8")
|
18
|
+
if type_tag == :utf8
|
19
|
+
raw_value.force_encoding("utf-8")
|
28
20
|
else
|
29
|
-
|
21
|
+
raw_value
|
30
22
|
end
|
31
23
|
end
|
32
24
|
|
33
25
|
def constant_type
|
34
26
|
ITypeInfo.wrap(Lib.g_constant_info_get_type @gobj)
|
35
27
|
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def type_tag
|
32
|
+
@type_tag ||= constant_type.tag
|
33
|
+
end
|
34
|
+
|
35
|
+
def raw_value
|
36
|
+
value_union = Lib::GIArgument.new
|
37
|
+
Lib.g_constant_info_get_value @gobj, value_union
|
38
|
+
value_union[union_member_key]
|
39
|
+
end
|
40
|
+
|
41
|
+
def union_member_key
|
42
|
+
TYPE_TAG_TO_UNION_MEMBER[type_tag]
|
43
|
+
end
|
36
44
|
end
|
37
45
|
end
|