gir_ffi 0.14.0 → 0.15.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +45 -0
- data/Gemfile +6 -4
- data/README.md +11 -10
- data/Rakefile +5 -5
- data/lib/ffi-glib.rb +16 -16
- data/lib/ffi-glib/array.rb +14 -4
- data/lib/ffi-glib/byte_array.rb +7 -2
- data/lib/ffi-glib/container_class_methods.rb +1 -1
- data/lib/ffi-glib/error.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +3 -3
- data/lib/ffi-glib/list.rb +1 -1
- data/lib/ffi-glib/list_methods.rb +1 -1
- data/lib/ffi-glib/main_loop.rb +3 -3
- data/lib/ffi-glib/ptr_array.rb +30 -8
- data/lib/ffi-glib/s_list.rb +1 -1
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject.rb +13 -13
- data/lib/ffi-gobject/object.rb +23 -32
- data/lib/ffi-gobject/param_spec.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +40 -29
- data/lib/ffi-gobject_introspection.rb +20 -20
- data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
- data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
- data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
- data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
- data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
- data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +30 -19
- data/lib/ffi-gobject_introspection/strv.rb +1 -1
- data/lib/gir_ffi-base.rb +1 -1
- data/lib/gir_ffi-base/gobject.rb +26 -25
- data/lib/gir_ffi-base/gobject/lib.rb +3 -2
- data/lib/gir_ffi.rb +3 -3
- data/lib/gir_ffi/allocation_helper.rb +1 -1
- data/lib/gir_ffi/arg_helper.rb +4 -4
- data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
- data/lib/gir_ffi/boolean.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +1 -1
- data/lib/gir_ffi/builder.rb +18 -10
- data/lib/gir_ffi/builder_helper.rb +6 -1
- data/lib/gir_ffi/builders/argument_builder.rb +19 -19
- data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
- data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
- data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
- data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
- data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
- data/lib/gir_ffi/builders/callback_builder.rb +16 -4
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/constant_builder.rb +1 -1
- data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
- data/lib/gir_ffi/builders/enum_builder.rb +16 -3
- data/lib/gir_ffi/builders/field_builder.rb +20 -18
- data/lib/gir_ffi/builders/flags_builder.rb +2 -2
- data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +11 -5
- data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
- data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/interface_builder.rb +2 -2
- data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/module_builder.rb +7 -7
- data/lib/gir_ffi/builders/object_builder.rb +6 -6
- data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/property_builder.rb +13 -12
- data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
- data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
- data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
- data/lib/gir_ffi/builders/struct_builder.rb +6 -4
- data/lib/gir_ffi/builders/struct_like.rb +1 -1
- data/lib/gir_ffi/builders/type_builder.rb +12 -12
- data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
- data/lib/gir_ffi/builders/union_builder.rb +4 -4
- data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
- data/lib/gir_ffi/builders/with_layout.rb +2 -2
- data/lib/gir_ffi/callback_base.rb +4 -6
- data/lib/gir_ffi/class_base.rb +6 -5
- data/lib/gir_ffi/core.rb +19 -20
- data/lib/gir_ffi/enum_base.rb +1 -1
- data/lib/gir_ffi/enum_like_base.rb +2 -2
- data/lib/gir_ffi/error_argument_info.rb +2 -2
- data/lib/gir_ffi/error_type_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/flags_base.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +10 -0
- data/lib/gir_ffi/info_ext.rb +15 -14
- data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
- data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
- data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
- data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_value_info.rb +25 -0
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
- data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
- data/lib/gir_ffi/interface_base.rb +3 -3
- data/lib/gir_ffi/lib_c.rb +1 -1
- data/lib/gir_ffi/method_stubber.rb +1 -1
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/object_base.rb +3 -4
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/receiver_type_info.rb +2 -2
- data/lib/gir_ffi/registered_type_base.rb +1 -1
- data/lib/gir_ffi/sized_array.rb +4 -2
- data/lib/gir_ffi/struct.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +1 -1
- data/lib/gir_ffi/type_map.rb +2 -23
- data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
- data/lib/gir_ffi/unintrospectable_type_info.rb +5 -1
- data/lib/gir_ffi/union.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -1
- data/lib/gir_ffi/user_defined_object_info.rb +6 -2
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/tasks/test.rake +3 -2
- data/test/base_test_helper.rb +16 -9
- data/test/ffi-glib/array_test.rb +71 -56
- data/test/ffi-glib/byte_array_test.rb +13 -7
- data/test/ffi-glib/bytes_test.rb +24 -19
- data/test/ffi-glib/closure_test.rb +11 -11
- data/test/ffi-glib/destroy_notify_test.rb +6 -6
- data/test/ffi-glib/hash_table_test.rb +27 -27
- data/test/ffi-glib/list_test.rb +22 -22
- data/test/ffi-glib/main_loop_test.rb +12 -12
- data/test/ffi-glib/ptr_array_test.rb +39 -39
- data/test/ffi-glib/ruby_closure_test.rb +10 -10
- data/test/ffi-glib/s_list_test.rb +20 -20
- data/test/ffi-glib/strv_test.rb +19 -19
- data/test/ffi-glib/variant_test.rb +5 -5
- data/test/ffi-gobject/gobject_test.rb +48 -44
- data/test/ffi-gobject/object_class_test.rb +8 -8
- data/test/ffi-gobject/object_test.rb +51 -68
- data/test/ffi-gobject/param_spec_test.rb +12 -12
- data/test/ffi-gobject/value_test.rb +145 -125
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +9 -9
- data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
- data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
- data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
- data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
- data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
- data/test/ffi-gobject_introspection/i_repository_test.rb +34 -34
- data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
- data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
- data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
- data/test/ffi-gobject_introspection/lib_test.rb +3 -3
- data/test/ffi-gobject_introspection/strv_test.rb +9 -9
- data/test/ffi-gobject_test.rb +47 -45
- data/test/gir_ffi/allocation_helper_test.rb +13 -13
- data/test/gir_ffi/arg_helper_test.rb +71 -65
- data/test/gir_ffi/boolean_test.rb +20 -20
- data/test/gir_ffi/boxed_base_test.rb +18 -18
- data/test/gir_ffi/builder_test.rb +81 -213
- data/test/gir_ffi/builders/argument_builder_test.rb +321 -287
- data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +57 -56
- data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +40 -41
- data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
- data/test/gir_ffi/builders/constructor_builder_test.rb +12 -10
- data/test/gir_ffi/builders/enum_builder_test.rb +12 -11
- data/test/gir_ffi/builders/field_builder_test.rb +48 -42
- data/test/gir_ffi/builders/function_builder_test.rb +256 -224
- data/test/gir_ffi/builders/initializer_builder_test.rb +16 -14
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
- data/test/gir_ffi/builders/module_builder_test.rb +18 -18
- data/test/gir_ffi/builders/object_builder_test.rb +41 -41
- data/test/gir_ffi/builders/property_builder_test.rb +94 -94
- data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +227 -223
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +124 -113
- data/test/gir_ffi/builders/struct_builder_test.rb +38 -35
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +34 -23
- data/test/gir_ffi/builders/union_builder_test.rb +12 -15
- data/test/gir_ffi/builders/user_defined_builder_test.rb +152 -148
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +46 -40
- data/test/gir_ffi/builders/vfunc_builder_test.rb +149 -157
- data/test/gir_ffi/callback_base_test.rb +9 -9
- data/test/gir_ffi/class_base_test.rb +56 -53
- data/test/gir_ffi/core_test.rb +36 -35
- data/test/gir_ffi/enum_base_test.rb +19 -19
- data/test/gir_ffi/error_type_info_test.rb +23 -23
- data/test/gir_ffi/ffi_ext/pointer_test.rb +9 -7
- data/test/gir_ffi/g_type_test.rb +11 -11
- data/test/gir_ffi/in_pointer_test.rb +70 -50
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +6 -5
- data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
- data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
- data/test/gir_ffi/info_ext/i_type_info_test.rb +231 -216
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
- data/test/gir_ffi/interface_base_test.rb +8 -8
- data/test/gir_ffi/method_stubber_test.rb +21 -19
- data/test/gir_ffi/object_base_test.rb +23 -23
- data/test/gir_ffi/object_store_test.rb +13 -13
- data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
- data/test/gir_ffi/sized_array_test.rb +68 -68
- data/test/gir_ffi/struct_base_test.rb +8 -8
- data/test/gir_ffi/struct_like_base_test.rb +64 -64
- data/test/gir_ffi/type_map_test.rb +8 -8
- data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
- data/test/gir_ffi/union_base_test.rb +8 -8
- data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
- data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
- data/test/gir_ffi/variable_name_generator_test.rb +8 -8
- data/test/gir_ffi/version_test.rb +4 -4
- data/test/gir_ffi/zero_terminated_test.rb +34 -34
- data/test/gir_ffi_test_helper.rb +3 -3
- data/test/integration/callback_exceptions_test.rb +17 -21
- data/test/integration/derived_classes_test.rb +14 -13
- data/test/integration/generated_everything_test.rb +225 -224
- data/test/integration/generated_gimarshallingtests_test.rb +1174 -1060
- data/test/integration/generated_gio_test.rb +36 -36
- data/test/integration/generated_glib_test.rb +4 -6
- data/test/integration/generated_gobject_test.rb +43 -35
- data/test/integration/generated_gst_test.rb +20 -16
- data/test/integration/generated_gtk_source_test.rb +9 -15
- data/test/integration/generated_gtop_test.rb +8 -15
- data/test/integration/generated_pango_ft2_test.rb +2 -2
- data/test/integration/generated_pango_test.rb +4 -4
- data/test/integration/generated_regress_test.rb +1858 -1632
- data/test/integration/generated_secret_test.rb +8 -11
- data/test/integration/generated_utility_test.rb +81 -81
- data/test/integration/generated_warnlib_test.rb +17 -21
- data/test/integration/method_lookup_test.rb +6 -6
- data/test/introspection_test_helper.rb +49 -7
- data/test/minitest/stats_plugin.rb +1 -1
- metadata +21 -23
- data/lib/ffi-glib/array_methods.rb +0 -16
- data/test/gir_ffi/in_out_pointer_test.rb +0 -56
data/lib/ffi-gobject/object.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi/property_not_found_error"
|
4
4
|
|
5
5
|
GObject.load_class :Object
|
6
6
|
|
@@ -44,7 +44,7 @@ module GObject
|
|
44
44
|
obj
|
45
45
|
end
|
46
46
|
else
|
47
|
-
setup_method!
|
47
|
+
setup_method! "new"
|
48
48
|
|
49
49
|
# Before GLib 2.54.0, use g_object_newv, which takes an array of GParameter.
|
50
50
|
def initialize_with_automatic_gtype(properties = {})
|
@@ -90,22 +90,6 @@ module GObject
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
# TODO: Generate accessor methods from GIR at class definition time
|
94
|
-
def method_missing(method, *args)
|
95
|
-
getter_name = "get_#{method}"
|
96
|
-
return send(getter_name, *args) if respond_to?(getter_name)
|
97
|
-
|
98
|
-
if method.to_s =~ /(.*)=$/
|
99
|
-
setter_name = "set_#{Regexp.last_match[1]}"
|
100
|
-
return send(setter_name, *args) if respond_to?(setter_name)
|
101
|
-
end
|
102
|
-
super
|
103
|
-
end
|
104
|
-
|
105
|
-
def respond_to_missing?(*)
|
106
|
-
false
|
107
|
-
end
|
108
|
-
|
109
93
|
def signal_connect(event, data = nil, &block)
|
110
94
|
GObject.signal_connect(self, event, data, &block)
|
111
95
|
end
|
@@ -114,30 +98,37 @@ module GObject
|
|
114
98
|
GObject.signal_connect_after(self, event, data, &block)
|
115
99
|
end
|
116
100
|
|
117
|
-
setup_instance_method!
|
118
|
-
setup_instance_method!
|
101
|
+
setup_instance_method! "get_property"
|
102
|
+
setup_instance_method! "set_property"
|
119
103
|
|
104
|
+
# @deprecated
|
120
105
|
def get_property_extended(property_name)
|
121
|
-
|
122
|
-
type_info = get_property_type property_name
|
123
|
-
property_value_post_conversion value, type_info
|
106
|
+
get_property(property_name)
|
124
107
|
end
|
125
108
|
|
126
109
|
def get_property_with_override(property_name)
|
127
110
|
gvalue = gvalue_for_property property_name
|
128
111
|
get_property_without_override property_name, gvalue
|
129
|
-
gvalue.get_value
|
112
|
+
value = gvalue.get_value
|
113
|
+
|
114
|
+
type_info = get_property_type property_name
|
115
|
+
value = property_value_post_conversion(value, type_info) if type_info
|
116
|
+
|
117
|
+
value
|
130
118
|
end
|
131
119
|
|
120
|
+
# @deprecated
|
132
121
|
def set_property_extended(property_name, value)
|
133
|
-
|
134
|
-
adjusted_value = property_value_pre_conversion(value, type_info)
|
135
|
-
set_property property_name, adjusted_value
|
122
|
+
set_property property_name, value
|
136
123
|
end
|
137
124
|
|
138
125
|
def set_property_with_override(property_name, value)
|
126
|
+
type_info = get_property_type property_name
|
127
|
+
value = property_value_pre_conversion(value, type_info) if type_info
|
128
|
+
|
139
129
|
gvalue = gvalue_for_property(property_name)
|
140
130
|
gvalue.set_value value
|
131
|
+
|
141
132
|
set_property_without_override property_name, gvalue
|
142
133
|
end
|
143
134
|
|
@@ -147,7 +138,7 @@ module GObject
|
|
147
138
|
alias set_property_without_override set_property
|
148
139
|
alias set_property set_property_with_override
|
149
140
|
|
150
|
-
setup_instance_method!
|
141
|
+
setup_instance_method! "is_floating"
|
151
142
|
alias floating? is_floating
|
152
143
|
|
153
144
|
private
|
@@ -165,8 +156,7 @@ module GObject
|
|
165
156
|
end
|
166
157
|
|
167
158
|
def get_property_type(property_name)
|
168
|
-
|
169
|
-
prop.property_type
|
159
|
+
self.class.find_property(property_name)&.property_type
|
170
160
|
end
|
171
161
|
|
172
162
|
def gvalue_for_property(property_name)
|
@@ -175,8 +165,7 @@ module GObject
|
|
175
165
|
end
|
176
166
|
|
177
167
|
def property_gtype(property_name)
|
178
|
-
|
179
|
-
pspec.value_type
|
168
|
+
property_param_spec(property_name).value_type
|
180
169
|
end
|
181
170
|
|
182
171
|
def property_param_spec(property_name)
|
@@ -207,6 +196,8 @@ module GObject
|
|
207
196
|
GLib::List.from type_info.element_type, val
|
208
197
|
when :strv
|
209
198
|
GLib::Strv.from val
|
199
|
+
when :byte_array
|
200
|
+
GLib::ByteArray.from val
|
210
201
|
when :callback
|
211
202
|
GirFFI::Builder.build_class(type_info.interface).from val
|
212
203
|
else
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi-gobject/closure"
|
4
4
|
|
5
5
|
module GObject
|
6
6
|
# Encapsulates Ruby blocks as GObject Closures.
|
@@ -36,7 +36,7 @@ module GObject
|
|
36
36
|
|
37
37
|
result = rclosure.invoke_block(*args)
|
38
38
|
|
39
|
-
return_value
|
39
|
+
return_value&.set_value(result)
|
40
40
|
end
|
41
41
|
|
42
42
|
# @api private
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -29,29 +29,29 @@ module GObject
|
|
29
29
|
end
|
30
30
|
|
31
31
|
METHOD_MAP = {
|
32
|
-
TYPE_INVALID => [:get_none,
|
32
|
+
TYPE_INVALID => [:get_none, :set_none],
|
33
33
|
# TYPE_NONE is skipped
|
34
|
-
TYPE_INTERFACE => [:get_object,
|
35
|
-
TYPE_CHAR => [:get_schar,
|
36
|
-
TYPE_UCHAR => [:get_uchar,
|
37
|
-
TYPE_BOOLEAN => [:get_boolean,
|
38
|
-
TYPE_INT => [:get_int,
|
39
|
-
TYPE_UINT => [:get_uint,
|
40
|
-
TYPE_LONG => [:get_long,
|
41
|
-
TYPE_ULONG => [:get_ulong,
|
42
|
-
TYPE_INT64 => [:get_int64,
|
43
|
-
TYPE_UINT64 => [:get_uint64,
|
44
|
-
TYPE_ENUM => [:get_enum_enhanced,
|
45
|
-
TYPE_FLAGS => [:
|
46
|
-
TYPE_FLOAT => [:get_float,
|
47
|
-
TYPE_DOUBLE => [:get_double,
|
48
|
-
TYPE_STRING => [:get_string,
|
49
|
-
TYPE_POINTER => [:get_pointer,
|
50
|
-
TYPE_BOXED => [:get_boxed,
|
51
|
-
TYPE_PARAM => [:get_param,
|
52
|
-
TYPE_OBJECT => [:get_object,
|
53
|
-
TYPE_GTYPE => [:get_gtype,
|
54
|
-
TYPE_VARIANT => [:get_variant,
|
34
|
+
TYPE_INTERFACE => [:get_object, :set_instance_enhanced],
|
35
|
+
TYPE_CHAR => [:get_schar, :set_schar],
|
36
|
+
TYPE_UCHAR => [:get_uchar, :set_uchar],
|
37
|
+
TYPE_BOOLEAN => [:get_boolean, :set_boolean],
|
38
|
+
TYPE_INT => [:get_int, :set_int],
|
39
|
+
TYPE_UINT => [:get_uint, :set_uint],
|
40
|
+
TYPE_LONG => [:get_long, :set_long],
|
41
|
+
TYPE_ULONG => [:get_ulong, :set_ulong],
|
42
|
+
TYPE_INT64 => [:get_int64, :set_int64],
|
43
|
+
TYPE_UINT64 => [:get_uint64, :set_uint64],
|
44
|
+
TYPE_ENUM => [:get_enum_enhanced, :set_enum_enhanced],
|
45
|
+
TYPE_FLAGS => [:get_flags_enhanced, :set_flags_enhanced],
|
46
|
+
TYPE_FLOAT => [:get_float, :set_float],
|
47
|
+
TYPE_DOUBLE => [:get_double, :set_double],
|
48
|
+
TYPE_STRING => [:get_string, :set_string],
|
49
|
+
TYPE_POINTER => [:get_pointer, :set_pointer],
|
50
|
+
TYPE_BOXED => [:get_boxed, :set_boxed],
|
51
|
+
TYPE_PARAM => [:get_param, :set_param],
|
52
|
+
TYPE_OBJECT => [:get_object, :set_instance_enhanced],
|
53
|
+
TYPE_GTYPE => [:get_gtype, :set_gtype],
|
54
|
+
TYPE_VARIANT => [:get_variant, :set_variant]
|
55
55
|
}.freeze
|
56
56
|
|
57
57
|
def set_value(val)
|
@@ -131,11 +131,11 @@ module GObject
|
|
131
131
|
end
|
132
132
|
|
133
133
|
CLASS_TO_GTYPE_MAP = {
|
134
|
-
NilClass
|
135
|
-
TrueClass
|
134
|
+
NilClass => TYPE_INVALID,
|
135
|
+
TrueClass => TYPE_BOOLEAN,
|
136
136
|
FalseClass => TYPE_BOOLEAN,
|
137
|
-
Integer
|
138
|
-
String
|
137
|
+
Integer => TYPE_INT,
|
138
|
+
String => TYPE_STRING
|
139
139
|
}.freeze
|
140
140
|
|
141
141
|
def init_for_ruby_value(val)
|
@@ -157,7 +157,7 @@ module GObject
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def set_enum_enhanced(val)
|
160
|
-
val = current_gtype_class
|
160
|
+
val = current_gtype_class.to_native(val, nil)
|
161
161
|
set_enum val
|
162
162
|
end
|
163
163
|
|
@@ -165,12 +165,23 @@ module GObject
|
|
165
165
|
current_gtype_class.wrap(get_enum)
|
166
166
|
end
|
167
167
|
|
168
|
+
def set_flags_enhanced(val)
|
169
|
+
val = current_gtype_class.to_native(val, nil)
|
170
|
+
set_flags val
|
171
|
+
end
|
172
|
+
|
173
|
+
def get_flags_enhanced
|
174
|
+
current_gtype_class.wrap(get_flags)
|
175
|
+
end
|
176
|
+
|
168
177
|
def current_gtype_class
|
169
178
|
GirFFI::Builder.build_by_gtype(current_gtype)
|
170
179
|
end
|
171
180
|
|
172
181
|
def check_type_compatibility(val)
|
173
|
-
|
182
|
+
if GObject::Value.type_compatible(GObject.type_from_instance(val), current_gtype)
|
183
|
+
return
|
184
|
+
end
|
174
185
|
|
175
186
|
raise ArgumentError, "#{val.class} is incompatible with #{current_gtype_name}"
|
176
187
|
end
|
@@ -198,7 +209,7 @@ module GObject
|
|
198
209
|
|
199
210
|
def method_map_entry
|
200
211
|
METHOD_MAP[current_gtype] || METHOD_MAP[current_fundamental_type] ||
|
201
|
-
raise("No method map entry for #{current_gtype_name}")
|
212
|
+
raise("No method map entry for '#{current_gtype_name}'")
|
202
213
|
end
|
203
214
|
end
|
204
215
|
end
|
@@ -1,26 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi-gobject_introspection/gobject_type_init"
|
4
4
|
GObjectIntrospection::GObjectTypeInit.type_init
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
6
|
+
require "ffi-gobject_introspection/i_base_info"
|
7
|
+
require "ffi-gobject_introspection/i_callable_info"
|
8
|
+
require "ffi-gobject_introspection/i_callback_info"
|
9
|
+
require "ffi-gobject_introspection/i_function_info"
|
10
|
+
require "ffi-gobject_introspection/i_constant_info"
|
11
|
+
require "ffi-gobject_introspection/i_field_info"
|
12
|
+
require "ffi-gobject_introspection/i_registered_type_info"
|
13
|
+
require "ffi-gobject_introspection/i_interface_info"
|
14
|
+
require "ffi-gobject_introspection/i_property_info"
|
15
|
+
require "ffi-gobject_introspection/i_vfunc_info"
|
16
|
+
require "ffi-gobject_introspection/i_signal_info"
|
17
|
+
require "ffi-gobject_introspection/i_object_info"
|
18
|
+
require "ffi-gobject_introspection/i_struct_info"
|
19
|
+
require "ffi-gobject_introspection/i_value_info"
|
20
|
+
require "ffi-gobject_introspection/i_union_info"
|
21
|
+
require "ffi-gobject_introspection/i_enum_info"
|
22
|
+
require "ffi-gobject_introspection/i_flags_info"
|
23
|
+
require "ffi-gobject_introspection/i_unresolved_info"
|
24
24
|
|
25
25
|
module GObjectIntrospection
|
26
26
|
# Map info type to class. Default is IBaseInfo.
|
@@ -49,4 +49,4 @@ module GObjectIntrospection
|
|
49
49
|
}.freeze
|
50
50
|
end
|
51
51
|
|
52
|
-
require
|
52
|
+
require "ffi-gobject_introspection/i_repository"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi"
|
4
4
|
|
5
5
|
module GObjectIntrospection
|
6
6
|
# Provides access to the g_type_init function.
|
@@ -12,7 +12,7 @@ module GObjectIntrospection
|
|
12
12
|
# Module for attaching g_type_init from the gobject library.
|
13
13
|
module Lib
|
14
14
|
extend FFI::Library
|
15
|
-
ffi_lib
|
15
|
+
ffi_lib "gobject-2.0"
|
16
16
|
attach_function :g_type_init, [], :void
|
17
17
|
end
|
18
18
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi-gobject_introspection/i_base_info"
|
4
4
|
module GObjectIntrospection
|
5
5
|
# Wraps a GIArgInfo struct.
|
6
6
|
# Represents an argument.
|
@@ -46,7 +46,7 @@ module GObjectIntrospection
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def argument_type
|
49
|
-
ITypeInfo.wrap Lib.g_arg_info_get_type(self)
|
49
|
+
@argument_type ||= ITypeInfo.wrap Lib.g_arg_info_get_type(self)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -5,7 +5,7 @@ module GObjectIntrospection
|
|
5
5
|
# Decendant types will be implemented as needed.
|
6
6
|
class IBaseInfo
|
7
7
|
def initialize(ptr, lib = Lib)
|
8
|
-
raise ArgumentError,
|
8
|
+
raise ArgumentError, "ptr must not be null" if ptr.null?
|
9
9
|
|
10
10
|
ObjectSpace.define_finalizer self, self.class.make_finalizer(lib, ptr)
|
11
11
|
|
@@ -40,13 +40,15 @@ module GObjectIntrospection
|
|
40
40
|
#
|
41
41
|
def self.build_array_method(method, single = nil)
|
42
42
|
method = method.to_s
|
43
|
+
cache_ivar = "@#{method}_cache"
|
43
44
|
single ||= method[0..-2]
|
44
45
|
count = method.sub(/^(get_)?/, '\\1n_')
|
45
46
|
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
46
47
|
def #{method}
|
47
|
-
|
48
|
-
#{
|
49
|
-
|
48
|
+
#{cache_ivar} ||=
|
49
|
+
(0..(#{count} - 1)).map do |i|
|
50
|
+
#{single} i
|
51
|
+
end
|
50
52
|
end
|
51
53
|
CODE
|
52
54
|
end
|
@@ -69,41 +71,49 @@ module GObjectIntrospection
|
|
69
71
|
#
|
70
72
|
def self.build_finder_method(method, counter = nil, fetcher = nil)
|
71
73
|
method = method.to_s
|
72
|
-
|
74
|
+
cache_ivar = "@#{method}_cache"
|
75
|
+
single = method.sub(/^find_/, "")
|
73
76
|
counter ||= "n_#{single}s"
|
74
77
|
fetcher ||= single
|
75
78
|
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
76
79
|
def #{method}(name)
|
80
|
+
#{cache_ivar} ||= begin
|
81
|
+
hash = {}
|
82
|
+
#{counter}.times do |i|
|
83
|
+
it = #{fetcher}(i)
|
84
|
+
hash[it.name] = it
|
85
|
+
end
|
86
|
+
hash
|
87
|
+
end
|
77
88
|
name = name.to_s
|
78
|
-
#{
|
79
|
-
it = #{fetcher}(i)
|
80
|
-
return it if it.name == name
|
81
|
-
end
|
82
|
-
nil
|
89
|
+
#{cache_ivar}[name]
|
83
90
|
end
|
84
91
|
CODE
|
85
92
|
end
|
86
93
|
|
87
94
|
def name
|
88
|
-
Lib.g_base_info_get_name self
|
95
|
+
@name ||= Lib.g_base_info_get_name self
|
89
96
|
end
|
90
97
|
|
91
98
|
def info_type
|
92
|
-
Lib.g_base_info_get_type self
|
99
|
+
@info_type ||= Lib.g_base_info_get_type self
|
93
100
|
end
|
94
101
|
|
95
102
|
def namespace
|
96
|
-
Lib.g_base_info_get_namespace self
|
103
|
+
@namespace ||= Lib.g_base_info_get_namespace self
|
97
104
|
end
|
98
105
|
|
99
106
|
def safe_namespace
|
100
|
-
namespace.
|
107
|
+
namespace.sub(/^[a-z]/, &:upcase)
|
101
108
|
end
|
102
109
|
|
103
110
|
def container
|
104
|
-
|
105
|
-
|
106
|
-
|
111
|
+
@container ||= begin
|
112
|
+
ptr = Lib.g_base_info_get_container self
|
113
|
+
return if ptr.null?
|
114
|
+
Lib.g_base_info_ref ptr
|
115
|
+
IRepository.wrap_ibaseinfo_pointer ptr
|
116
|
+
end
|
107
117
|
end
|
108
118
|
|
109
119
|
def deprecated?
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "ffi-gobject_introspection/i_base_info"
|
4
|
+
require "ffi-gobject_introspection/i_type_info"
|
5
|
+
require "ffi-gobject_introspection/i_arg_info"
|
6
6
|
|
7
7
|
module GObjectIntrospection
|
8
8
|
# Wraps a GICallableInfo struct; represents a callable, either
|
9
9
|
# IFunctionInfo, ICallbackInfo or IVFuncInfo.
|
10
10
|
class ICallableInfo < IBaseInfo
|
11
11
|
def return_type
|
12
|
-
ITypeInfo.wrap Lib.g_callable_info_get_return_type(self)
|
12
|
+
@return_type ||= ITypeInfo.wrap Lib.g_callable_info_get_return_type(self)
|
13
13
|
end
|
14
14
|
|
15
15
|
def caller_owns
|