gir_ffi 0.15.3 → 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 +15 -0
- data/README.md +5 -6
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +8 -3
- data/lib/ffi-glib/byte_array.rb +2 -1
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +1 -2
- data/lib/ffi-glib/list.rb +11 -5
- data/lib/ffi-glib/list_methods.rb +12 -0
- data/lib/ffi-glib/s_list.rb +10 -4
- data/lib/ffi-gobject.rb +0 -3
- data/lib/ffi-gobject/object.rb +77 -73
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/value.rb +107 -108
- data/lib/ffi-gobject_introspection/i_base_info.rb +20 -19
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/array_element_convertor.rb +1 -2
- data/lib/gir_ffi/boxed_base.rb +1 -5
- data/lib/gir_ffi/builder.rb +1 -1
- data/lib/gir_ffi/builder_helper.rb +7 -4
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
- data/lib/gir_ffi/builders/callback_builder.rb +14 -12
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
- data/lib/gir_ffi/builders/enum_builder.rb +3 -3
- data/lib/gir_ffi/builders/interface_builder.rb +3 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
- data/lib/gir_ffi/builders/method_template.rb +4 -4
- 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 +16 -6
- data/lib/gir_ffi/builders/property_builder.rb +1 -2
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
- data/lib/gir_ffi/builders/struct_builder.rb +5 -5
- data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +3 -3
- data/lib/gir_ffi/core.rb +17 -2
- data/lib/gir_ffi/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +7 -0
- data/lib/gir_ffi/object_base.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +1 -2
- data/lib/gir_ffi/struct_base.rb +1 -9
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -9
- data/lib/gir_ffi/user_defined_object_info.rb +3 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +86 -136
- data/Gemfile +0 -14
- data/Rakefile +0 -9
- data/tasks/test.rake +0 -204
- data/test/base_test_helper.rb +0 -70
- data/test/ffi-glib/array_test.rb +0 -203
- data/test/ffi-glib/byte_array_test.rb +0 -28
- data/test/ffi-glib/bytes_test.rb +0 -61
- 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 -76
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -123
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -390
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
- 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 -30
- 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 -153
- data/test/gir_ffi/allocation_helper_test.rb +0 -36
- data/test/gir_ffi/arg_helper_test.rb +0 -146
- 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 -168
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -691
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -130
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -84
- data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
- data/test/gir_ffi/builders/constructor_builder_test.rb +0 -39
- data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
- data/test/gir_ffi/builders/field_builder_test.rb +0 -140
- data/test/gir_ffi/builders/function_builder_test.rb +0 -570
- data/test/gir_ffi/builders/initializer_builder_test.rb +0 -56
- 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 -54
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -444
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -199
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -96
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
- data/test/gir_ffi/builders/union_builder_test.rb +0 -28
- data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -528
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -107
- data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -245
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -171
- data/test/gir_ffi/core_test.rb +0 -99
- 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 -22
- data/test/gir_ffi/g_type_test.rb +0 -31
- data/test/gir_ffi/in_pointer_test.rb +0 -203
- 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 -22
- 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 -712
- 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 -67
- 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 -59
- data/test/integration/derived_classes_test.rb +0 -54
- data/test/integration/generated_everything_test.rb +0 -453
- data/test/integration/generated_gimarshallingtests_test.rb +0 -3109
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -10
- data/test/integration/generated_gobject_test.rb +0 -124
- data/test/integration/generated_gst_test.rb +0 -38
- data/test/integration/generated_gtk_source_test.rb +0 -21
- data/test/integration/generated_gtop_test.rb +0 -22
- 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 -4076
- data/test/integration/generated_secret_test.rb +0 -14
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -45
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -94
- 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,20 @@
|
|
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
|
+
|
3
18
|
## 0.15.3 / 2020-06-14
|
4
19
|
|
5
20
|
* Officially support Ruby 2.7
|
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.
|
@@ -65,12 +64,12 @@ libraries.
|
|
65
64
|
|
66
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
|
-
`gobject-introspection`, `gir1.2-gtop-2.0`, `gir1.2-gtk-3.0`,
|
73
|
-
`gir1.2-
|
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
|
74
73
|
`gir1.2-gstreamer-1.0`. This should be enough to get `rake test` working.
|
75
74
|
|
76
75
|
GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV. Pull
|
@@ -120,7 +119,7 @@ The following people have contributed to GirFFI over the years:
|
|
120
119
|
|
121
120
|
## License
|
122
121
|
|
123
|
-
Copyright © 2009–
|
122
|
+
Copyright © 2009–2020 [Matijs van Zuijlen](http://www.matijs.net)
|
124
123
|
|
125
124
|
GirFFI is free software, distributed under the terms of the GNU Lesser
|
126
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
@@ -5,7 +5,8 @@ raise "The module GLib was already defined elsewhere" if Kernel.const_defined? :
|
|
5
5
|
|
6
6
|
require "gir_ffi/core"
|
7
7
|
|
8
|
-
#
|
8
|
+
# Set up the GLib module, bypassing the check for existing modules. This also
|
9
|
+
# creates GLib::Lib.
|
9
10
|
GirFFI::Builders::ModuleBuilder.new("GLib").generate
|
10
11
|
|
11
12
|
require "ffi-glib/array"
|
@@ -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/byte_array.rb
CHANGED
@@ -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/hash_table.rb
CHANGED
data/lib/ffi-glib/list.rb
CHANGED
@@ -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
|
@@ -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/s_list.rb
CHANGED
@@ -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-gobject.rb
CHANGED
@@ -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
@@ -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]
|
@@ -100,49 +95,20 @@ module GObject
|
|
100
95
|
|
101
96
|
setup_instance_method! "get_property"
|
102
97
|
setup_instance_method! "set_property"
|
98
|
+
setup_instance_method! "is_floating"
|
99
|
+
alias floating? is_floating
|
103
100
|
|
104
|
-
|
105
|
-
def get_property_extended(property_name)
|
106
|
-
get_property(property_name)
|
107
|
-
end
|
108
|
-
|
109
|
-
def get_property_with_override(property_name)
|
110
|
-
gvalue = gvalue_for_property property_name
|
111
|
-
get_property_without_override property_name, gvalue
|
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
|
118
|
-
end
|
101
|
+
private
|
119
102
|
|
120
|
-
|
121
|
-
|
122
|
-
|
103
|
+
def store_pointer(ptr)
|
104
|
+
super
|
105
|
+
make_finalizer
|
123
106
|
end
|
124
107
|
|
125
|
-
def
|
126
|
-
|
127
|
-
value = property_value_pre_conversion(value, type_info) if type_info
|
128
|
-
|
129
|
-
gvalue = gvalue_for_property(property_name)
|
130
|
-
gvalue.set_value value
|
131
|
-
|
132
|
-
set_property_without_override property_name, gvalue
|
108
|
+
def make_finalizer
|
109
|
+
ObjectSpace.define_finalizer self, self.class.make_finalizer(struct.to_ptr)
|
133
110
|
end
|
134
111
|
|
135
|
-
alias get_property_without_override get_property
|
136
|
-
alias get_property get_property_with_override
|
137
|
-
|
138
|
-
alias set_property_without_override set_property
|
139
|
-
alias set_property set_property_with_override
|
140
|
-
|
141
|
-
setup_instance_method! "is_floating"
|
142
|
-
alias floating? is_floating
|
143
|
-
|
144
|
-
private
|
145
|
-
|
146
112
|
def names_and_gvalues_for_properties(properties)
|
147
113
|
return [], [] unless properties.any?
|
148
114
|
|
@@ -155,10 +121,6 @@ module GObject
|
|
155
121
|
end.transpose
|
156
122
|
end
|
157
123
|
|
158
|
-
def get_property_type(property_name)
|
159
|
-
self.class.find_property(property_name)&.property_type
|
160
|
-
end
|
161
|
-
|
162
124
|
def gvalue_for_property(property_name)
|
163
125
|
gtype = property_gtype property_name
|
164
126
|
GObject::Value.for_gtype gtype
|
@@ -173,36 +135,78 @@ module GObject
|
|
173
135
|
raise GirFFI::PropertyNotFoundError.new(property_name, self.class)
|
174
136
|
end
|
175
137
|
|
176
|
-
#
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
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)
|
143
|
+
end
|
144
|
+
|
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
|
187
154
|
end
|
188
|
-
end
|
189
155
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
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
|
205
207
|
end
|
206
208
|
end
|
209
|
+
|
210
|
+
prepend Overrides
|
207
211
|
end
|
208
212
|
end
|