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
data/lib/ffi-glib/list.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi-glib/list_methods"
|
4
4
|
|
5
5
|
GLib.load_class :List
|
6
6
|
|
@@ -9,13 +9,19 @@ module GLib
|
|
9
9
|
class List
|
10
10
|
include ListMethods
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def append(data)
|
13
|
+
store_pointer Lib.g_list_append(self, element_ptr_for(data))
|
14
|
+
self
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
17
|
+
def prepend(data)
|
18
|
+
store_pointer Lib.g_list_prepend(self, element_ptr_for(data))
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def reverse
|
23
|
+
store_pointer Lib.g_list_reverse(self)
|
24
|
+
self
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi-glib/container_class_methods"
|
4
4
|
|
5
5
|
module GLib
|
6
6
|
# Common methods for List and SList.
|
@@ -14,6 +14,7 @@ module GLib
|
|
14
14
|
replace_method base, :data, :head
|
15
15
|
|
16
16
|
base.extend ContainerClassMethods
|
17
|
+
base.extend ClassMethods
|
17
18
|
end
|
18
19
|
|
19
20
|
def self.replace_method(base, old, new)
|
@@ -36,10 +37,14 @@ module GLib
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def tail
|
40
|
+
return nil if struct.null?
|
41
|
+
|
39
42
|
self.class.wrap(element_type, struct[:next])
|
40
43
|
end
|
41
44
|
|
42
45
|
def head
|
46
|
+
return nil if struct.null?
|
47
|
+
|
43
48
|
GirFFI::ArgHelper.cast_from_pointer(element_type, struct[:data])
|
44
49
|
end
|
45
50
|
|
@@ -69,5 +74,12 @@ module GLib
|
|
69
74
|
def element_ptr_for(data)
|
70
75
|
GirFFI::InPointer.from(element_type, data)
|
71
76
|
end
|
77
|
+
|
78
|
+
# Common class methods for List and SList
|
79
|
+
module ClassMethods
|
80
|
+
def from_enumerable(type, arr)
|
81
|
+
arr.reduce(new(type)) { |lst, val| lst.prepend val }.reverse
|
82
|
+
end
|
83
|
+
end
|
72
84
|
end
|
73
85
|
end
|
data/lib/ffi-glib/main_loop.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "singleton"
|
4
4
|
|
5
5
|
GLib.load_class :MainLoop
|
6
6
|
|
@@ -40,7 +40,7 @@ module GLib
|
|
40
40
|
setup_instance_method! :run
|
41
41
|
|
42
42
|
def run_with_thread_enabler
|
43
|
-
ThreadEnabler.instance.setup_idle_handler if RUBY_ENGINE ==
|
43
|
+
ThreadEnabler.instance.setup_idle_handler if RUBY_ENGINE == "ruby"
|
44
44
|
RUNNING_LOOPS << self
|
45
45
|
result = run_without_thread_enabler
|
46
46
|
exception = EXCEPTIONS.shift
|
@@ -63,6 +63,6 @@ module GLib
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
Signal.trap
|
66
|
+
Signal.trap "INT" do
|
67
67
|
GLib::MainLoop.handle_exception(Interrupt.new)
|
68
68
|
end
|
data/lib/ffi-glib/ptr_array.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "ffi-glib/container_class_methods"
|
4
|
+
require "gir_ffi/array_element_convertor"
|
5
5
|
|
6
6
|
GLib.load_class :PtrArray
|
7
7
|
|
@@ -10,7 +10,6 @@ module GLib
|
|
10
10
|
# pointers.
|
11
11
|
class PtrArray
|
12
12
|
include Enumerable
|
13
|
-
include ArrayMethods
|
14
13
|
extend ContainerClassMethods
|
15
14
|
|
16
15
|
attr_reader :element_type
|
@@ -49,12 +48,25 @@ module GLib
|
|
49
48
|
ary.each { |item| add item }
|
50
49
|
end
|
51
50
|
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
# Re-implementation of the g_ptrarray_index macro
|
52
|
+
def index(idx)
|
53
|
+
unless (0...length).cover? idx
|
54
|
+
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
55
|
+
end
|
55
56
|
|
56
|
-
|
57
|
-
|
57
|
+
item_ptr = data_ptr + idx * element_size
|
58
|
+
|
59
|
+
convert_element_type = case element_type
|
60
|
+
when :utf8
|
61
|
+
:utf8
|
62
|
+
when GirFFI::ObjectBase
|
63
|
+
element_type
|
64
|
+
else
|
65
|
+
[:pointer, element_type]
|
66
|
+
end
|
67
|
+
|
68
|
+
convertor = GirFFI::ArrayElementConvertor.new convert_element_type, item_ptr
|
69
|
+
convertor.to_ruby_value
|
58
70
|
end
|
59
71
|
|
60
72
|
def each
|
@@ -70,5 +82,15 @@ module GLib
|
|
70
82
|
def ==(other)
|
71
83
|
to_a == other.to_a
|
72
84
|
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def element_size
|
89
|
+
POINTER_SIZE
|
90
|
+
end
|
91
|
+
|
92
|
+
def data_ptr
|
93
|
+
struct[:pdata]
|
94
|
+
end
|
73
95
|
end
|
74
96
|
end
|
data/lib/ffi-glib/s_list.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ffi-glib/list_methods"
|
4
4
|
|
5
5
|
GLib.load_class :SList
|
6
6
|
|
@@ -9,13 +9,19 @@ module GLib
|
|
9
9
|
class SList
|
10
10
|
include ListMethods
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def append(data)
|
13
|
+
store_pointer Lib.g_slist_append(self, element_ptr_for(data))
|
14
|
+
self
|
14
15
|
end
|
15
16
|
|
16
17
|
def prepend(data)
|
17
|
-
|
18
|
-
|
18
|
+
store_pointer Lib.g_slist_prepend(self, element_ptr_for(data))
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def reverse
|
23
|
+
store_pointer Lib.g_slist_reverse(self)
|
24
|
+
self
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
data/lib/ffi-glib/variant.rb
CHANGED
data/lib/ffi-gobject.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi/core"
|
4
4
|
|
5
5
|
# Bypass check for existing modules
|
6
|
-
GirFFI::Builders::ModuleBuilder.new(
|
6
|
+
GirFFI::Builders::ModuleBuilder.new("GObject").generate
|
7
7
|
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
8
|
+
require "ffi-gobject/value"
|
9
|
+
require "ffi-gobject/initially_unowned"
|
10
|
+
require "ffi-gobject/closure"
|
11
|
+
require "ffi-gobject/object"
|
12
|
+
require "ffi-gobject/object_class"
|
13
|
+
require "ffi-gobject/param_spec"
|
14
|
+
require "ffi-gobject/ruby_closure"
|
15
|
+
require "gir_ffi/signal_not_found_error"
|
16
16
|
|
17
17
|
# Module representing GLib's GObject namespace.
|
18
18
|
module GObject
|
@@ -47,7 +47,7 @@ module GObject
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.signal_emit(object, detailed_signal, *args)
|
50
|
-
signal, detail = detailed_signal.split(
|
50
|
+
signal, detail = detailed_signal.split("::")
|
51
51
|
signal_id = signal_lookup_from_instance signal, object
|
52
52
|
detail_quark = GLib.quark_from_string(detail)
|
53
53
|
|
@@ -63,9 +63,9 @@ module GObject
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def self.signal_connect(object, detailed_signal, data = nil, after = false, &block)
|
66
|
-
raise ArgumentError,
|
66
|
+
raise ArgumentError, "Block needed" unless block_given?
|
67
67
|
|
68
|
-
signal_name, = detailed_signal.split(
|
68
|
+
signal_name, = detailed_signal.split("::")
|
69
69
|
sig_info = object.class.find_signal signal_name
|
70
70
|
|
71
71
|
closure = sig_info.wrap_in_closure do |*args|
|
@@ -92,7 +92,6 @@ module GObject
|
|
92
92
|
attach_function :g_object_unref, [:pointer], :pointer
|
93
93
|
|
94
94
|
attach_function :g_value_copy, [:pointer, :pointer], :void
|
95
|
-
attach_function :g_value_init, [:pointer, :size_t], :pointer
|
96
95
|
attach_function :g_value_unset, [:pointer], :pointer
|
97
96
|
|
98
97
|
attach_function :g_signal_connect_data,
|
@@ -106,7 +105,5 @@ module GObject
|
|
106
105
|
|
107
106
|
attach_function :g_param_spec_ref, [:pointer], :pointer
|
108
107
|
attach_function :g_param_spec_sink, [:pointer], :pointer
|
109
|
-
|
110
|
-
attach_function :g_type_class_ref, [:size_t], :pointer
|
111
108
|
end
|
112
109
|
end
|
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 = {})
|
@@ -74,11 +74,6 @@ module GObject
|
|
74
74
|
self
|
75
75
|
end
|
76
76
|
|
77
|
-
def store_pointer(ptr)
|
78
|
-
super
|
79
|
-
ObjectSpace.define_finalizer self, self.class.make_finalizer(ptr)
|
80
|
-
end
|
81
|
-
|
82
77
|
def self.make_finalizer(ptr)
|
83
78
|
proc do
|
84
79
|
rc = GObject::Object::Struct.new(ptr)[:ref_count]
|
@@ -90,22 +85,6 @@ module GObject
|
|
90
85
|
end
|
91
86
|
end
|
92
87
|
|
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
88
|
def signal_connect(event, data = nil, &block)
|
110
89
|
GObject.signal_connect(self, event, data, &block)
|
111
90
|
end
|
@@ -114,44 +93,22 @@ module GObject
|
|
114
93
|
GObject.signal_connect_after(self, event, data, &block)
|
115
94
|
end
|
116
95
|
|
117
|
-
setup_instance_method!
|
118
|
-
setup_instance_method!
|
119
|
-
|
120
|
-
|
121
|
-
value = get_property(property_name)
|
122
|
-
type_info = get_property_type property_name
|
123
|
-
property_value_post_conversion value, type_info
|
124
|
-
end
|
96
|
+
setup_instance_method! "get_property"
|
97
|
+
setup_instance_method! "set_property"
|
98
|
+
setup_instance_method! "is_floating"
|
99
|
+
alias floating? is_floating
|
125
100
|
|
126
|
-
|
127
|
-
gvalue = gvalue_for_property property_name
|
128
|
-
get_property_without_override property_name, gvalue
|
129
|
-
gvalue.get_value
|
130
|
-
end
|
101
|
+
private
|
131
102
|
|
132
|
-
def
|
133
|
-
|
134
|
-
|
135
|
-
set_property property_name, adjusted_value
|
103
|
+
def store_pointer(ptr)
|
104
|
+
super
|
105
|
+
make_finalizer
|
136
106
|
end
|
137
107
|
|
138
|
-
def
|
139
|
-
|
140
|
-
gvalue.set_value value
|
141
|
-
set_property_without_override property_name, gvalue
|
108
|
+
def make_finalizer
|
109
|
+
ObjectSpace.define_finalizer self, self.class.make_finalizer(struct.to_ptr)
|
142
110
|
end
|
143
111
|
|
144
|
-
alias get_property_without_override get_property
|
145
|
-
alias get_property get_property_with_override
|
146
|
-
|
147
|
-
alias set_property_without_override set_property
|
148
|
-
alias set_property set_property_with_override
|
149
|
-
|
150
|
-
setup_instance_method! 'is_floating'
|
151
|
-
alias floating? is_floating
|
152
|
-
|
153
|
-
private
|
154
|
-
|
155
112
|
def names_and_gvalues_for_properties(properties)
|
156
113
|
return [], [] unless properties.any?
|
157
114
|
|
@@ -164,19 +121,13 @@ module GObject
|
|
164
121
|
end.transpose
|
165
122
|
end
|
166
123
|
|
167
|
-
def get_property_type(property_name)
|
168
|
-
prop = self.class.find_property(property_name)
|
169
|
-
prop.property_type
|
170
|
-
end
|
171
|
-
|
172
124
|
def gvalue_for_property(property_name)
|
173
125
|
gtype = property_gtype property_name
|
174
126
|
GObject::Value.for_gtype gtype
|
175
127
|
end
|
176
128
|
|
177
129
|
def property_gtype(property_name)
|
178
|
-
|
179
|
-
pspec.value_type
|
130
|
+
property_param_spec(property_name).value_type
|
180
131
|
end
|
181
132
|
|
182
133
|
def property_param_spec(property_name)
|
@@ -184,34 +135,78 @@ module GObject
|
|
184
135
|
raise GirFFI::PropertyNotFoundError.new(property_name, self.class)
|
185
136
|
end
|
186
137
|
|
187
|
-
#
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
when :glist
|
193
|
-
GLib::List.from type_info.element_type, val
|
194
|
-
when :callback
|
195
|
-
GirFFI::Builder.build_class(type_info.interface).wrap val
|
196
|
-
else
|
197
|
-
val
|
138
|
+
# Overrides for GObject, GObject's generic base class.
|
139
|
+
module Overrides
|
140
|
+
# @deprecated
|
141
|
+
def get_property_extended(property_name)
|
142
|
+
get_property(property_name)
|
198
143
|
end
|
199
|
-
end
|
200
144
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
145
|
+
def get_property(property_name)
|
146
|
+
gvalue = gvalue_for_property property_name
|
147
|
+
super property_name, gvalue
|
148
|
+
value = gvalue.get_value
|
149
|
+
|
150
|
+
type_info = get_property_type property_name
|
151
|
+
value = property_value_post_conversion(value, type_info) if type_info
|
152
|
+
|
153
|
+
value
|
154
|
+
end
|
155
|
+
|
156
|
+
# @deprecated
|
157
|
+
def set_property_extended(property_name, value)
|
158
|
+
set_property property_name, value
|
159
|
+
end
|
160
|
+
|
161
|
+
def set_property(property_name, value)
|
162
|
+
type_info = get_property_type property_name
|
163
|
+
value = property_value_pre_conversion(value, type_info) if type_info
|
164
|
+
|
165
|
+
gvalue = gvalue_for_property(property_name)
|
166
|
+
gvalue.set_value value
|
167
|
+
|
168
|
+
super property_name, gvalue
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def get_property_type(property_name)
|
174
|
+
self.class.find_property(property_name)&.property_type
|
175
|
+
end
|
176
|
+
|
177
|
+
# TODO: Move to ITypeInfo and unify with ArgHelper.cast_from_pointer
|
178
|
+
def property_value_post_conversion(val, type_info)
|
179
|
+
case type_info.flattened_tag
|
180
|
+
when :ghash
|
181
|
+
GLib::HashTable.from type_info.element_type, val
|
182
|
+
when :glist
|
183
|
+
GLib::List.from type_info.element_type, val
|
184
|
+
when :callback
|
185
|
+
GirFFI::Builder.build_class(type_info.interface).wrap val
|
186
|
+
else
|
187
|
+
val
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
# TODO: Move to ITypeInfo and unify with ArgHelper.cast_from_pointer
|
192
|
+
def property_value_pre_conversion(val, type_info)
|
193
|
+
case type_info.flattened_tag
|
194
|
+
when :ghash
|
195
|
+
GLib::HashTable.from type_info.element_type, val
|
196
|
+
when :glist
|
197
|
+
GLib::List.from type_info.element_type, val
|
198
|
+
when :strv
|
199
|
+
GLib::Strv.from val
|
200
|
+
when :byte_array
|
201
|
+
GLib::ByteArray.from val
|
202
|
+
when :callback
|
203
|
+
GirFFI::Builder.build_class(type_info.interface).from val
|
204
|
+
else
|
205
|
+
val
|
206
|
+
end
|
214
207
|
end
|
215
208
|
end
|
209
|
+
|
210
|
+
prepend Overrides
|
216
211
|
end
|
217
212
|
end
|