gir_ffi 0.14.1 → 0.15.4
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 +56 -0
- data/README.md +12 -12
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +26 -21
- data/lib/ffi-glib/array.rb +14 -4
- data/lib/ffi-glib/byte_array.rb +9 -3
- data/lib/ffi-glib/container_class_methods.rb +1 -1
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/error.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +4 -5
- data/lib/ffi-glib/list.rb +12 -6
- data/lib/ffi-glib/list_methods.rb +13 -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 +11 -5
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject.rb +13 -16
- data/lib/ffi-gobject/object.rb +82 -87
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/param_spec.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +136 -126
- 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 +34 -23
- 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 +7 -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 -24
- data/lib/gir_ffi/boolean.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +2 -6
- data/lib/gir_ffi/builder.rb +19 -11
- data/lib/gir_ffi/builder_helper.rb +10 -2
- 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 +2 -1
- data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
- data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
- data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
- data/lib/gir_ffi/builders/callback_builder.rb +28 -14
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
- data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
- 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 +11 -7
- 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 +5 -3
- data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
- data/lib/gir_ffi/builders/method_template.rb +5 -5
- data/lib/gir_ffi/builders/module_builder.rb +7 -7
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
- data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
- data/lib/gir_ffi/builders/object_builder.rb +22 -12
- data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/property_builder.rb +14 -14
- 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 +5 -7
- data/lib/gir_ffi/builders/struct_builder.rb +8 -6
- 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 +10 -3
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
- 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 +7 -9
- data/lib/gir_ffi/class_base.rb +6 -5
- data/lib/gir_ffi/core.rb +36 -22
- 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/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +17 -0
- data/lib/gir_ffi/info_ext.rb +15 -15
- 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 +2 -2
- 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 +30 -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/return_value_info.rb +1 -2
- data/lib/gir_ffi/sized_array.rb +4 -2
- data/lib/gir_ffi/struct.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +2 -10
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- 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 +6 -2
- data/lib/gir_ffi/union.rb +1 -1
- data/lib/gir_ffi/union_base.rb +2 -10
- data/lib/gir_ffi/user_defined_object_info.rb +9 -4
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +102 -155
- data/Gemfile +0 -12
- data/Rakefile +0 -9
- data/lib/ffi-glib/array_methods.rb +0 -16
- data/tasks/test.rake +0 -203
- data/test/base_test_helper.rb +0 -63
- data/test/ffi-glib/array_test.rb +0 -188
- data/test/ffi-glib/byte_array_test.rb +0 -22
- data/test/ffi-glib/bytes_test.rb +0 -56
- data/test/ffi-glib/closure_test.rb +0 -38
- data/test/ffi-glib/destroy_notify_test.rb +0 -18
- data/test/ffi-glib/hash_table_test.rb +0 -68
- data/test/ffi-glib/list_test.rb +0 -86
- data/test/ffi-glib/main_loop_test.rb +0 -53
- data/test/ffi-glib/ptr_array_test.rb +0 -112
- data/test/ffi-glib/ruby_closure_test.rb +0 -62
- data/test/ffi-glib/s_list_test.rb +0 -76
- data/test/ffi-glib/strv_test.rb +0 -60
- data/test/ffi-glib/variant_test.rb +0 -12
- data/test/ffi-gobject/gobject_test.rb +0 -72
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -140
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -370
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
- data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
- data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
- data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
- data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
- data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
- data/test/ffi-gobject_introspection/lib_test.rb +0 -13
- data/test/ffi-gobject_introspection/strv_test.rb +0 -46
- data/test/ffi-gobject_test.rb +0 -151
- data/test/gir_ffi/allocation_helper_test.rb +0 -36
- data/test/gir_ffi/arg_helper_test.rb +0 -140
- data/test/gir_ffi/boolean_test.rb +0 -43
- data/test/gir_ffi/boxed_base_test.rb +0 -65
- data/test/gir_ffi/builder_test.rb +0 -300
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
- data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
- data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
- data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
- data/test/gir_ffi/builders/field_builder_test.rb +0 -134
- data/test/gir_ffi/builders/function_builder_test.rb +0 -538
- data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
- data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
- data/test/gir_ffi/builders/module_builder_test.rb +0 -43
- data/test/gir_ffi/builders/object_builder_test.rb +0 -98
- data/test/gir_ffi/builders/property_builder_test.rb +0 -161
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
- data/test/gir_ffi/builders/union_builder_test.rb +0 -31
- data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
- data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -168
- data/test/gir_ffi/core_test.rb +0 -98
- data/test/gir_ffi/enum_base_test.rb +0 -43
- data/test/gir_ffi/error_type_info_test.rb +0 -50
- data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
- data/test/gir_ffi/g_type_test.rb +0 -31
- data/test/gir_ffi/in_out_pointer_test.rb +0 -56
- data/test/gir_ffi/in_pointer_test.rb +0 -183
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
- data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
- data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
- data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
- data/test/gir_ffi/interface_base_test.rb +0 -20
- data/test/gir_ffi/method_stubber_test.rb +0 -65
- data/test/gir_ffi/object_base_test.rb +0 -64
- data/test/gir_ffi/object_store_test.rb +0 -41
- data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
- data/test/gir_ffi/sized_array_test.rb +0 -206
- data/test/gir_ffi/struct_base_test.rb +0 -23
- data/test/gir_ffi/struct_like_base_test.rb +0 -167
- data/test/gir_ffi/type_map_test.rb +0 -17
- data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
- data/test/gir_ffi/union_base_test.rb +0 -23
- data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
- data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
- data/test/gir_ffi/variable_name_generator_test.rb +0 -18
- data/test/gir_ffi/version_test.rb +0 -9
- data/test/gir_ffi/zero_terminated_test.rb +0 -108
- data/test/gir_ffi_test_helper.rb +0 -84
- data/test/integration/callback_exceptions_test.rb +0 -63
- data/test/integration/derived_classes_test.rb +0 -53
- data/test/integration/generated_everything_test.rb +0 -452
- data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -12
- data/test/integration/generated_gobject_test.rb +0 -116
- data/test/integration/generated_gst_test.rb +0 -34
- data/test/integration/generated_gtk_source_test.rb +0 -27
- data/test/integration/generated_gtop_test.rb +0 -29
- data/test/integration/generated_pango_ft2_test.rb +0 -17
- data/test/integration/generated_pango_test.rb +0 -24
- data/test/integration/generated_regress_test.rb +0 -3850
- data/test/integration/generated_secret_test.rb +0 -17
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -49
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -52
- data/test/lib/Makefile.am +0 -110
- data/test/lib/autogen.sh +0 -4
- data/test/lib/configure.ac +0 -34
- data/test/lib/m4/jhflags.m4 +0 -21
- data/test/minitest/stats_plugin.rb +0 -30
@@ -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
@@ -5,18 +5,7 @@ GObject.load_class :Value
|
|
5
5
|
module GObject
|
6
6
|
# Overrides for GValue, GObject's generic value container structure.
|
7
7
|
class Value
|
8
|
-
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
super
|
12
|
-
struct.owned = true
|
13
|
-
to_ptr.autorelease = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def init(type)
|
17
|
-
Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type
|
18
|
-
self
|
19
|
-
end
|
8
|
+
setup_instance_method! :init
|
20
9
|
|
21
10
|
def self.make_finalizer(struct)
|
22
11
|
proc do
|
@@ -29,62 +18,31 @@ module GObject
|
|
29
18
|
end
|
30
19
|
|
31
20
|
METHOD_MAP = {
|
32
|
-
TYPE_INVALID => [:get_none,
|
21
|
+
TYPE_INVALID => [:get_none, :set_none],
|
33
22
|
# 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,
|
23
|
+
TYPE_INTERFACE => [:get_object, :set_instance_enhanced],
|
24
|
+
TYPE_CHAR => [:get_schar, :set_schar],
|
25
|
+
TYPE_UCHAR => [:get_uchar, :set_uchar],
|
26
|
+
TYPE_BOOLEAN => [:get_boolean, :set_boolean],
|
27
|
+
TYPE_INT => [:get_int, :set_int],
|
28
|
+
TYPE_UINT => [:get_uint, :set_uint],
|
29
|
+
TYPE_LONG => [:get_long, :set_long],
|
30
|
+
TYPE_ULONG => [:get_ulong, :set_ulong],
|
31
|
+
TYPE_INT64 => [:get_int64, :set_int64],
|
32
|
+
TYPE_UINT64 => [:get_uint64, :set_uint64],
|
33
|
+
TYPE_ENUM => [:get_enum_enhanced, :set_enum_enhanced],
|
34
|
+
TYPE_FLAGS => [:get_flags_enhanced, :set_flags_enhanced],
|
35
|
+
TYPE_FLOAT => [:get_float, :set_float],
|
36
|
+
TYPE_DOUBLE => [:get_double, :set_double],
|
37
|
+
TYPE_STRING => [:get_string, :set_string],
|
38
|
+
TYPE_POINTER => [:get_pointer, :set_pointer],
|
39
|
+
TYPE_BOXED => [:get_boxed, :set_boxed],
|
40
|
+
TYPE_PARAM => [:get_param, :set_param],
|
41
|
+
TYPE_OBJECT => [:get_object, :set_instance_enhanced],
|
42
|
+
TYPE_GTYPE => [:get_gtype, :set_gtype],
|
43
|
+
TYPE_VARIANT => [:get_variant, :set_variant]
|
55
44
|
}.freeze
|
56
45
|
|
57
|
-
def set_value(val)
|
58
|
-
send set_method, val
|
59
|
-
end
|
60
|
-
|
61
|
-
alias value= set_value
|
62
|
-
|
63
|
-
def current_gtype
|
64
|
-
struct[:g_type]
|
65
|
-
end
|
66
|
-
|
67
|
-
def current_fundamental_type
|
68
|
-
GObject.type_fundamental current_gtype
|
69
|
-
end
|
70
|
-
|
71
|
-
def current_gtype_name
|
72
|
-
GObject.type_name current_gtype
|
73
|
-
end
|
74
|
-
|
75
|
-
def get_value
|
76
|
-
value = get_value_plain
|
77
|
-
if current_fundamental_type == TYPE_BOXED
|
78
|
-
wrap_boxed value
|
79
|
-
else
|
80
|
-
value
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def get_value_plain
|
85
|
-
send get_method
|
86
|
-
end
|
87
|
-
|
88
46
|
# TODO: Give more generic name
|
89
47
|
def self.wrap_ruby_value(val)
|
90
48
|
new.tap { |gv| gv.__send__ :set_ruby_value, val }
|
@@ -119,86 +77,138 @@ module GObject
|
|
119
77
|
Lib.g_value_copy value, target unless value.uninitialized?
|
120
78
|
end
|
121
79
|
|
122
|
-
def uninitialized?
|
123
|
-
current_gtype == TYPE_INVALID
|
124
|
-
end
|
125
|
-
|
126
|
-
private
|
127
|
-
|
128
|
-
def set_ruby_value(val)
|
129
|
-
init_for_ruby_value val if uninitialized?
|
130
|
-
set_value val
|
131
|
-
end
|
132
|
-
|
133
80
|
CLASS_TO_GTYPE_MAP = {
|
134
|
-
NilClass
|
135
|
-
TrueClass
|
81
|
+
NilClass => TYPE_INVALID,
|
82
|
+
TrueClass => TYPE_BOOLEAN,
|
136
83
|
FalseClass => TYPE_BOOLEAN,
|
137
|
-
Integer
|
138
|
-
String
|
84
|
+
Integer => TYPE_INT,
|
85
|
+
String => TYPE_STRING
|
139
86
|
}.freeze
|
140
87
|
|
141
|
-
|
142
|
-
|
88
|
+
# Overrides for existing Value methods
|
89
|
+
module Overrides
|
90
|
+
def set_value(val)
|
91
|
+
send set_method, val
|
92
|
+
end
|
93
|
+
|
94
|
+
alias value= set_value
|
143
95
|
|
144
|
-
|
145
|
-
|
96
|
+
def current_gtype
|
97
|
+
struct[:g_type]
|
146
98
|
end
|
147
|
-
raise "Can't handle #{val.class}"
|
148
|
-
end
|
149
99
|
|
150
|
-
|
100
|
+
def current_fundamental_type
|
101
|
+
GObject.type_fundamental current_gtype
|
102
|
+
end
|
151
103
|
|
152
|
-
|
104
|
+
def current_gtype_name
|
105
|
+
GObject.type_name current_gtype
|
106
|
+
end
|
153
107
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
108
|
+
def get_value
|
109
|
+
value = get_value_plain
|
110
|
+
if current_fundamental_type == TYPE_BOXED
|
111
|
+
wrap_boxed value
|
112
|
+
else
|
113
|
+
value
|
114
|
+
end
|
115
|
+
end
|
158
116
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
end
|
117
|
+
def get_value_plain
|
118
|
+
send get_method
|
119
|
+
end
|
163
120
|
|
164
|
-
|
165
|
-
|
166
|
-
|
121
|
+
def uninitialized?
|
122
|
+
current_gtype == TYPE_INVALID
|
123
|
+
end
|
167
124
|
|
168
|
-
|
169
|
-
|
170
|
-
|
125
|
+
def init(type)
|
126
|
+
Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type
|
127
|
+
self
|
128
|
+
end
|
171
129
|
|
172
|
-
|
173
|
-
return if GObject::Value.type_compatible(GObject.type_from_instance(val), current_gtype)
|
130
|
+
private
|
174
131
|
|
175
|
-
|
176
|
-
|
132
|
+
def set_ruby_value(val)
|
133
|
+
init_for_ruby_value val if uninitialized?
|
134
|
+
set_value val
|
135
|
+
end
|
177
136
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
GLib::Array.wrap nil, boxed
|
186
|
-
else
|
187
|
-
current_gtype_class.wrap(boxed) unless boxed.null?
|
137
|
+
def init_for_ruby_value(val)
|
138
|
+
return init val.class.gtype if val.class.respond_to? :gtype
|
139
|
+
|
140
|
+
CLASS_TO_GTYPE_MAP.each do |klass, type|
|
141
|
+
return init type if val.is_a? klass
|
142
|
+
end
|
143
|
+
raise "Can't handle #{val.class}"
|
188
144
|
end
|
189
|
-
end
|
190
145
|
|
191
|
-
|
192
|
-
method_map_entry.first
|
193
|
-
end
|
146
|
+
def set_none(_val); end
|
194
147
|
|
195
|
-
|
196
|
-
|
197
|
-
|
148
|
+
def get_none; end
|
149
|
+
|
150
|
+
def set_instance_enhanced(val)
|
151
|
+
check_type_compatibility val if val
|
152
|
+
set_instance val
|
153
|
+
end
|
154
|
+
|
155
|
+
def set_enum_enhanced(val)
|
156
|
+
val = current_gtype_class.to_native(val, nil)
|
157
|
+
set_enum val
|
158
|
+
end
|
159
|
+
|
160
|
+
def get_enum_enhanced
|
161
|
+
current_gtype_class.wrap(get_enum)
|
162
|
+
end
|
163
|
+
|
164
|
+
def set_flags_enhanced(val)
|
165
|
+
val = current_gtype_class.to_native(val, nil)
|
166
|
+
set_flags val
|
167
|
+
end
|
198
168
|
|
199
|
-
|
200
|
-
|
201
|
-
|
169
|
+
def get_flags_enhanced
|
170
|
+
current_gtype_class.wrap(get_flags)
|
171
|
+
end
|
172
|
+
|
173
|
+
def current_gtype_class
|
174
|
+
GirFFI::Builder.build_by_gtype(current_gtype)
|
175
|
+
end
|
176
|
+
|
177
|
+
def check_type_compatibility(val)
|
178
|
+
if GObject::Value.type_compatible(GObject.type_from_instance(val), current_gtype)
|
179
|
+
return
|
180
|
+
end
|
181
|
+
|
182
|
+
raise ArgumentError, "#{val.class} is incompatible with #{current_gtype_name}"
|
183
|
+
end
|
184
|
+
|
185
|
+
def wrap_boxed(boxed)
|
186
|
+
case current_gtype
|
187
|
+
when TYPE_STRV
|
188
|
+
GLib::Strv.wrap boxed
|
189
|
+
when TYPE_HASH_TABLE
|
190
|
+
GLib::HashTable.wrap [:gpointer, :gpointer], boxed
|
191
|
+
when TYPE_ARRAY
|
192
|
+
GLib::Array.wrap nil, boxed
|
193
|
+
else
|
194
|
+
current_gtype_class.wrap(boxed) unless boxed.null?
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def get_method
|
199
|
+
method_map_entry.first
|
200
|
+
end
|
201
|
+
|
202
|
+
def set_method
|
203
|
+
method_map_entry.last
|
204
|
+
end
|
205
|
+
|
206
|
+
def method_map_entry
|
207
|
+
METHOD_MAP[current_gtype] || METHOD_MAP[current_fundamental_type] ||
|
208
|
+
raise("No method map entry for '#{current_gtype_name}'")
|
209
|
+
end
|
202
210
|
end
|
211
|
+
|
212
|
+
prepend Overrides
|
203
213
|
end
|
204
214
|
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
|
|
@@ -35,19 +35,21 @@ module GObjectIntrospection
|
|
35
35
|
# Examples:
|
36
36
|
#
|
37
37
|
# build_array_method :fields
|
38
|
-
#
|
38
|
+
# build_array_method :properties, :property
|
39
39
|
# build_array_method :get_methods
|
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
|
-
def #{method}
|
47
|
-
|
48
|
-
#{
|
49
|
-
|
50
|
-
|
47
|
+
def #{method} # def fields
|
48
|
+
#{cache_ivar} ||= # @fields_cache ||=
|
49
|
+
(0..(#{count} - 1)).map do |i| # (0..(n_fields - 1)).map do |i|
|
50
|
+
#{single} i # field i
|
51
|
+
end # end
|
52
|
+
end # end
|
51
53
|
CODE
|
52
54
|
end
|
53
55
|
|
@@ -69,41 +71,50 @@ 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
|
-
def #{method}(name)
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
79
|
+
def #{method}(name) # def find_field(name)
|
80
|
+
#{cache_ivar} ||= begin # @find_field_cache ||= begin
|
81
|
+
hash = {} # hash = {}
|
82
|
+
#{counter}.times do |i| # n_fields.times do |i|
|
83
|
+
it = #{fetcher}(i) # it = field(i)
|
84
|
+
hash[it.name] = it # hash[it.name] = it
|
85
|
+
end # end
|
86
|
+
hash # hash
|
87
|
+
end # end
|
88
|
+
name = name.to_s # name = name.to_s
|
89
|
+
#{cache_ivar}[name] # @find_field_cache[name]
|
90
|
+
end # 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
|
+
|
115
|
+
Lib.g_base_info_ref ptr
|
116
|
+
IRepository.wrap_ibaseinfo_pointer ptr
|
117
|
+
end
|
107
118
|
end
|
108
119
|
|
109
120
|
def deprecated?
|