gir_ffi 0.15.9 → 0.16.1
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 +42 -18
- data/README.md +20 -14
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/bytes.rb +0 -12
- data/lib/ffi-glib/main_loop.rb +3 -3
- data/lib/ffi-glib/ptr_array.rb +24 -15
- data/lib/ffi-glib/variant.rb +6 -8
- data/lib/ffi-gobject/object.rb +5 -15
- data/lib/ffi-gobject/object_class.rb +2 -10
- data/lib/ffi-gobject/value.rb +27 -27
- data/lib/ffi-gobject.rb +3 -17
- data/lib/ffi-gobject_introspection/i_constant_info.rb +10 -10
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +11 -11
- data/lib/ffi-gobject_introspection.rb +19 -19
- data/lib/gir_ffi/builder.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder_collection.rb +5 -5
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +23 -23
- data/lib/gir_ffi/builders/constructor_builder.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +3 -3
- data/lib/gir_ffi/builders/method_template.rb +2 -2
- data/lib/gir_ffi/builders/object_builder.rb +10 -12
- data/lib/gir_ffi/builders/pointer_value_convertor.rb +1 -1
- data/lib/gir_ffi/builders/type_builder.rb +9 -9
- data/lib/gir_ffi/builders/user_defined_builder.rb +24 -26
- data/lib/gir_ffi/class_base.rb +1 -3
- data/lib/gir_ffi/core.rb +0 -5
- data/lib/gir_ffi/ffi_ext/pointer.rb +22 -12
- data/lib/gir_ffi/in_pointer.rb +6 -6
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_signal_info.rb +8 -6
- data/lib/gir_ffi/info_ext/i_type_info.rb +18 -24
- data/lib/gir_ffi/instance_method_setup.rb +3 -1
- data/lib/gir_ffi/method_stubber.rb +1 -1
- data/lib/gir_ffi/object_base.rb +5 -5
- data/lib/gir_ffi/struct_like_base.rb +0 -1
- data/lib/gir_ffi/type_map.rb +30 -30
- data/lib/gir_ffi/unintrospectable_type_info.rb +2 -2
- data/lib/gir_ffi/user_defined_object_info.rb +0 -3
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +1 -1
- data/lib/gir_ffi-base/gobject.rb +1 -1
- metadata +30 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f895f96ce883cc8698a2b95c39e241313762a9235a5d6bb38f0ca6ce0cb72249
|
4
|
+
data.tar.gz: 31f7c7558d25116276e3857d7aca50272232753b49da125b208124d93f33c519
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 72e1eddb0fb987e2c2ad6805e6c2b3c1c6588997d30f3efaaac3de408585fda9fa50aca66b74ec9aa76ee253a2701bf747187556086f772f9d20c67f985a6ae9
|
7
|
+
data.tar.gz: 264a6574d5cde0c8d981553433b895ccd11e3ae61c1aeb315ca75c74ee563efe2d4944f1b344fee50844b1caef5e8a547da0d50c4571461d67bdabd016cda323
|
data/Changelog.md
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.16.1 / 2023-10-07
|
4
|
+
|
5
|
+
* Support Ruby 3.2 ([#331] by [mvz])
|
6
|
+
* Require at least ffi 1.16.3 to avoid 'Can't modify frozen Hash' error ([#350]
|
7
|
+
by [mvz])
|
8
|
+
|
9
|
+
[mvz]: https://github.com/mvz
|
10
|
+
|
11
|
+
[#331]: https://github.com/mvz/gir_ffi/pull/331
|
12
|
+
[#350]: https://github.com/mvz/gir_ffi/pull/350
|
13
|
+
|
14
|
+
## 0.16.0 / 2022-05-21
|
15
|
+
|
16
|
+
* Support Ruby 3.1
|
17
|
+
* Rename `#object_class` to `#class_struct`
|
18
|
+
* Remove `GObject.object_class_from_instance`
|
19
|
+
* Limit public interface of `BaseMethodBuilder`
|
20
|
+
* Remove deprecated methods from `GObject::Object`
|
21
|
+
* Stop accepting blocks when defining a type
|
22
|
+
* Check parameter direction in signal argument conversion
|
23
|
+
* Drop support for JRuby
|
24
|
+
* Drop support for Ruby 2.6
|
25
|
+
|
3
26
|
## 0.15.9 / 2021-12-05
|
4
27
|
|
5
28
|
* Skip setting destroy notifier state if types don't make sense
|
@@ -144,8 +167,8 @@
|
|
144
167
|
changed.
|
145
168
|
* Make `Strv#each` thread-safe.
|
146
169
|
* Drop support for CRuby 2.0.
|
147
|
-
* Move `::type_init` and base `Strv` implementation into `GObjectIntrospection`,
|
148
|
-
it stand-alone.
|
170
|
+
* Move `::type_init` and base `Strv` implementation into `GObjectIntrospection`,
|
171
|
+
making it stand-alone.
|
149
172
|
* Move `GLib::Boolean` to `GirFFI::Boolean`.
|
150
173
|
* Guard against instantiating abstract classes using the default constructor.
|
151
174
|
* Handle user-defined properties containing dashes
|
@@ -166,7 +189,7 @@
|
|
166
189
|
actual effect even on CRuby.
|
167
190
|
- Immediately free string pointers whose ownership is transfered. Again, the
|
168
191
|
#autorelease technique doesn't work on JRuby.
|
169
|
-
- Fix handling of callee-allocated out parameters in vfuncs. The put_pointer
|
192
|
+
- Fix handling of callee-allocated out parameters in vfuncs. The `put_pointer`
|
170
193
|
method was wrongly called, and JRuby is more picky about what types that
|
171
194
|
method expects, exposing the bug.
|
172
195
|
|
@@ -185,7 +208,8 @@
|
|
185
208
|
|
186
209
|
## 0.9.5 / 2016-03-05
|
187
210
|
|
188
|
-
* Abort if modules were defined earlier, e.g., through the gems from the
|
211
|
+
* Abort if modules were defined earlier, e.g., through the gems from the
|
212
|
+
ruby-gnome family.
|
189
213
|
* Extend integration testing with GObjectIntrospection's test libraries.
|
190
214
|
* Find signals on user-defined types.
|
191
215
|
* Allow getting and setting of properties with a callback value.
|
@@ -500,7 +524,7 @@
|
|
500
524
|
## 0.4.2 / 2012-09-22
|
501
525
|
|
502
526
|
* Make objects and interfaces wrap poiners in the class that matches
|
503
|
-
their GType.
|
527
|
+
their GType.
|
504
528
|
|
505
529
|
## 0.4.1 / 2012-09-18
|
506
530
|
|
@@ -516,7 +540,7 @@ their GType.
|
|
516
540
|
## 0.3.2 / 2012-08-24
|
517
541
|
|
518
542
|
* Correctly set FFI return type when callbacks that return GObjects have
|
519
|
-
incomplete type specification.
|
543
|
+
incomplete type specification.
|
520
544
|
|
521
545
|
## 0.3.1 / 2012-05-13
|
522
546
|
|
@@ -544,15 +568,15 @@ incomplete type specification.
|
|
544
568
|
|
545
569
|
## 0.2.2 / 2011-12-07
|
546
570
|
|
547
|
-
* Fix issue #19: Check if a GLib::PtrArray.add method was generated
|
548
|
-
|
571
|
+
* Fix issue #19: Check if a GLib::PtrArray.add method was generated before
|
572
|
+
attempting to remove it.
|
549
573
|
* Fix two issues with pretty printing that made output for GLib have syntax
|
550
|
-
errors.
|
574
|
+
errors.
|
551
575
|
|
552
576
|
## 0.2.1 / 2011-11-20
|
553
577
|
|
554
|
-
* Fix handling of output parameters that are arrays of pointers to
|
555
|
-
|
578
|
+
* Fix handling of output parameters that are arrays of pointers to structures
|
579
|
+
(i.e., of type `Foo***`).
|
556
580
|
|
557
581
|
## 0.2.0 / 2011-11-19
|
558
582
|
|
@@ -562,9 +586,9 @@ structures (i.e., of type `Foo***`).
|
|
562
586
|
- Get rid of `#[]` and `#[]=`.
|
563
587
|
* Explicitely load `libgirepository` with ABI version 1.
|
564
588
|
* Improve implementation of GLib container classes (GList etc.):
|
565
|
-
- Real constructors.
|
566
|
-
- `#append` and friends are instance methods now.
|
567
|
-
- Conversion methods to cast Ruby containers to GLib containers.
|
589
|
+
- Real constructors.
|
590
|
+
- `#append` and friends are instance methods now.
|
591
|
+
- Conversion methods to cast Ruby containers to GLib containers.
|
568
592
|
* Start implementing pretty printing.
|
569
593
|
* Various refactorings.
|
570
594
|
|
@@ -577,10 +601,10 @@ structures (i.e., of type `Foo***`).
|
|
577
601
|
## 0.0.14 / 2011-10-28
|
578
602
|
|
579
603
|
* Support GObject Introspection version 1.30:
|
580
|
-
- Add support for layouts with fixed-length arrays.
|
581
|
-
- Handle type names starting with underscores.
|
582
|
-
- Call `g_signal_emitv` directly to avoid conflict in introspection info
|
583
|
-
|
604
|
+
- Add support for layouts with fixed-length arrays.
|
605
|
+
- Handle type names starting with underscores.
|
606
|
+
- Call `g_signal_emitv` directly to avoid conflict in introspection info
|
607
|
+
with earlier versions of GObject Introspection.
|
584
608
|
|
585
609
|
## 0.0.13 / 2011-09-09
|
586
610
|
|
data/README.md
CHANGED
@@ -23,35 +23,41 @@ Ruby bindings for GNOME using the GObject Introspection Repository.
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
|
26
|
+
```ruby
|
27
|
+
require 'gir_ffi'
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
# Set up the namespace you wish to use
|
30
|
+
GirFFI.setup :Gio
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
# Create an object
|
33
|
+
inet_address = Gio::InetAddress.new_from_string "127.0.0.1"
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
# Call some methods on the object
|
36
|
+
inet_address.is_loopback # => true
|
37
|
+
inet_address.is_multicast # => false
|
37
38
|
|
38
|
-
|
39
|
-
|
39
|
+
# Call a function in the namespace
|
40
|
+
Gio.dbus_is_name "foo" # => false
|
41
|
+
```
|
40
42
|
|
41
43
|
See the [documentation](docs/Documentation.md) for more usage information.
|
42
44
|
|
43
45
|
## Examples
|
44
46
|
|
45
47
|
Have a look in the `examples/` directory for some simple examples. More
|
46
|
-
examples can be found in
|
48
|
+
examples can be found in the repositories for
|
49
|
+
[`gir_ffi-gtk`](https://github.com/mvz/gir_ffi-gtk) and
|
50
|
+
[`gir_ffi-gst`](https://github.com/mvz/gir_ffi-gst/).
|
47
51
|
|
48
52
|
## Install
|
49
53
|
|
50
|
-
|
54
|
+
```bash
|
55
|
+
gem install gir_ffi
|
56
|
+
```
|
51
57
|
|
52
58
|
## Requirements
|
53
59
|
|
54
|
-
GirFFI is supported on CRuby 2.
|
60
|
+
GirFFI is supported on CRuby 2.7, 3.0 and 3.1.
|
55
61
|
|
56
62
|
You will also need gobject-introspection installed with some
|
57
63
|
introspection data.
|
@@ -104,7 +110,7 @@ The following people have contributed to GirFFI over the years:
|
|
104
110
|
|
105
111
|
## License
|
106
112
|
|
107
|
-
Copyright © 2009–
|
113
|
+
Copyright © 2009–2022 [Matijs van Zuijlen](http://www.matijs.net)
|
108
114
|
|
109
115
|
GirFFI is free software, distributed under the terms of the GNU Lesser
|
110
116
|
General Public License, version 2.1 or later. See the file COPYING.LIB for
|
data/lib/ffi-glib/array.rb
CHANGED
data/lib/ffi-glib/bytes.rb
CHANGED
@@ -7,18 +7,6 @@ module GLib
|
|
7
7
|
class Bytes
|
8
8
|
include Enumerable
|
9
9
|
|
10
|
-
remove_method :get_data if method_defined? :get_data
|
11
|
-
|
12
|
-
# @override
|
13
|
-
# NOTE: Needed due to mis-identification of the element-type of the
|
14
|
-
# resulting sized array for the default binding.
|
15
|
-
def get_data
|
16
|
-
length_ptr = FFI::MemoryPointer.new :size_t
|
17
|
-
data_ptr = Lib.g_bytes_get_data self, length_ptr
|
18
|
-
length = length_ptr.get_size_t(0)
|
19
|
-
GirFFI::SizedArray.wrap(:guint8, length, data_ptr)
|
20
|
-
end
|
21
|
-
|
22
10
|
def each(&block)
|
23
11
|
data.each(&block)
|
24
12
|
end
|
data/lib/ffi-glib/main_loop.rb
CHANGED
@@ -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
|
43
|
+
ThreadEnabler.instance.setup_idle_handler
|
44
44
|
RUNNING_LOOPS << self
|
45
45
|
result = run_without_thread_enabler
|
46
46
|
exception = EXCEPTIONS.shift
|
@@ -58,8 +58,8 @@ module GLib
|
|
58
58
|
current_loop.quit
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
|
-
|
61
|
+
alias_method :run_without_thread_enabler, :run
|
62
|
+
alias_method :run, :run_with_thread_enabler
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
data/lib/ffi-glib/ptr_array.rb
CHANGED
@@ -50,21 +50,7 @@ module GLib
|
|
50
50
|
|
51
51
|
# Re-implementation of the g_ptrarray_index macro
|
52
52
|
def index(idx)
|
53
|
-
|
54
|
-
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
55
|
-
end
|
56
|
-
|
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
|
-
|
53
|
+
item_ptr = item_pointer(idx)
|
68
54
|
convertor = GirFFI::ArrayElementConvertor.new convert_element_type, item_ptr
|
69
55
|
convertor.to_ruby_value
|
70
56
|
end
|
@@ -85,6 +71,29 @@ module GLib
|
|
85
71
|
|
86
72
|
private
|
87
73
|
|
74
|
+
def item_pointer(idx)
|
75
|
+
check_bounds(idx)
|
76
|
+
|
77
|
+
data_ptr + idx * element_size
|
78
|
+
end
|
79
|
+
|
80
|
+
def check_bounds(idx)
|
81
|
+
unless (0...length).cover? idx
|
82
|
+
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def convert_element_type
|
87
|
+
case element_type
|
88
|
+
when :utf8
|
89
|
+
:utf8
|
90
|
+
when GirFFI::ObjectBase
|
91
|
+
element_type
|
92
|
+
else
|
93
|
+
[:pointer, element_type]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
88
97
|
def element_size
|
89
98
|
POINTER_SIZE
|
90
99
|
end
|
data/lib/ffi-glib/variant.rb
CHANGED
@@ -11,16 +11,14 @@ module GLib
|
|
11
11
|
get_string_without_override.first
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
alias_method :get_string_without_override, :get_string
|
15
|
+
alias_method :get_string, :get_string_with_override
|
16
16
|
|
17
|
-
# Initializing method used in constructors. For Variant
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# NOTE: This is very hard to test since it is not possible to get the
|
21
|
-
# variant's ref count directely. However, there is an error when running
|
22
|
-
# the tests on 32-bit systems.
|
17
|
+
# Initializing method used in constructors. For Variant the constructing
|
18
|
+
# functions all return floating references, so this is need to take full
|
19
|
+
# ownership.
|
23
20
|
#
|
21
|
+
# Also see the documentation for g_variant_ref_sink.
|
24
22
|
def store_pointer(ptr)
|
25
23
|
Lib.g_variant_ref_sink ptr
|
26
24
|
super
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -33,8 +33,8 @@ module GObject
|
|
33
33
|
store_pointer ptr
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
alias_method :old_initialze, :initialize
|
37
|
+
alias_method :initialize, :initialize_with_properties
|
38
38
|
remove_method :old_initialze
|
39
39
|
|
40
40
|
def self.new(*args, &block)
|
@@ -43,7 +43,7 @@ module GObject
|
|
43
43
|
obj
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
alias_method :base_initialize, :initialize
|
47
47
|
|
48
48
|
private :base_initialize
|
49
49
|
|
@@ -82,7 +82,7 @@ module GObject
|
|
82
82
|
setup_instance_method! "get_property"
|
83
83
|
setup_instance_method! "set_property"
|
84
84
|
setup_instance_method! "is_floating"
|
85
|
-
|
85
|
+
alias_method :floating?, :is_floating
|
86
86
|
|
87
87
|
private
|
88
88
|
|
@@ -117,17 +117,12 @@ module GObject
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def property_param_spec(property_name)
|
120
|
-
|
120
|
+
class_struct.find_property property_name or
|
121
121
|
raise GirFFI::PropertyNotFoundError.new(property_name, self.class)
|
122
122
|
end
|
123
123
|
|
124
124
|
# Overrides for GObject, GObject's generic base class.
|
125
125
|
module Overrides
|
126
|
-
# @deprecated
|
127
|
-
def get_property_extended(property_name)
|
128
|
-
get_property(property_name)
|
129
|
-
end
|
130
|
-
|
131
126
|
def get_property(property_name)
|
132
127
|
gvalue = gvalue_for_property property_name
|
133
128
|
super property_name, gvalue
|
@@ -139,11 +134,6 @@ module GObject
|
|
139
134
|
value
|
140
135
|
end
|
141
136
|
|
142
|
-
# @deprecated
|
143
|
-
def set_property_extended(property_name, value)
|
144
|
-
set_property property_name, value
|
145
|
-
end
|
146
|
-
|
147
137
|
def set_property(property_name, value)
|
148
138
|
type_info = get_property_type property_name
|
149
139
|
value = property_value_pre_conversion(value, type_info) if type_info
|
@@ -1,18 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
GObject::Object.
|
3
|
+
GObject::Object.class_struct
|
4
4
|
|
5
5
|
module GObject
|
6
|
-
# Overrides for GObjectClass,
|
6
|
+
# Overrides for GObjectClass, the class struct for GObject::Object
|
7
7
|
class ObjectClass
|
8
|
-
def set_property=(callback)
|
9
|
-
struct[:set_property] = GObject::ObjectSetPropertyFunc.from callback
|
10
|
-
end
|
11
|
-
|
12
|
-
def get_property=(callback)
|
13
|
-
struct[:get_property] = GObject::ObjectGetPropertyFunc.from callback
|
14
|
-
end
|
15
|
-
|
16
8
|
def gtype
|
17
9
|
to_ptr.get_gtype 0
|
18
10
|
end
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -8,29 +8,29 @@ module GObject
|
|
8
8
|
setup_instance_method! :init
|
9
9
|
|
10
10
|
METHOD_MAP = {
|
11
|
-
TYPE_INVALID
|
11
|
+
TYPE_INVALID => [:get_none, :set_none],
|
12
12
|
# TYPE_NONE is skipped
|
13
|
-
TYPE_INTERFACE => [:get_object,
|
14
|
-
TYPE_CHAR
|
15
|
-
TYPE_UCHAR
|
16
|
-
TYPE_BOOLEAN
|
17
|
-
TYPE_INT
|
18
|
-
TYPE_UINT
|
19
|
-
TYPE_LONG
|
20
|
-
TYPE_ULONG
|
21
|
-
TYPE_INT64
|
22
|
-
TYPE_UINT64
|
23
|
-
TYPE_ENUM
|
24
|
-
TYPE_FLAGS
|
25
|
-
TYPE_FLOAT
|
26
|
-
TYPE_DOUBLE
|
27
|
-
TYPE_STRING
|
28
|
-
TYPE_POINTER
|
29
|
-
TYPE_BOXED
|
30
|
-
TYPE_PARAM
|
31
|
-
TYPE_OBJECT
|
32
|
-
TYPE_GTYPE
|
33
|
-
TYPE_VARIANT
|
13
|
+
TYPE_INTERFACE => [:get_object, :set_instance_enhanced],
|
14
|
+
TYPE_CHAR => [:get_schar, :set_schar],
|
15
|
+
TYPE_UCHAR => [:get_uchar, :set_uchar],
|
16
|
+
TYPE_BOOLEAN => [:get_boolean, :set_boolean],
|
17
|
+
TYPE_INT => [:get_int, :set_int],
|
18
|
+
TYPE_UINT => [:get_uint, :set_uint],
|
19
|
+
TYPE_LONG => [:get_long, :set_long],
|
20
|
+
TYPE_ULONG => [:get_ulong, :set_ulong],
|
21
|
+
TYPE_INT64 => [:get_int64, :set_int64],
|
22
|
+
TYPE_UINT64 => [:get_uint64, :set_uint64],
|
23
|
+
TYPE_ENUM => [:get_enum_enhanced, :set_enum_enhanced],
|
24
|
+
TYPE_FLAGS => [:get_flags_enhanced, :set_flags_enhanced],
|
25
|
+
TYPE_FLOAT => [:get_float, :set_float],
|
26
|
+
TYPE_DOUBLE => [:get_double, :set_double],
|
27
|
+
TYPE_STRING => [:get_string, :set_string],
|
28
|
+
TYPE_POINTER => [:get_pointer, :set_pointer],
|
29
|
+
TYPE_BOXED => [:get_boxed, :set_boxed],
|
30
|
+
TYPE_PARAM => [:get_param, :set_param],
|
31
|
+
TYPE_OBJECT => [:get_object, :set_instance_enhanced],
|
32
|
+
TYPE_GTYPE => [:get_gtype, :set_gtype],
|
33
|
+
TYPE_VARIANT => [:get_variant, :set_variant]
|
34
34
|
}.freeze
|
35
35
|
|
36
36
|
# TODO: Give more generic name
|
@@ -68,11 +68,11 @@ module GObject
|
|
68
68
|
end
|
69
69
|
|
70
70
|
CLASS_TO_GTYPE_MAP = {
|
71
|
-
NilClass
|
72
|
-
TrueClass
|
71
|
+
NilClass => TYPE_INVALID,
|
72
|
+
TrueClass => TYPE_BOOLEAN,
|
73
73
|
FalseClass => TYPE_BOOLEAN,
|
74
|
-
Integer
|
75
|
-
String
|
74
|
+
Integer => TYPE_INT,
|
75
|
+
String => TYPE_STRING
|
76
76
|
}.freeze
|
77
77
|
|
78
78
|
# Overrides for existing Value methods
|
@@ -81,7 +81,7 @@ module GObject
|
|
81
81
|
send set_method, val
|
82
82
|
end
|
83
83
|
|
84
|
-
|
84
|
+
alias_method :value=, :set_value
|
85
85
|
|
86
86
|
def current_gtype
|
87
87
|
struct[:g_type]
|
data/lib/ffi-gobject.rb
CHANGED
@@ -31,17 +31,6 @@ module GObject
|
|
31
31
|
type_name type_from_instance instance
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.object_class_from_instance(instance)
|
35
|
-
object_class_from_instance_pointer instance.to_ptr
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.object_class_from_instance_pointer(inst_ptr)
|
39
|
-
return nil if inst_ptr.null?
|
40
|
-
|
41
|
-
klsptr = inst_ptr.get_pointer 0
|
42
|
-
ObjectClass.wrap klsptr
|
43
|
-
end
|
44
|
-
|
45
34
|
def self.signal_lookup_from_instance(signal, object)
|
46
35
|
signal_lookup signal, type_from_instance(object)
|
47
36
|
end
|
@@ -55,11 +44,7 @@ module GObject
|
|
55
44
|
argument_gvalues = sig_info.arguments_to_gvalues object, args
|
56
45
|
return_gvalue = sig_info.gvalue_for_return_value
|
57
46
|
|
58
|
-
|
59
|
-
# NOTE: Depending on the version of GObjectIntrospection, the result will
|
60
|
-
# be stored in result or return_gvalue. This was changed between versions
|
61
|
-
# 1.44 and 1.46.
|
62
|
-
result || return_gvalue.get_value
|
47
|
+
signal_emitv argument_gvalues, signal_id, detail_quark, return_gvalue
|
63
48
|
end
|
64
49
|
|
65
50
|
def self.signal_connect(object, detailed_signal, data = nil, after = false, &block)
|
@@ -85,7 +70,8 @@ module GObject
|
|
85
70
|
load_class :ClosureMarshal
|
86
71
|
load_class :ParamFlags
|
87
72
|
|
88
|
-
#
|
73
|
+
# Attach some needed functions to the GObject Lib, which was set up in
|
74
|
+
# `gir_ffi-base/gobject/lib.rb`.
|
89
75
|
Lib.class_eval do
|
90
76
|
attach_function :g_object_ref_sink, [:pointer], :pointer
|
91
77
|
attach_function :g_object_ref, [:pointer], :pointer
|
@@ -5,16 +5,16 @@ module GObjectIntrospection
|
|
5
5
|
class IConstantInfo < IBaseInfo
|
6
6
|
TYPE_TAG_TO_UNION_MEMBER = {
|
7
7
|
gboolean: :v_boolean,
|
8
|
-
gint8:
|
9
|
-
gint16:
|
10
|
-
gint32:
|
11
|
-
gint64:
|
12
|
-
guint8:
|
13
|
-
guint16:
|
14
|
-
guint32:
|
15
|
-
guint64:
|
16
|
-
gdouble:
|
17
|
-
utf8:
|
8
|
+
gint8: :v_int8,
|
9
|
+
gint16: :v_int16,
|
10
|
+
gint32: :v_int32,
|
11
|
+
gint64: :v_int64,
|
12
|
+
guint8: :v_uint8,
|
13
|
+
guint16: :v_uint16,
|
14
|
+
guint32: :v_uint32,
|
15
|
+
guint64: :v_uint64,
|
16
|
+
gdouble: :v_double,
|
17
|
+
utf8: :v_string
|
18
18
|
}.freeze
|
19
19
|
|
20
20
|
def value
|
@@ -63,12 +63,12 @@ module GObjectIntrospection
|
|
63
63
|
|
64
64
|
# IFunctionInfo
|
65
65
|
bit_mask :IFunctionInfoFlags,
|
66
|
-
is_method:
|
66
|
+
is_method: (1 << 0),
|
67
67
|
is_constructor: (1 << 1),
|
68
|
-
is_getter:
|
69
|
-
is_setter:
|
70
|
-
wraps_vfunc:
|
71
|
-
throws:
|
68
|
+
is_getter: (1 << 2),
|
69
|
+
is_setter: (1 << 3),
|
70
|
+
wraps_vfunc: (1 << 4),
|
71
|
+
throws: (1 << 5)
|
72
72
|
|
73
73
|
attach_function :g_function_info_get_symbol, [:pointer], :string
|
74
74
|
attach_function :g_function_info_get_flags, [:pointer], :IFunctionInfoFlags
|
@@ -231,10 +231,10 @@ module GObjectIntrospection
|
|
231
231
|
|
232
232
|
# IVFuncInfo
|
233
233
|
bit_mask :IVFuncInfoFlags,
|
234
|
-
must_chain_up:
|
235
|
-
must_override:
|
234
|
+
must_chain_up: (1 << 0),
|
235
|
+
must_override: (1 << 1),
|
236
236
|
must_not_override: (1 << 2),
|
237
|
-
throws:
|
237
|
+
throws: (1 << 3)
|
238
238
|
|
239
239
|
attach_function :g_vfunc_info_get_flags, [:pointer], :IVFuncInfoFlags
|
240
240
|
attach_function :g_vfunc_info_get_invoker, [:pointer], :pointer
|
@@ -294,9 +294,9 @@ module GObjectIntrospection
|
|
294
294
|
|
295
295
|
# NOTE: This type has more values, but these are the ones used
|
296
296
|
bit_mask :ParamFlags,
|
297
|
-
readable:
|
298
|
-
writable:
|
299
|
-
construct:
|
297
|
+
readable: (1 << 0),
|
298
|
+
writable: (1 << 1),
|
299
|
+
construct: (1 << 2),
|
300
300
|
construct_only: (1 << 3)
|
301
301
|
|
302
302
|
attach_function :g_property_info_get_flags, [:pointer], :ParamFlags
|
@@ -25,27 +25,27 @@ require "ffi-gobject_introspection/i_unresolved_info"
|
|
25
25
|
module GObjectIntrospection
|
26
26
|
# Map info type to class. Default is IBaseInfo.
|
27
27
|
TYPEMAP = {
|
28
|
-
invalid:
|
29
|
-
function:
|
30
|
-
callback:
|
31
|
-
struct:
|
28
|
+
invalid: IBaseInfo,
|
29
|
+
function: IFunctionInfo,
|
30
|
+
callback: ICallbackInfo,
|
31
|
+
struct: IStructInfo,
|
32
32
|
# TODO: There's no GIBoxedInfo, so what does :boxed mean?
|
33
|
-
boxed:
|
34
|
-
enum:
|
35
|
-
flags:
|
36
|
-
object:
|
37
|
-
interface:
|
38
|
-
constant:
|
33
|
+
boxed: IBaseInfo,
|
34
|
+
enum: IEnumInfo,
|
35
|
+
flags: IFlagsInfo,
|
36
|
+
object: IObjectInfo,
|
37
|
+
interface: IInterfaceInfo,
|
38
|
+
constant: IConstantInfo,
|
39
39
|
invalid_was_error_domain: IBaseInfo,
|
40
|
-
union:
|
41
|
-
value:
|
42
|
-
signal:
|
43
|
-
vfunc:
|
44
|
-
property:
|
45
|
-
field:
|
46
|
-
arg:
|
47
|
-
type:
|
48
|
-
unresolved:
|
40
|
+
union: IUnionInfo,
|
41
|
+
value: IValueInfo,
|
42
|
+
signal: ISignalInfo,
|
43
|
+
vfunc: IVFuncInfo,
|
44
|
+
property: IPropertyInfo,
|
45
|
+
field: IFieldInfo,
|
46
|
+
arg: IArgInfo,
|
47
|
+
type: ITypeInfo,
|
48
|
+
unresolved: IUnresolvedInfo
|
49
49
|
}.freeze
|
50
50
|
end
|
51
51
|
|