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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cd304c670b5b7b26e9bbaa939f2b5162ef3f92f7c0bd78d8e524b1586cbdb3b
|
4
|
+
data.tar.gz: ccf4916ed552cf23752fb6270a61cfffdea53269b7d4bdb0bb408f3e3de7ae59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59fa0cf7451808b87a1ff028c0b8309d7c46c2acbbc894c535db4e1b3f30be7d6ee9649472a6932dd1fea0747bda6f56ceb3c753c48370750966c06da509f5bf
|
7
|
+
data.tar.gz: e2bd4de38d2db08b17e20c1bc42556530b4b14312400d5b9e15dc201eaf1494606bfe56c7fcdf78d632d164f6b553e897f488d533d70ab6d35042e069e5c5f61
|
data/Changelog.md
CHANGED
@@ -1,5 +1,61 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.15.4 / 2020-11-01
|
4
|
+
|
5
|
+
* Support disguised object class structs
|
6
|
+
* Handle the case where vfunc object arguments are null
|
7
|
+
* Bail out earlier when trying to register non-GObject class
|
8
|
+
* Small improvements
|
9
|
+
* Use `Module#prepend` for overrides
|
10
|
+
* Clean up initialization of structs, unions, and boxed types
|
11
|
+
* Make `GObject::Object#store_pointer` private like in the superclass
|
12
|
+
* Handle creating SizedArray of uint8 from a string
|
13
|
+
* Improve derived class setup
|
14
|
+
* Improve List and SList methods
|
15
|
+
* Make `ByteArray#append` return self
|
16
|
+
* Improve packaging infrastructure (thanks, utkarsh2102!)
|
17
|
+
|
18
|
+
## 0.15.3 / 2020-06-14
|
19
|
+
|
20
|
+
* Officially support Ruby 2.7
|
21
|
+
* Officially drop support for Ruby 2.4
|
22
|
+
* Store classes representing inline callback types in the class that defines
|
23
|
+
them instead of in the main namespace, thus avoiding some potential name
|
24
|
+
clashes
|
25
|
+
* Update development dependencies
|
26
|
+
* Various code quality improvements
|
27
|
+
* Record approved licenses for dependencies
|
28
|
+
|
29
|
+
## 0.15.2 / 2019-11-29
|
30
|
+
|
31
|
+
* Load girepository-1.0 library in a way that does not require installing a
|
32
|
+
development package.
|
33
|
+
|
34
|
+
## 0.15.1 / 2019-10-20
|
35
|
+
|
36
|
+
* Allow access to properties for unintrospectable classes.
|
37
|
+
|
38
|
+
## 0.15.0 / 2019-10-19
|
39
|
+
|
40
|
+
* Drop support for gobject-introspection below 1.46, the version available in
|
41
|
+
Ubuntu Xenial.
|
42
|
+
* Merge extended property getter and setter into regular ones. This means you
|
43
|
+
can always just use `#get_property` and `#set_property`. The methods
|
44
|
+
`#get_property_extended` and `#set_property_extended` are deprecated and will
|
45
|
+
be removed in GirFFI version 0.16 or later.
|
46
|
+
* Support setting ByteArray properties directly with string values.
|
47
|
+
* Target Ruby 2.4+
|
48
|
+
* Implement getting and setting of flag properties and GValues.
|
49
|
+
* Add support for basic hashtable values larger than pointer.
|
50
|
+
* Support unintrospectable classes not derived from GObject but from some other
|
51
|
+
fundamental object type.
|
52
|
+
* Make GPtrArray work with boxed types.
|
53
|
+
* Do not try to ref method reciever for struct instance methods marking the
|
54
|
+
instance receiver as transfer `:everything`.
|
55
|
+
* Support signals with GError arguments.
|
56
|
+
* Cache various methods on IBaseInfo and its subclasses.
|
57
|
+
* Generate aliases for accessor methods instead of relying on `method_missing`.
|
58
|
+
|
3
59
|
## 0.14.1 / 2018-09-27
|
4
60
|
|
5
61
|
* Add enum values as constants in the generated module.
|
data/README.md
CHANGED
@@ -12,7 +12,6 @@ Ruby bindings for GNOME using the GObject Introspection Repository.
|
|
12
12
|
[](https://depfu.com/github/mvz/gir_ffi)
|
13
13
|
[](https://travis-ci.org/mvz/gir_ffi)
|
14
14
|
[](https://codeclimate.com/github/mvz/gir_ffi)
|
15
|
-
[](https://coveralls.io/github/mvz/gir_ffi?branch=master)
|
16
15
|
[](https://inch-ci.org/github/mvz/gir_ffi/branch/master)
|
17
16
|
|
18
17
|
## Features
|
@@ -53,7 +52,7 @@ examples can be found in `gir_ffi-gtk` and `gir_ffi-gst`.
|
|
53
52
|
|
54
53
|
## Requirements
|
55
54
|
|
56
|
-
GirFFI is supported on CRuby 2.
|
55
|
+
GirFFI is supported on CRuby 2.5, 2.6 and 2.7, and JRuby 9.2.
|
57
56
|
|
58
57
|
You will also need gobject-introspection installed with some
|
59
58
|
introspection data.
|
@@ -63,17 +62,18 @@ available under the name ending in plain `.so`. If GirFFI complains that it
|
|
63
62
|
cannot find the library, try installing development packages for those
|
64
63
|
libraries.
|
65
64
|
|
66
|
-
GirFFI should work with gobject-introspection 1.
|
65
|
+
GirFFI should work with gobject-introspection 1.46.0 and up.
|
67
66
|
|
68
|
-
On Debian and Ubuntu, installing `
|
67
|
+
On Debian and Ubuntu, installing `libgirepository-1.0-1` and `gir1.2-glib-2.0`
|
69
68
|
should be enough to use GirFFI in your application.
|
70
69
|
|
71
70
|
To run the tests, you should additionally install `libgirepository1.0-dev`,
|
72
|
-
`
|
73
|
-
`gir1.2-pango-1.0`, `gir1.2-
|
74
|
-
be enough to get `rake test` working.
|
71
|
+
`gobject-introspection`, `libcairo2-dev`, `gir1.2-gtop-2.0`, `gir1.2-gtk-3.0`,
|
72
|
+
`gir1.2-pango-1.0`, `gir1.2-gtksource-3.0`, `gir1.2-secret-1` and
|
73
|
+
`gir1.2-gstreamer-1.0`. This should be enough to get `rake test` working.
|
75
74
|
|
76
|
-
GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV.
|
75
|
+
GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV. Pull
|
76
|
+
requests to support these platforms are welcome.
|
77
77
|
|
78
78
|
## Overrides
|
79
79
|
|
@@ -96,9 +96,9 @@ Please feel free to file bugs or send pull requests!
|
|
96
96
|
If you just want to help out but don't know where to start, have a look at
|
97
97
|
TODO.md, and check the notes in the code (e.g., using `dnote`).
|
98
98
|
|
99
|
-
If you want to send pull requests or patches,
|
100
|
-
|
101
|
-
out
|
99
|
+
If you want to send pull requests or patches, try to follow the instructions
|
100
|
+
below. **If you get stuck, please make a pull request anyway and I'll try to
|
101
|
+
help out.**
|
102
102
|
|
103
103
|
* Make sure `rake test` runs without reporting any failures.
|
104
104
|
* Add tests for your feature. Otherwise, I can't see if it works or if I
|
@@ -119,7 +119,7 @@ The following people have contributed to GirFFI over the years:
|
|
119
119
|
|
120
120
|
## License
|
121
121
|
|
122
|
-
Copyright © 2009–
|
122
|
+
Copyright © 2009–2020 [Matijs van Zuijlen](http://www.matijs.net)
|
123
123
|
|
124
124
|
GirFFI is free software, distributed under the terms of the GNU Lesser
|
125
125
|
General Public License, version 2.1 or later. See the file COPYING.LIB for
|
data/TODO.md
CHANGED
@@ -26,57 +26,36 @@ These in the order they occured to me, and may therefore be fixed in any order.
|
|
26
26
|
|
27
27
|
## Derived types
|
28
28
|
|
29
|
-
Derived classes
|
30
|
-
not very nice:
|
29
|
+
Derived classes are now registered like so:
|
31
30
|
|
32
31
|
class Derived < Base
|
33
|
-
|
32
|
+
install_property GObject.param_spec_int("foo", "foo bar",
|
33
|
+
"The Foo Bar Property",
|
34
|
+
10, 20, 15, 3)
|
34
35
|
|
35
|
-
GirFFI.define_type Derived do |info|
|
36
|
-
info.install_property GObject.param_spec_int("foo", "foo bar",
|
37
|
-
"The Foo Bar Property",
|
38
|
-
10, 20, 15, 3)
|
39
36
|
# assume Base defines a virtual function called 'some_vfunc'
|
40
|
-
|
41
|
-
#implementation goes here
|
37
|
+
install_vfunc_implementation :some_vfunc, proc {|obj|
|
38
|
+
# implementation goes here
|
42
39
|
}
|
43
|
-
end
|
44
40
|
|
45
|
-
|
46
|
-
|
47
|
-
class Derived < Base
|
48
|
-
def some_vfunc
|
49
|
-
#implementation goes here
|
41
|
+
def other_vfunc
|
42
|
+
# implementation
|
50
43
|
end
|
51
|
-
end
|
52
44
|
|
53
|
-
|
54
|
-
|
55
|
-
"The Foo Bar Property",
|
56
|
-
10, 20, 15, 3)
|
57
|
-
info.install_vfunc_implementation :some_vfunc
|
45
|
+
# assume Base defines a virtual function called 'other_vfunc'
|
46
|
+
install_vfunc_implementation :other_vfunc
|
58
47
|
end
|
59
48
|
|
49
|
+
GirFFI.define_type Derived
|
50
|
+
|
51
|
+
Potential improvements:
|
60
52
|
|
61
|
-
|
53
|
+
* Allow `define_type` to be called in the class definition
|
62
54
|
* Perhaps auto-register types, like Gtk# does
|
63
55
|
* Perhaps automagically find vfunc implementations, like PyGObject and
|
64
56
|
Ruby-GNOME do
|
65
57
|
* What about properties?
|
66
58
|
|
67
|
-
How about:
|
68
|
-
|
69
|
-
class Derived < Base
|
70
|
-
include SomeGObjectInterface
|
71
|
-
|
72
|
-
register_type 'Derived'
|
73
|
-
|
74
|
-
install_property ...
|
75
|
-
install_vfunc_implementation ...
|
76
|
-
end
|
77
|
-
|
78
|
-
This needs issue #63 to be resolved.
|
79
|
-
|
80
59
|
NOTE: When adding an interface module to a derived class, its prerequisites
|
81
60
|
should be checked.
|
82
61
|
|
data/docs/Subclassing.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Subclassing
|
2
|
+
|
3
|
+
Creating a Ruby subclass of one of the GObject classes requires following some rules.
|
4
|
+
|
5
|
+
First of all, if you override the initializer, you **must** call `super`
|
6
|
+
otherwise, the underlying GObject pointer will not be created and stored.
|
7
|
+
|
8
|
+
Second, GObject objects often have several constructors. GirFFI creates a
|
9
|
+
separate initializer for each constructor. This allows customization of the
|
10
|
+
call to super for each initializer. This means you will have to override each
|
11
|
+
initializer separately, as needed.
|
12
|
+
|
13
|
+
As an example, here is a subclass of `Regress::TestSubObj`, a class from
|
14
|
+
GObjectIntrospection's test suite, adding an extra argument to some of its
|
15
|
+
constructors.
|
16
|
+
|
17
|
+
```
|
18
|
+
class MyObj < Regress::TestSubObj
|
19
|
+
attr_reader :animal
|
20
|
+
|
21
|
+
def initialize animal
|
22
|
+
super()
|
23
|
+
@animal = animal
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize_from_file animal, file
|
27
|
+
super(file)
|
28
|
+
@animal = animal
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
o1 = MyObj.new 'dog'
|
33
|
+
o1.foo # => 'dog'
|
34
|
+
o2 = MyObj.constructor
|
35
|
+
o2.foo # => nil
|
36
|
+
o3 = MyObj.new_from_file 'cat', 'my_file.txt'
|
37
|
+
o3.foo # => 'cat'
|
38
|
+
```
|
data/lib/ffi-glib.rb
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Ensure GLib is defined by GirFFI itself
|
4
|
-
raise
|
5
|
-
|
6
|
-
require
|
7
|
-
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
4
|
+
raise "The module GLib was already defined elsewhere" if Kernel.const_defined? :GLib
|
5
|
+
|
6
|
+
require "gir_ffi/core"
|
7
|
+
|
8
|
+
# Set up the GLib module, bypassing the check for existing modules. This also
|
9
|
+
# creates GLib::Lib.
|
10
|
+
GirFFI::Builders::ModuleBuilder.new("GLib").generate
|
11
|
+
|
12
|
+
require "ffi-glib/array"
|
13
|
+
require "ffi-glib/byte_array"
|
14
|
+
require "ffi-glib/bytes"
|
15
|
+
require "ffi-glib/destroy_notify"
|
16
|
+
require "ffi-glib/error"
|
17
|
+
require "ffi-glib/hash_table"
|
18
|
+
require "ffi-glib/list"
|
19
|
+
require "ffi-glib/main_loop"
|
20
|
+
require "ffi-glib/ptr_array"
|
21
|
+
require "ffi-glib/s_list"
|
22
|
+
require "ffi-glib/strv"
|
23
|
+
require "ffi-glib/variant"
|
23
24
|
|
24
25
|
# Module representing GLib's GLib namespace.
|
25
26
|
module GLib
|
@@ -28,12 +29,16 @@ module GLib
|
|
28
29
|
load_class :EqualFunc
|
29
30
|
load_class :Func
|
30
31
|
|
31
|
-
# Module for attaching functions from the glib library.
|
32
|
-
#
|
32
|
+
# Module for attaching functions from the glib library. This module is
|
33
|
+
# defined by the call to ModuleBuilder#generate above.
|
33
34
|
module Lib
|
35
|
+
attach_function :g_slist_append, [:pointer, :pointer], :pointer
|
34
36
|
attach_function :g_slist_prepend, [:pointer, :pointer], :pointer
|
37
|
+
attach_function :g_slist_reverse, [:pointer], :pointer
|
35
38
|
|
36
39
|
attach_function :g_list_append, [:pointer, :pointer], :pointer
|
40
|
+
attach_function :g_list_prepend, [:pointer, :pointer], :pointer
|
41
|
+
attach_function :g_list_reverse, [:pointer], :pointer
|
37
42
|
|
38
43
|
attach_function :g_hash_table_foreach, [:pointer, HFunc, :pointer], :void
|
39
44
|
attach_function :g_hash_table_new, [HashFunc, EqualFunc], :pointer
|
data/lib/ffi-glib/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 :Array
|
7
7
|
|
@@ -10,7 +10,6 @@ module GLib
|
|
10
10
|
# be necessary to create objects of this class from Ruby directly.
|
11
11
|
class Array
|
12
12
|
include Enumerable
|
13
|
-
include ArrayMethods
|
14
13
|
extend ContainerClassMethods
|
15
14
|
|
16
15
|
attr_reader :element_type
|
@@ -70,6 +69,17 @@ module GLib
|
|
70
69
|
self
|
71
70
|
end
|
72
71
|
|
72
|
+
# Re-implementation of the g_array_index macro
|
73
|
+
def index(idx)
|
74
|
+
unless (0...length).cover? idx
|
75
|
+
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
76
|
+
end
|
77
|
+
|
78
|
+
item_ptr = data_ptr + idx * element_size
|
79
|
+
convertor = GirFFI::ArrayElementConvertor.new element_type, item_ptr
|
80
|
+
convertor.to_ruby_value
|
81
|
+
end
|
82
|
+
|
73
83
|
private
|
74
84
|
|
75
85
|
def data_ptr
|
@@ -83,7 +93,7 @@ module GLib
|
|
83
93
|
def check_element_size_match
|
84
94
|
return if calculated_element_size == get_element_size
|
85
95
|
|
86
|
-
warn
|
96
|
+
warn "WARNING: Element sizes do not match"
|
87
97
|
end
|
88
98
|
|
89
99
|
def guess_element_type
|
data/lib/ffi-glib/byte_array.rb
CHANGED
@@ -12,11 +12,17 @@ module GLib
|
|
12
12
|
def append(data)
|
13
13
|
bytes = GirFFI::InPointer.from_utf8 data
|
14
14
|
len = data.bytesize
|
15
|
-
|
15
|
+
Lib.g_byte_array_append(to_ptr, bytes, len)
|
16
|
+
self
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
19
|
+
def self.from(data)
|
20
|
+
case data
|
21
|
+
when self
|
22
|
+
data
|
23
|
+
else
|
24
|
+
new.append(data)
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
22
28
|
end
|
@@ -9,8 +9,8 @@ module GLib
|
|
9
9
|
class DestroyNotify
|
10
10
|
def self.default
|
11
11
|
@default ||= from proc { |user_data|
|
12
|
-
|
13
|
-
drop_callback
|
12
|
+
callback = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
|
13
|
+
drop_callback callback
|
14
14
|
}
|
15
15
|
end
|
16
16
|
end
|
data/lib/ffi-glib/error.rb
CHANGED
@@ -5,7 +5,7 @@ GLib.load_class :Error
|
|
5
5
|
module GLib
|
6
6
|
# Overrides for GError, used by GLib for handling non-fatal errors.
|
7
7
|
class Error
|
8
|
-
GIR_FFI_DOMAIN = GLib.quark_from_string(
|
8
|
+
GIR_FFI_DOMAIN = GLib.quark_from_string("gir_ffi")
|
9
9
|
|
10
10
|
def self.from_exception(exception)
|
11
11
|
new_literal GIR_FFI_DOMAIN, 0, exception.message
|
data/lib/ffi-glib/hash_table.rb
CHANGED
@@ -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
|
GLib.load_class :HashTable
|
6
6
|
|
@@ -10,8 +10,7 @@ module GLib
|
|
10
10
|
include Enumerable
|
11
11
|
extend ContainerClassMethods
|
12
12
|
|
13
|
-
attr_reader :key_type
|
14
|
-
attr_reader :value_type
|
13
|
+
attr_reader :key_type, :value_type
|
15
14
|
|
16
15
|
def initialize(key_type, value_type)
|
17
16
|
@key_type = key_type
|
@@ -63,7 +62,7 @@ module GLib
|
|
63
62
|
when :utf8
|
64
63
|
FFI::Function.new(:uint,
|
65
64
|
[:pointer],
|
66
|
-
find_support_function(
|
65
|
+
find_support_function("g_str_hash"))
|
67
66
|
end
|
68
67
|
end
|
69
68
|
|
@@ -72,7 +71,7 @@ module GLib
|
|
72
71
|
when :utf8
|
73
72
|
FFI::Function.new(:int,
|
74
73
|
[:pointer, :pointer],
|
75
|
-
find_support_function(
|
74
|
+
find_support_function("g_str_equal"))
|
76
75
|
end
|
77
76
|
end
|
78
77
|
|