gir_ffi 0.7.5 → 0.7.6
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 +17 -1
- data/README.md +1 -1
- data/Rakefile +0 -7
- data/examples/main_loop.rb +12 -0
- data/lib/ffi-glib/array.rb +18 -5
- data/lib/ffi-glib/array_methods.rb +1 -1
- data/lib/ffi-glib/list.rb +1 -1
- data/lib/ffi-glib/list_methods.rb +1 -1
- data/lib/ffi-glib/main_loop.rb +51 -0
- data/lib/ffi-glib/ptr_array.rb +2 -2
- data/lib/ffi-glib/s_list.rb +1 -1
- data/lib/ffi-glib/variant.rb +3 -3
- data/lib/ffi-glib.rb +1 -0
- data/lib/ffi-gobject/initially_unowned.rb +1 -1
- data/lib/ffi-gobject/object.rb +14 -12
- data/lib/ffi-gobject/ruby_closure.rb +3 -2
- data/lib/ffi-gobject/value.rb +12 -16
- data/lib/ffi-gobject.rb +4 -21
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/arg_helper.rb +2 -2
- data/lib/gir_ffi/builder.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder.rb +19 -17
- data/lib/gir_ffi/builders/argument_builder_collection.rb +51 -16
- data/lib/gir_ffi/builders/base_argument_builder.rb +20 -10
- data/lib/gir_ffi/builders/base_type_builder.rb +6 -5
- data/lib/gir_ffi/builders/callback_argument_builder.rb +5 -5
- data/lib/gir_ffi/builders/callback_builder.rb +0 -4
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +11 -11
- data/lib/gir_ffi/builders/constant_builder.rb +2 -4
- data/lib/gir_ffi/builders/enum_builder.rb +7 -7
- data/lib/gir_ffi/builders/error_argument_builder.rb +16 -4
- data/lib/gir_ffi/builders/field_builder.rb +5 -17
- data/lib/gir_ffi/builders/function_builder.rb +36 -86
- data/lib/gir_ffi/builders/interface_builder.rb +2 -7
- data/lib/gir_ffi/builders/mapping_method_builder.rb +42 -33
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +44 -33
- data/lib/gir_ffi/builders/method_template.rb +81 -0
- data/lib/gir_ffi/builders/module_builder.rb +5 -5
- data/lib/gir_ffi/builders/object_builder.rb +44 -25
- data/lib/gir_ffi/builders/property_builder.rb +6 -2
- data/lib/gir_ffi/builders/registered_type_builder.rb +1 -5
- data/lib/gir_ffi/builders/return_value_builder.rb +20 -15
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -6
- data/lib/gir_ffi/builders/type_builder.rb +1 -1
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -5
- data/lib/gir_ffi/builders/user_defined_builder.rb +17 -21
- data/lib/gir_ffi/builders/vfunc_builder.rb +3 -6
- data/lib/gir_ffi/builders/with_layout.rb +2 -6
- data/lib/gir_ffi/callback_base.rb +10 -5
- data/lib/gir_ffi/class_base.rb +4 -7
- data/lib/gir_ffi/enum_base.rb +1 -1
- data/lib/gir_ffi/g_type.rb +21 -19
- data/lib/gir_ffi/in_out_pointer.rb +2 -4
- data/lib/gir_ffi/in_pointer.rb +9 -8
- data/lib/gir_ffi/info_ext/i_field_info.rb +1 -3
- data/lib/gir_ffi/info_ext/i_signal_info.rb +4 -4
- data/lib/gir_ffi/info_ext/i_type_info.rb +6 -6
- data/lib/gir_ffi/module_base.rb +3 -2
- data/lib/gir_ffi/object_base.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +1 -1
- data/lib/gir_ffi/type_base.rb +2 -2
- data/lib/gir_ffi/unintrospectable_type_info.rb +2 -0
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +1 -1
- data/lib/gir_ffi-base/glib/strv.rb +2 -2
- data/lib/gir_ffi.rb +1 -1
- data/test/ffi-glib/array_test.rb +28 -0
- data/test/ffi-glib/byte_array_test.rb +1 -1
- data/test/ffi-glib/bytes_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +11 -1
- data/test/ffi-gobject/value_test.rb +12 -1
- data/test/ffi-gobject_introspection/i_base_info_test.rb +14 -0
- data/test/ffi-gobject_introspection/i_object_info_test.rb +8 -6
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +24 -0
- data/test/ffi-gobject_introspection/i_type_info_test.rb +17 -0
- data/test/gir_ffi/builder_test.rb +3 -2
- data/test/gir_ffi/builders/argument_builder_test.rb +2 -2
- data/test/gir_ffi/builders/function_builder_test.rb +27 -27
- data/test/gir_ffi/builders/object_builder_test.rb +10 -0
- data/test/gir_ffi/builders/return_value_builder_test.rb +3 -3
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +6 -6
- data/test/gir_ffi/in_out_pointer_test.rb +0 -2
- data/test/gir_ffi/info_ext/i_type_info_test.rb +1 -1
- data/test/gir_ffi_test_helper.rb +0 -4
- data/test/integration/generated_gimarshallingtests_test.rb +1 -1
- data/test/integration/generated_regress_test.rb +2 -2
- data/test/integration/idle_loop_test.rb +25 -0
- data/test/minitest/stats_plugin.rb +26 -0
- metadata +13 -62
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -12
- data/lib/gir_ffi/builders/null_builder.rb +0 -12
- data/tasks/yard.rake +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 784da223496ff93dd574411f1058071f336aa18e
|
4
|
+
data.tar.gz: ffbc7a82e2b710669a74055bf436a8c26d2ed956
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9a5bbd317a59c9cad7840e318e9a03e12413a130e259677216fc7fe6ad9ab5592017bdff9904ec15da9aa65a8f5dbf72b3d74f33f477c3c698309bce3ff4649
|
7
|
+
data.tar.gz: 1c7ec6f5c809e141c6f5338c742a1a3042cdbc18645dfc3631f838fe090b36fa12822b60eddf875d58707f78e2ad9e5e16c28a9ef7843e41f16a7902a4e882a3
|
data/Changelog.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.7.6 / 2014-08-22
|
4
|
+
|
5
|
+
* Work around respond_to? behavior in JRuby 1.6.13
|
6
|
+
* Deprecate setup_class in favor of load_class
|
7
|
+
* Support GValue containing GArray
|
8
|
+
* Provide constant TYPE_BYTE_ARRAY
|
9
|
+
* Don't recurse looking for signals and properties
|
10
|
+
* Clean up generated code:
|
11
|
+
* Avoid use of an ignored dummy argument
|
12
|
+
* Clean up trailing whitespace
|
13
|
+
* Drop support for Ruby 1.9.2
|
14
|
+
* Allow data argument for GObject::Object#signal_connect
|
15
|
+
* Let Ruby threads run during GLib's main loop
|
16
|
+
* Make all dependencies versioned
|
17
|
+
* Various refactoring & code cleanup
|
18
|
+
|
3
19
|
## 0.7.5 / 2014-06-22
|
4
20
|
|
5
21
|
* Use closures as signal handlers, rather than callbacks
|
@@ -58,7 +74,7 @@
|
|
58
74
|
* Register defined properties in a subclass
|
59
75
|
* Support setting virtual function implementations in a subclass
|
60
76
|
* Support adding an interface to a subclass
|
61
|
-
* Support implementing an interface's virtual functions in a subclass
|
77
|
+
* Support implementing an interface's virtual functions in a subclass
|
62
78
|
* Use FFI's DataConvertor system to handle enums and callbacks
|
63
79
|
* Stop using deprecated GValueArray to construct argument array for signal_emit
|
64
80
|
* Make ITypeInfo#g_type return correct value for c arrays
|
data/README.md
CHANGED
@@ -45,7 +45,7 @@ Ruby bindings for GNOME using the GObject Introspection Repository.
|
|
45
45
|
|
46
46
|
## Requirements
|
47
47
|
|
48
|
-
GirFFI should work on MRI 1.9, 2.0, and 2.1, JRuby in 1.9 mode, and on
|
48
|
+
GirFFI should work on MRI 1.9.3, 2.0, and 2.1, JRuby in 1.9 or 2.0 mode, and on
|
49
49
|
Rubinius.
|
50
50
|
|
51
51
|
You will also need gobject-introspection installed with some
|
data/Rakefile
CHANGED
data/lib/ffi-glib/array.rb
CHANGED
@@ -44,20 +44,24 @@ module GLib
|
|
44
44
|
Lib.g_array_get_element_size self
|
45
45
|
end
|
46
46
|
|
47
|
-
|
47
|
+
alias_method :element_size, :get_element_size
|
48
48
|
|
49
49
|
def == other
|
50
50
|
to_a == other.to_a
|
51
51
|
end
|
52
52
|
|
53
|
-
def reset_typespec typespec
|
54
|
-
|
55
|
-
|
53
|
+
def reset_typespec typespec = nil
|
54
|
+
if typespec
|
55
|
+
@element_type = typespec
|
56
|
+
check_element_size_match
|
57
|
+
else
|
58
|
+
@element_type = guess_element_type
|
59
|
+
end
|
56
60
|
self
|
57
61
|
end
|
58
62
|
|
59
63
|
def self.from_enumerable elmtype, it
|
60
|
-
new(elmtype).tap {|arr| arr.append_vals it }
|
64
|
+
new(elmtype).tap { |arr| arr.append_vals it }
|
61
65
|
end
|
62
66
|
|
63
67
|
private
|
@@ -76,5 +80,14 @@ module GLib
|
|
76
80
|
warn "WARNING: Element sizes do not match"
|
77
81
|
end
|
78
82
|
end
|
83
|
+
|
84
|
+
def guess_element_type
|
85
|
+
case get_element_size
|
86
|
+
when 1 then :uint8
|
87
|
+
when 2 then :uint16
|
88
|
+
when 4 then :uint32
|
89
|
+
when 8 then :uint64
|
90
|
+
end
|
91
|
+
end
|
79
92
|
end
|
80
93
|
end
|
@@ -3,7 +3,7 @@ module GLib
|
|
3
3
|
module ArrayMethods
|
4
4
|
# Re-implementation of the g_array_index and g_ptr_array_index macros
|
5
5
|
def index idx
|
6
|
-
if idx >= length
|
6
|
+
if idx >= length || idx < 0
|
7
7
|
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
8
8
|
end
|
9
9
|
ptr = GirFFI::InOutPointer.new element_type, data_ptr + idx * element_size
|
data/lib/ffi-glib/list.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
GLib.load_class :MainLoop
|
4
|
+
|
5
|
+
module GLib
|
6
|
+
# Overrides for GMainLoop, GLib's event loop
|
7
|
+
class MainLoop
|
8
|
+
# Class encepsulationg logic for running an idle handler to make Ruby code
|
9
|
+
# run during GLib's event loop.
|
10
|
+
class ThreadEnabler
|
11
|
+
include Singleton
|
12
|
+
|
13
|
+
FRAMERATE = 25
|
14
|
+
DEFAULT_TIMEOUT = 1000 / FRAMERATE
|
15
|
+
|
16
|
+
def initialize timeout = DEFAULT_TIMEOUT
|
17
|
+
@timeout = timeout
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup_idle_handler
|
21
|
+
@handler_id ||= GLib.timeout_add(GLib::PRIORITY_DEFAULT,
|
22
|
+
@timeout, handler_proc,
|
23
|
+
nil, nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def handler_proc
|
29
|
+
proc do
|
30
|
+
Thread.pass
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
setup_instance_method "run_with_thread_enabler"
|
37
|
+
|
38
|
+
def run_with_thread_enabler
|
39
|
+
case RUBY_ENGINE
|
40
|
+
when 'jruby'
|
41
|
+
when 'rbx'
|
42
|
+
else # 'ruby' most likely
|
43
|
+
ThreadEnabler.instance.setup_idle_handler
|
44
|
+
end
|
45
|
+
run_without_thread_enabler
|
46
|
+
end
|
47
|
+
|
48
|
+
alias_method :run_without_thread_enabler, :run
|
49
|
+
alias_method :run, :run_with_thread_enabler
|
50
|
+
end
|
51
|
+
end
|
data/lib/ffi-glib/ptr_array.rb
CHANGED
@@ -26,7 +26,7 @@ module GLib
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.from_enumerable type, it
|
29
|
-
new(type).tap {|arr| arr.add_array it}
|
29
|
+
new(type).tap { |arr| arr.add_array it }
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.add array, data
|
@@ -44,7 +44,7 @@ module GLib
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def add_array ary
|
47
|
-
ary.each {|item| add item}
|
47
|
+
ary.each { |item| add item }
|
48
48
|
end
|
49
49
|
|
50
50
|
def data_ptr
|
data/lib/ffi-glib/s_list.rb
CHANGED
data/lib/ffi-glib/variant.rb
CHANGED
@@ -10,10 +10,10 @@ module GLib
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.constructor_wrap ptr
|
13
|
-
super.tap {|variant| variant.ref }
|
13
|
+
super.tap { |variant| variant.ref }
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
alias_method :get_string_without_override, :get_string
|
17
|
+
alias_method :get_string, :get_string_with_override
|
18
18
|
end
|
19
19
|
end
|
data/lib/ffi-glib.rb
CHANGED
@@ -7,7 +7,7 @@ module GObject
|
|
7
7
|
# Wrapping method used in constructors. For InitiallyUnowned and
|
8
8
|
# descendants, this needs to sink the object's floating reference.
|
9
9
|
def self.constructor_wrap ptr
|
10
|
-
super.tap {|obj| ::GObject.
|
10
|
+
super.tap { |obj| ::GObject::Lib.g_object_ref_sink obj }
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -3,22 +3,21 @@ GObject.load_class :Object
|
|
3
3
|
module GObject
|
4
4
|
# Overrides for GObject, GObject's generic base class.
|
5
5
|
class Object
|
6
|
-
|
7
6
|
setup_method "new"
|
8
7
|
|
9
8
|
# TODO: Generate accessor methods from GIR at class definition time
|
10
9
|
def method_missing method, *args
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
return send(
|
10
|
+
getter_name = "get_#{method}"
|
11
|
+
return send(getter_name, *args) if respond_to?(getter_name)
|
12
|
+
if method.to_s =~ /(.*)=$/
|
13
|
+
setter_name = "set_#{Regexp.last_match[1]}"
|
14
|
+
return send(setter_name, *args) if respond_to?(setter_name)
|
16
15
|
end
|
17
16
|
super
|
18
17
|
end
|
19
18
|
|
20
|
-
def signal_connect event, &block
|
21
|
-
GObject.signal_connect(self, event, &block)
|
19
|
+
def signal_connect event, data = nil, &block
|
20
|
+
GObject.signal_connect(self, event, data, &block)
|
22
21
|
end
|
23
22
|
|
24
23
|
setup_instance_method "get_property"
|
@@ -62,11 +61,14 @@ module GObject
|
|
62
61
|
GObject::ObjectClass.wrap(to_ptr.get_pointer 0)
|
63
62
|
end
|
64
63
|
|
65
|
-
|
66
|
-
|
64
|
+
alias_method :get_property_without_override, :get_property
|
65
|
+
alias_method :get_property, :get_property_with_override
|
66
|
+
|
67
|
+
alias_method :set_property_without_override, :set_property
|
68
|
+
alias_method :set_property, :set_property_with_override
|
67
69
|
|
68
|
-
|
69
|
-
|
70
|
+
setup_instance_method 'is_floating'
|
71
|
+
alias_method :floating?, :is_floating
|
70
72
|
|
71
73
|
private
|
72
74
|
|
@@ -32,16 +32,17 @@ module GObject
|
|
32
32
|
|
33
33
|
closure = wrap(new_simple(self::Struct.size, nil).to_ptr)
|
34
34
|
closure.block = block
|
35
|
-
closure.set_marshal
|
35
|
+
closure.set_marshal proc { |*args| marshaller(*args) }
|
36
36
|
|
37
37
|
closure
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.marshaller closure, return_value, param_values, _invocation_hint, _marshal_data
|
41
|
+
# TODO: Improve by registering RubyClosure as a GObject type
|
41
42
|
rclosure = wrap(closure.to_ptr)
|
42
43
|
param_values ||= []
|
43
44
|
|
44
|
-
args = param_values.map {|value| value.get_value }
|
45
|
+
args = param_values.map { |value| value.get_value }
|
45
46
|
|
46
47
|
result = rclosure.invoke_block(*args)
|
47
48
|
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -5,10 +5,7 @@ module GObject
|
|
5
5
|
class Value
|
6
6
|
# TODO: Give more generic name
|
7
7
|
def set_ruby_value val
|
8
|
-
if current_gtype == 0
|
9
|
-
init_for_ruby_value val
|
10
|
-
end
|
11
|
-
|
8
|
+
init_for_ruby_value val if current_gtype == 0
|
12
9
|
set_value val
|
13
10
|
end
|
14
11
|
|
@@ -35,25 +32,22 @@ module GObject
|
|
35
32
|
TYPE_VARIANT => [:get_variant, :set_variant]
|
36
33
|
}
|
37
34
|
|
38
|
-
def value= val
|
39
|
-
set_value val
|
40
|
-
end
|
41
|
-
|
42
35
|
def set_value val
|
43
36
|
send set_method, val
|
44
|
-
self
|
45
37
|
end
|
46
38
|
|
39
|
+
alias_method :value=, :set_value
|
40
|
+
|
47
41
|
CLASS_TO_GTYPE_MAP = {
|
48
|
-
|
49
|
-
|
42
|
+
TrueClass => TYPE_BOOLEAN,
|
43
|
+
FalseClass => TYPE_BOOLEAN,
|
50
44
|
Integer => TYPE_INT,
|
51
45
|
String => TYPE_STRING
|
52
46
|
}
|
53
47
|
|
54
48
|
def init_for_ruby_value val
|
55
49
|
CLASS_TO_GTYPE_MAP.each do |klass, type|
|
56
|
-
if klass
|
50
|
+
if val.is_a? klass
|
57
51
|
init type
|
58
52
|
return self
|
59
53
|
end
|
@@ -88,7 +82,7 @@ module GObject
|
|
88
82
|
|
89
83
|
# TODO: Give more generic name
|
90
84
|
def self.wrap_ruby_value val
|
91
|
-
new.set_ruby_value val
|
85
|
+
new.tap { |gv| gv.set_ruby_value val }
|
92
86
|
end
|
93
87
|
|
94
88
|
def self.from val
|
@@ -104,7 +98,7 @@ module GObject
|
|
104
98
|
|
105
99
|
def self.for_g_type g_type
|
106
100
|
return nil if g_type == TYPE_NONE
|
107
|
-
new.tap {|it| it.init g_type }
|
101
|
+
new.tap { |it| it.init g_type }
|
108
102
|
end
|
109
103
|
|
110
104
|
# TODO: Combine with wrap_ruby_value
|
@@ -131,7 +125,7 @@ module GObject
|
|
131
125
|
end
|
132
126
|
|
133
127
|
def check_type_compatibility val
|
134
|
-
|
128
|
+
unless GObject::Value.type_compatible(GObject.type_from_instance(val), current_gtype)
|
135
129
|
raise ArgumentError, "#{val.class} is incompatible with #{current_gtype_name}"
|
136
130
|
end
|
137
131
|
end
|
@@ -142,6 +136,8 @@ module GObject
|
|
142
136
|
GLib::Strv.wrap boxed
|
143
137
|
when TYPE_HASH_TABLE
|
144
138
|
GLib::HashTable.wrap [:gpointer, :gpointer], boxed
|
139
|
+
when TYPE_ARRAY
|
140
|
+
GLib::Array.wrap nil, boxed
|
145
141
|
else
|
146
142
|
current_gtype_class.wrap(boxed) unless boxed.null?
|
147
143
|
end
|
@@ -157,7 +153,7 @@ module GObject
|
|
157
153
|
|
158
154
|
def method_map_entry
|
159
155
|
METHOD_MAP[current_gtype] || METHOD_MAP[current_fundamental_type] ||
|
160
|
-
|
156
|
+
raise("No method map entry for #{current_gtype_name}")
|
161
157
|
end
|
162
158
|
end
|
163
159
|
end
|
data/lib/ffi-gobject.rb
CHANGED
@@ -15,22 +15,6 @@ require 'gir_ffi/builders/user_defined_builder'
|
|
15
15
|
|
16
16
|
# Module representing GLib's GObject namespace.
|
17
17
|
module GObject
|
18
|
-
def self.object_ref obj
|
19
|
-
Lib.g_object_ref obj.to_ptr
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.object_ref_sink obj
|
23
|
-
Lib.g_object_ref_sink obj.to_ptr
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.object_unref obj
|
27
|
-
Lib.g_object_unref obj.to_ptr
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.object_is_floating obj
|
31
|
-
Lib.g_object_is_floating obj.to_ptr
|
32
|
-
end
|
33
|
-
|
34
18
|
def self.type_from_instance_pointer inst_ptr
|
35
19
|
return nil if inst_ptr.null?
|
36
20
|
klsptr = inst_ptr.get_pointer 0
|
@@ -70,12 +54,12 @@ module GObject
|
|
70
54
|
return_gvalue
|
71
55
|
end
|
72
56
|
|
73
|
-
def self.signal_connect object, detailed_signal, data=nil, &block
|
57
|
+
def self.signal_connect object, detailed_signal, data = nil, &block
|
74
58
|
raise ArgumentError, "Block needed" unless block_given?
|
75
59
|
signal_name, _ = detailed_signal.split('::')
|
76
60
|
sig_info = object.class.find_signal signal_name
|
77
61
|
|
78
|
-
closure = sig_info.wrap_in_closure {|*args| block.call(*args << data) }
|
62
|
+
closure = sig_info.wrap_in_closure { |*args| block.call(*args << data) }
|
79
63
|
|
80
64
|
# TODO: Provide _after variant
|
81
65
|
signal_connect_closure object, detailed_signal, closure, false
|
@@ -96,12 +80,10 @@ module GObject
|
|
96
80
|
|
97
81
|
# NOTE: This Lib module is set up in `gir_ffi-base/gobject/lib.rb`.
|
98
82
|
module Lib
|
99
|
-
attach_function :g_object_ref, [:pointer], :void
|
100
83
|
attach_function :g_object_ref_sink, [:pointer], :void
|
101
|
-
attach_function :g_object_unref, [:pointer], :void
|
102
|
-
attach_function :g_object_is_floating, [:pointer], :bool
|
103
84
|
|
104
85
|
attach_function :g_array_get_type, [], :size_t
|
86
|
+
attach_function :g_byte_array_get_type, [], :size_t
|
105
87
|
attach_function :g_hash_table_get_type, [], :size_t
|
106
88
|
attach_function :g_strv_get_type, [], :size_t
|
107
89
|
|
@@ -117,6 +99,7 @@ module GObject
|
|
117
99
|
end
|
118
100
|
|
119
101
|
TYPE_ARRAY = Lib.g_array_get_type
|
102
|
+
TYPE_BYTE_ARRAY = Lib.g_byte_array_get_type
|
120
103
|
TYPE_HASH_TABLE = Lib.g_hash_table_get_type
|
121
104
|
TYPE_STRV = Lib.g_strv_get_type
|
122
105
|
end
|
@@ -2,7 +2,7 @@ module GObjectIntrospection
|
|
2
2
|
# Wraps GIBaseInfo struct, the base \type for all info types.
|
3
3
|
# Decendant types will be implemented as needed.
|
4
4
|
class IBaseInfo
|
5
|
-
def initialize ptr, lib=Lib
|
5
|
+
def initialize ptr, lib = Lib
|
6
6
|
raise ArgumentError, "ptr must not be null" if ptr.null?
|
7
7
|
|
8
8
|
unless defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
@@ -94,7 +94,7 @@ module GObjectIntrospection
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def safe_namespace
|
97
|
-
namespace.gsub(
|
97
|
+
namespace.gsub(/^./, &:upcase)
|
98
98
|
end
|
99
99
|
|
100
100
|
def container
|
@@ -112,7 +112,7 @@ module GObjectIntrospection
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def == other
|
115
|
-
Lib.g_base_info_equal
|
115
|
+
other.is_a?(IBaseInfo) && Lib.g_base_info_equal(@gobj, other)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
@@ -23,6 +23,7 @@ module GObjectIntrospection
|
|
23
23
|
|
24
24
|
##
|
25
25
|
build_array_method :properties, :property
|
26
|
+
build_finder_method :find_property, :n_properties
|
26
27
|
|
27
28
|
def get_n_methods
|
28
29
|
Lib.g_interface_info_get_n_methods @gobj
|
@@ -80,6 +81,5 @@ module GObjectIntrospection
|
|
80
81
|
def iface_struct
|
81
82
|
IStructInfo.wrap(Lib.g_interface_info_get_iface_struct @gobj)
|
82
83
|
end
|
83
|
-
|
84
84
|
end
|
85
85
|
end
|
@@ -72,7 +72,7 @@ module GObjectIntrospection
|
|
72
72
|
Lib.g_type_tag_to_string type
|
73
73
|
end
|
74
74
|
|
75
|
-
def require namespace, version=nil, flags=0
|
75
|
+
def require namespace, version = nil, flags = 0
|
76
76
|
errpp = FFI::MemoryPointer.new(:pointer).write_pointer nil
|
77
77
|
|
78
78
|
Lib.g_irepository_require @gobj, namespace, version, flags, errpp
|
@@ -7,7 +7,7 @@ module GObjectIntrospection
|
|
7
7
|
ffi_lib "girepository-1.0"
|
8
8
|
|
9
9
|
# IRepository
|
10
|
-
enum :IRepositoryLoadFlags, [:LAZY, (1<<0)]
|
10
|
+
enum :IRepositoryLoadFlags, [:LAZY, (1 << 0)]
|
11
11
|
|
12
12
|
attach_function :g_irepository_get_default, [], :pointer
|
13
13
|
attach_function :g_irepository_prepend_search_path, [:string], :void
|
data/lib/gir_ffi/arg_helper.rb
CHANGED
@@ -20,7 +20,7 @@ module GirFFI
|
|
20
20
|
def fetch ptr
|
21
21
|
return if ptr.null?
|
22
22
|
key = ptr.address
|
23
|
-
if @store.
|
23
|
+
if @store.key? key
|
24
24
|
@store[key]
|
25
25
|
else
|
26
26
|
ptr
|
@@ -74,7 +74,7 @@ module GirFFI
|
|
74
74
|
|
75
75
|
def self.cast_uint32_to_int32 val
|
76
76
|
if val >= 0x80000000
|
77
|
-
-(0x100000000-val)
|
77
|
+
-(0x100000000 - val)
|
78
78
|
else
|
79
79
|
val
|
80
80
|
end
|