gir_ffi 0.14.0 → 0.15.3
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 +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
|