gobject-introspection 3.4.4 → 3.4.8
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/ext/gobject-introspection/gobject-introspection-enum-types.c +230 -0
- data/ext/gobject-introspection/gobject-introspection-enum-types.h +42 -0
- data/ext/gobject-introspection/rb-gi-argument.c +11 -4
- data/ext/gobject-introspection/rb-gi-arguments-in.c +26 -97
- data/ext/gobject-introspection/rb-gi-arguments.c +243 -8
- data/ext/gobject-introspection/rb-gi-base-info.c +11 -1
- data/ext/gobject-introspection/rb-gi-callable-info.c +10 -2
- data/ext/gobject-introspection/rb-gi-callback.c +156 -2
- data/ext/gobject-introspection/rb-gi-conversions.h +6 -6
- data/ext/gobject-introspection/rb-gi-loader.c +53 -1
- data/ext/gobject-introspection/rb-gi-object-info.c +11 -1
- data/ext/gobject-introspection/rb-gi-private-arguments-in.h +3 -1
- data/ext/gobject-introspection/rb-gi-private-arguments.h +5 -1
- data/ext/gobject-introspection/rb-gi-private-callback.h +6 -3
- data/ext/gobject-introspection/rb-gi-private.h +1 -0
- data/ext/gobject-introspection/rb-gi-struct-info.c +13 -1
- data/ext/gobject-introspection/rb-gi-vfunc-info.c +2 -2
- data/ext/gobject-introspection/rb-gobject-introspection.c +231 -0
- data/ext/gobject-introspection/rbgiversion.h +24 -0
- data/lib/gobject-introspection/loader.rb +65 -1
- data/test/run-test.rb +4 -0
- data/test/test-base-info.rb +5 -1
- data/test/test-callable-info.rb +7 -1
- data/test/test-loader.rb +53 -7
- data/test/test-object-info.rb +5 -1
- data/test/test-struct-info.rb +6 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 311ffa1b66531188bbe757027e6e7ff1c38936334bd461fe98f74dfc7354a6f8
|
4
|
+
data.tar.gz: 232f861d7013b3e366eb9949f7c59445808e9a3a84653479e02694856939bceb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c826f8affcba51cabb7b3f17b547256fa334f24e33e4edec2834f55a1ebe26d07a364cf2d9a515f7175d956352675c6d9dc068687edeb960c5329a9972a776d4
|
7
|
+
data.tar.gz: b3fdb0ea8d2e493d6f6d5ab47c0242588f1dfd073fad5e59a6e04c3b2b85426d25f4661909c23c677da834f601b429f3230e302cf0147ebc503047ccdfef773b
|
@@ -0,0 +1,230 @@
|
|
1
|
+
|
2
|
+
/* Generated by glib-mkenums.rb ($Id$) */
|
3
|
+
|
4
|
+
#include "gobject-introspection-enum-types.h"
|
5
|
+
#include <girepository.h>
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
/* enumerations from "/usr/include/gobject-introspection-1.0/girepository.h" */
|
10
|
+
GType
|
11
|
+
g_i_repository_load_flags_get_type (void)
|
12
|
+
{
|
13
|
+
static GType etype = 0;
|
14
|
+
if (etype == 0) {
|
15
|
+
static const GFlagsValue values[] = {
|
16
|
+
{ G_IREPOSITORY_LOAD_FLAG_LAZY, "G_IREPOSITORY_LOAD_FLAG_LAZY", "g-irepository-load-flag-lazy" },
|
17
|
+
{ 0, NULL, NULL }
|
18
|
+
};
|
19
|
+
etype = g_flags_register_static ("GIRepositoryLoadFlags", values);
|
20
|
+
}
|
21
|
+
return etype;
|
22
|
+
}
|
23
|
+
|
24
|
+
GType
|
25
|
+
g_i_repository_error_get_type (void)
|
26
|
+
{
|
27
|
+
static GType etype = 0;
|
28
|
+
if (etype == 0) {
|
29
|
+
static const GEnumValue values[] = {
|
30
|
+
{ G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND, "G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND", "typelib-not-found" },
|
31
|
+
{ G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH, "G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH", "namespace-mismatch" },
|
32
|
+
{ G_IREPOSITORY_ERROR_NAMESPACE_VERSION_CONFLICT, "G_IREPOSITORY_ERROR_NAMESPACE_VERSION_CONFLICT", "namespace-version-conflict" },
|
33
|
+
{ G_IREPOSITORY_ERROR_LIBRARY_NOT_FOUND, "G_IREPOSITORY_ERROR_LIBRARY_NOT_FOUND", "library-not-found" },
|
34
|
+
{ 0, NULL, NULL }
|
35
|
+
};
|
36
|
+
etype = g_enum_register_static ("GIRepositoryError", values);
|
37
|
+
}
|
38
|
+
return etype;
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
/* enumerations from "/usr/include/gobject-introspection-1.0/gitypes.h" */
|
43
|
+
GType
|
44
|
+
g_i_info_type_get_type (void)
|
45
|
+
{
|
46
|
+
static GType etype = 0;
|
47
|
+
if (etype == 0) {
|
48
|
+
static const GEnumValue values[] = {
|
49
|
+
{ GI_INFO_TYPE_INVALID, "GI_INFO_TYPE_INVALID", "invalid" },
|
50
|
+
{ GI_INFO_TYPE_FUNCTION, "GI_INFO_TYPE_FUNCTION", "function" },
|
51
|
+
{ GI_INFO_TYPE_CALLBACK, "GI_INFO_TYPE_CALLBACK", "callback" },
|
52
|
+
{ GI_INFO_TYPE_STRUCT, "GI_INFO_TYPE_STRUCT", "struct" },
|
53
|
+
{ GI_INFO_TYPE_BOXED, "GI_INFO_TYPE_BOXED", "boxed" },
|
54
|
+
{ GI_INFO_TYPE_ENUM, "GI_INFO_TYPE_ENUM", "enum" },
|
55
|
+
{ GI_INFO_TYPE_FLAGS, "GI_INFO_TYPE_FLAGS", "flags" },
|
56
|
+
{ GI_INFO_TYPE_OBJECT, "GI_INFO_TYPE_OBJECT", "object" },
|
57
|
+
{ GI_INFO_TYPE_INTERFACE, "GI_INFO_TYPE_INTERFACE", "interface" },
|
58
|
+
{ GI_INFO_TYPE_CONSTANT, "GI_INFO_TYPE_CONSTANT", "constant" },
|
59
|
+
{ GI_INFO_TYPE_INVALID_0, "GI_INFO_TYPE_INVALID_0", "invalid-0" },
|
60
|
+
{ GI_INFO_TYPE_UNION, "GI_INFO_TYPE_UNION", "union" },
|
61
|
+
{ GI_INFO_TYPE_VALUE, "GI_INFO_TYPE_VALUE", "value" },
|
62
|
+
{ GI_INFO_TYPE_SIGNAL, "GI_INFO_TYPE_SIGNAL", "signal" },
|
63
|
+
{ GI_INFO_TYPE_VFUNC, "GI_INFO_TYPE_VFUNC", "vfunc" },
|
64
|
+
{ GI_INFO_TYPE_PROPERTY, "GI_INFO_TYPE_PROPERTY", "property" },
|
65
|
+
{ GI_INFO_TYPE_FIELD, "GI_INFO_TYPE_FIELD", "field" },
|
66
|
+
{ GI_INFO_TYPE_ARG, "GI_INFO_TYPE_ARG", "arg" },
|
67
|
+
{ GI_INFO_TYPE_TYPE, "GI_INFO_TYPE_TYPE", "type" },
|
68
|
+
{ GI_INFO_TYPE_UNRESOLVED, "GI_INFO_TYPE_UNRESOLVED", "unresolved" },
|
69
|
+
{ 0, NULL, NULL }
|
70
|
+
};
|
71
|
+
etype = g_enum_register_static ("GIInfoType", values);
|
72
|
+
}
|
73
|
+
return etype;
|
74
|
+
}
|
75
|
+
|
76
|
+
GType
|
77
|
+
g_i_transfer_get_type (void)
|
78
|
+
{
|
79
|
+
static GType etype = 0;
|
80
|
+
if (etype == 0) {
|
81
|
+
static const GEnumValue values[] = {
|
82
|
+
{ GI_TRANSFER_NOTHING, "GI_TRANSFER_NOTHING", "nothing" },
|
83
|
+
{ GI_TRANSFER_CONTAINER, "GI_TRANSFER_CONTAINER", "container" },
|
84
|
+
{ GI_TRANSFER_EVERYTHING, "GI_TRANSFER_EVERYTHING", "everything" },
|
85
|
+
{ 0, NULL, NULL }
|
86
|
+
};
|
87
|
+
etype = g_enum_register_static ("GITransfer", values);
|
88
|
+
}
|
89
|
+
return etype;
|
90
|
+
}
|
91
|
+
|
92
|
+
GType
|
93
|
+
g_i_direction_get_type (void)
|
94
|
+
{
|
95
|
+
static GType etype = 0;
|
96
|
+
if (etype == 0) {
|
97
|
+
static const GEnumValue values[] = {
|
98
|
+
{ GI_DIRECTION_IN, "GI_DIRECTION_IN", "in" },
|
99
|
+
{ GI_DIRECTION_OUT, "GI_DIRECTION_OUT", "out" },
|
100
|
+
{ GI_DIRECTION_INOUT, "GI_DIRECTION_INOUT", "inout" },
|
101
|
+
{ 0, NULL, NULL }
|
102
|
+
};
|
103
|
+
etype = g_enum_register_static ("GIDirection", values);
|
104
|
+
}
|
105
|
+
return etype;
|
106
|
+
}
|
107
|
+
|
108
|
+
GType
|
109
|
+
g_i_scope_type_get_type (void)
|
110
|
+
{
|
111
|
+
static GType etype = 0;
|
112
|
+
if (etype == 0) {
|
113
|
+
static const GEnumValue values[] = {
|
114
|
+
{ GI_SCOPE_TYPE_INVALID, "GI_SCOPE_TYPE_INVALID", "invalid" },
|
115
|
+
{ GI_SCOPE_TYPE_CALL, "GI_SCOPE_TYPE_CALL", "call" },
|
116
|
+
{ GI_SCOPE_TYPE_ASYNC, "GI_SCOPE_TYPE_ASYNC", "async" },
|
117
|
+
{ GI_SCOPE_TYPE_NOTIFIED, "GI_SCOPE_TYPE_NOTIFIED", "notified" },
|
118
|
+
{ 0, NULL, NULL }
|
119
|
+
};
|
120
|
+
etype = g_enum_register_static ("GIScopeType", values);
|
121
|
+
}
|
122
|
+
return etype;
|
123
|
+
}
|
124
|
+
|
125
|
+
GType
|
126
|
+
g_i_type_tag_get_type (void)
|
127
|
+
{
|
128
|
+
static GType etype = 0;
|
129
|
+
if (etype == 0) {
|
130
|
+
static const GEnumValue values[] = {
|
131
|
+
{ GI_TYPE_TAG_VOID, "GI_TYPE_TAG_VOID", "void" },
|
132
|
+
{ GI_TYPE_TAG_BOOLEAN, "GI_TYPE_TAG_BOOLEAN", "boolean" },
|
133
|
+
{ GI_TYPE_TAG_INT8, "GI_TYPE_TAG_INT8", "int8" },
|
134
|
+
{ GI_TYPE_TAG_UINT8, "GI_TYPE_TAG_UINT8", "uint8" },
|
135
|
+
{ GI_TYPE_TAG_INT16, "GI_TYPE_TAG_INT16", "int16" },
|
136
|
+
{ GI_TYPE_TAG_UINT16, "GI_TYPE_TAG_UINT16", "uint16" },
|
137
|
+
{ GI_TYPE_TAG_INT32, "GI_TYPE_TAG_INT32", "int32" },
|
138
|
+
{ GI_TYPE_TAG_UINT32, "GI_TYPE_TAG_UINT32", "uint32" },
|
139
|
+
{ GI_TYPE_TAG_INT64, "GI_TYPE_TAG_INT64", "int64" },
|
140
|
+
{ GI_TYPE_TAG_UINT64, "GI_TYPE_TAG_UINT64", "uint64" },
|
141
|
+
{ GI_TYPE_TAG_FLOAT, "GI_TYPE_TAG_FLOAT", "float" },
|
142
|
+
{ GI_TYPE_TAG_DOUBLE, "GI_TYPE_TAG_DOUBLE", "double" },
|
143
|
+
{ GI_TYPE_TAG_GTYPE, "GI_TYPE_TAG_GTYPE", "gtype" },
|
144
|
+
{ GI_TYPE_TAG_UTF8, "GI_TYPE_TAG_UTF8", "utf8" },
|
145
|
+
{ GI_TYPE_TAG_FILENAME, "GI_TYPE_TAG_FILENAME", "filename" },
|
146
|
+
{ GI_TYPE_TAG_ARRAY, "GI_TYPE_TAG_ARRAY", "array" },
|
147
|
+
{ GI_TYPE_TAG_INTERFACE, "GI_TYPE_TAG_INTERFACE", "interface" },
|
148
|
+
{ GI_TYPE_TAG_GLIST, "GI_TYPE_TAG_GLIST", "glist" },
|
149
|
+
{ GI_TYPE_TAG_GSLIST, "GI_TYPE_TAG_GSLIST", "gslist" },
|
150
|
+
{ GI_TYPE_TAG_GHASH, "GI_TYPE_TAG_GHASH", "ghash" },
|
151
|
+
{ GI_TYPE_TAG_ERROR, "GI_TYPE_TAG_ERROR", "error" },
|
152
|
+
{ GI_TYPE_TAG_UNICHAR, "GI_TYPE_TAG_UNICHAR", "unichar" },
|
153
|
+
{ 0, NULL, NULL }
|
154
|
+
};
|
155
|
+
etype = g_enum_register_static ("GITypeTag", values);
|
156
|
+
}
|
157
|
+
return etype;
|
158
|
+
}
|
159
|
+
|
160
|
+
GType
|
161
|
+
g_i_array_type_get_type (void)
|
162
|
+
{
|
163
|
+
static GType etype = 0;
|
164
|
+
if (etype == 0) {
|
165
|
+
static const GEnumValue values[] = {
|
166
|
+
{ GI_ARRAY_TYPE_C, "GI_ARRAY_TYPE_C", "c" },
|
167
|
+
{ GI_ARRAY_TYPE_ARRAY, "GI_ARRAY_TYPE_ARRAY", "array" },
|
168
|
+
{ GI_ARRAY_TYPE_PTR_ARRAY, "GI_ARRAY_TYPE_PTR_ARRAY", "ptr-array" },
|
169
|
+
{ GI_ARRAY_TYPE_BYTE_ARRAY, "GI_ARRAY_TYPE_BYTE_ARRAY", "byte-array" },
|
170
|
+
{ 0, NULL, NULL }
|
171
|
+
};
|
172
|
+
etype = g_enum_register_static ("GIArrayType", values);
|
173
|
+
}
|
174
|
+
return etype;
|
175
|
+
}
|
176
|
+
|
177
|
+
GType
|
178
|
+
g_i_field_info_flags_get_type (void)
|
179
|
+
{
|
180
|
+
static GType etype = 0;
|
181
|
+
if (etype == 0) {
|
182
|
+
static const GFlagsValue values[] = {
|
183
|
+
{ GI_FIELD_IS_READABLE, "GI_FIELD_IS_READABLE", "readable" },
|
184
|
+
{ GI_FIELD_IS_WRITABLE, "GI_FIELD_IS_WRITABLE", "writable" },
|
185
|
+
{ 0, NULL, NULL }
|
186
|
+
};
|
187
|
+
etype = g_flags_register_static ("GIFieldInfoFlags", values);
|
188
|
+
}
|
189
|
+
return etype;
|
190
|
+
}
|
191
|
+
|
192
|
+
GType
|
193
|
+
g_iv_func_info_flags_get_type (void)
|
194
|
+
{
|
195
|
+
static GType etype = 0;
|
196
|
+
if (etype == 0) {
|
197
|
+
static const GFlagsValue values[] = {
|
198
|
+
{ GI_VFUNC_MUST_CHAIN_UP, "GI_VFUNC_MUST_CHAIN_UP", "must-chain-up" },
|
199
|
+
{ GI_VFUNC_MUST_OVERRIDE, "GI_VFUNC_MUST_OVERRIDE", "must-override" },
|
200
|
+
{ GI_VFUNC_MUST_NOT_OVERRIDE, "GI_VFUNC_MUST_NOT_OVERRIDE", "must-not-override" },
|
201
|
+
{ GI_VFUNC_THROWS, "GI_VFUNC_THROWS", "throws" },
|
202
|
+
{ 0, NULL, NULL }
|
203
|
+
};
|
204
|
+
etype = g_flags_register_static ("GIVFuncInfoFlags", values);
|
205
|
+
}
|
206
|
+
return etype;
|
207
|
+
}
|
208
|
+
|
209
|
+
GType
|
210
|
+
g_i_function_info_flags_get_type (void)
|
211
|
+
{
|
212
|
+
static GType etype = 0;
|
213
|
+
if (etype == 0) {
|
214
|
+
static const GFlagsValue values[] = {
|
215
|
+
{ GI_FUNCTION_IS_METHOD, "GI_FUNCTION_IS_METHOD", "is-method" },
|
216
|
+
{ GI_FUNCTION_IS_CONSTRUCTOR, "GI_FUNCTION_IS_CONSTRUCTOR", "is-constructor" },
|
217
|
+
{ GI_FUNCTION_IS_GETTER, "GI_FUNCTION_IS_GETTER", "is-getter" },
|
218
|
+
{ GI_FUNCTION_IS_SETTER, "GI_FUNCTION_IS_SETTER", "is-setter" },
|
219
|
+
{ GI_FUNCTION_WRAPS_VFUNC, "GI_FUNCTION_WRAPS_VFUNC", "wraps-vfunc" },
|
220
|
+
{ GI_FUNCTION_THROWS, "GI_FUNCTION_THROWS", "throws" },
|
221
|
+
{ 0, NULL, NULL }
|
222
|
+
};
|
223
|
+
etype = g_flags_register_static ("GIFunctionInfoFlags", values);
|
224
|
+
}
|
225
|
+
return etype;
|
226
|
+
}
|
227
|
+
|
228
|
+
|
229
|
+
/* Generated data ends here */
|
230
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
/* Generated by glib-mkenums.rb ($Id$) */
|
3
|
+
|
4
|
+
#ifndef __GOBJECT_INTROSPECTION_ENUM_TYPES_H__
|
5
|
+
#define __GOBJECT_INTROSPECTION_ENUM_TYPES_H__
|
6
|
+
|
7
|
+
#include <glib-object.h>
|
8
|
+
|
9
|
+
G_BEGIN_DECLS
|
10
|
+
|
11
|
+
/* enumerations from "/usr/include/gobject-introspection-1.0/girepository.h" */
|
12
|
+
GType g_i_repository_load_flags_get_type (void);
|
13
|
+
#define G_TYPE_I_REPOSITORY_LOAD_FLAGS (g_i_repository_load_flags_get_type())
|
14
|
+
GType g_i_repository_error_get_type (void);
|
15
|
+
#define G_TYPE_I_REPOSITORY_ERROR (g_i_repository_error_get_type())
|
16
|
+
|
17
|
+
/* enumerations from "/usr/include/gobject-introspection-1.0/gitypes.h" */
|
18
|
+
GType g_i_info_type_get_type (void);
|
19
|
+
#define G_TYPE_I_INFO_TYPE (g_i_info_type_get_type())
|
20
|
+
GType g_i_transfer_get_type (void);
|
21
|
+
#define G_TYPE_I_TRANSFER (g_i_transfer_get_type())
|
22
|
+
GType g_i_direction_get_type (void);
|
23
|
+
#define G_TYPE_I_DIRECTION (g_i_direction_get_type())
|
24
|
+
GType g_i_scope_type_get_type (void);
|
25
|
+
#define G_TYPE_I_SCOPE_TYPE (g_i_scope_type_get_type())
|
26
|
+
GType g_i_type_tag_get_type (void);
|
27
|
+
#define G_TYPE_I_TYPE_TAG (g_i_type_tag_get_type())
|
28
|
+
GType g_i_array_type_get_type (void);
|
29
|
+
#define G_TYPE_I_ARRAY_TYPE (g_i_array_type_get_type())
|
30
|
+
GType g_i_field_info_flags_get_type (void);
|
31
|
+
#define G_TYPE_I_FIELD_INFO_FLAGS (g_i_field_info_flags_get_type())
|
32
|
+
GType g_iv_func_info_flags_get_type (void);
|
33
|
+
#define G_TYPE_IV_FUNC_INFO_FLAGS (g_iv_func_info_flags_get_type())
|
34
|
+
GType g_i_function_info_flags_get_type (void);
|
35
|
+
#define G_TYPE_I_FUNCTION_INFO_FLAGS (g_i_function_info_flags_get_type())
|
36
|
+
|
37
|
+
G_END_DECLS
|
38
|
+
|
39
|
+
#endif /* __GOBJECT_INTROSPECTION_ENUM_TYPES_H__ */
|
40
|
+
|
41
|
+
/* Generated data ends here */
|
42
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2012-
|
3
|
+
* Copyright (C) 2012-2021 Ruby-GNOME Project Team
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -1296,7 +1296,7 @@ rb_gi_argument_to_ruby(GIArgument *argument,
|
|
1296
1296
|
switch (type_tag) {
|
1297
1297
|
case GI_TYPE_TAG_VOID:
|
1298
1298
|
if (g_type_info_is_pointer(type_info)) {
|
1299
|
-
rb_argument =
|
1299
|
+
rb_argument = ULL2NUM((guint64)(argument->v_pointer));
|
1300
1300
|
} else {
|
1301
1301
|
rb_argument = Qnil;
|
1302
1302
|
}
|
@@ -2011,11 +2011,18 @@ rb_gi_return_argument_to_ruby(GICallableInfo *callable_info,
|
|
2011
2011
|
GITypeInfo return_value_info;
|
2012
2012
|
|
2013
2013
|
may_return_null = g_callable_info_may_return_null(callable_info);
|
2014
|
+
g_callable_info_load_return_type(callable_info, &return_value_info);
|
2014
2015
|
if (may_return_null && !argument->v_pointer) {
|
2015
|
-
|
2016
|
+
GITypeTag return_value_tag = g_type_info_get_tag(&return_value_info);
|
2017
|
+
switch (return_value_tag) {
|
2018
|
+
case GI_TYPE_TAG_GLIST:
|
2019
|
+
case GI_TYPE_TAG_GSLIST:
|
2020
|
+
return rb_ary_new();
|
2021
|
+
default:
|
2022
|
+
return Qnil;
|
2023
|
+
}
|
2016
2024
|
}
|
2017
2025
|
|
2018
|
-
g_callable_info_load_return_type(callable_info, &return_value_info);
|
2019
2026
|
rb_argument = rb_gi_argument_to_ruby(argument, FALSE, &return_value_info,
|
2020
2027
|
in_args, out_args, args_metadata);
|
2021
2028
|
switch (g_callable_info_get_caller_owns(callable_info)) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2012-
|
3
|
+
* Copyright (C) 2012-2021 Ruby-GNOME Project Team
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -27,13 +27,7 @@ rb_gi_callback_data_destroy_notify(gpointer data)
|
|
27
27
|
rb_gi_callback_data_free(callback_data);
|
28
28
|
}
|
29
29
|
|
30
|
-
|
31
|
-
RBGIArguments *args;
|
32
|
-
RBGICallback *callback;
|
33
|
-
RBGICallbackData *callback_data;
|
34
|
-
} RBGICallbackInvokeData;
|
35
|
-
|
36
|
-
static VALUE
|
30
|
+
VALUE
|
37
31
|
rb_gi_arguments_in_to_ruby(RBGIArguments *args)
|
38
32
|
{
|
39
33
|
VALUE rb_in_args;
|
@@ -68,85 +62,6 @@ rb_gi_arguments_in_to_ruby(RBGIArguments *args)
|
|
68
62
|
return rb_in_args;
|
69
63
|
}
|
70
64
|
|
71
|
-
static VALUE
|
72
|
-
rb_gi_callback_invoke(VALUE user_data)
|
73
|
-
{
|
74
|
-
RBGICallbackInvokeData *data = (RBGICallbackInvokeData *)user_data;
|
75
|
-
ID id_call;
|
76
|
-
VALUE rb_callback = rb_gi_callback_data_get_rb_callback(data->callback_data);
|
77
|
-
VALUE rb_args = rb_gi_arguments_in_to_ruby(data->args);
|
78
|
-
|
79
|
-
CONST_ID(id_call, "call");
|
80
|
-
return rb_funcallv(rb_callback,
|
81
|
-
id_call,
|
82
|
-
RARRAY_LENINT(rb_args),
|
83
|
-
RARRAY_CONST_PTR(rb_args));
|
84
|
-
}
|
85
|
-
|
86
|
-
static void
|
87
|
-
rb_gi_ffi_closure_callback(G_GNUC_UNUSED ffi_cif *cif,
|
88
|
-
void *return_value,
|
89
|
-
void **raw_args,
|
90
|
-
void *data)
|
91
|
-
{
|
92
|
-
RBGICallback *callback = data;
|
93
|
-
RBGICallbackData *callback_data = NULL;
|
94
|
-
RBGIArguments args;
|
95
|
-
VALUE rb_results;
|
96
|
-
|
97
|
-
rb_gi_arguments_init(&args,
|
98
|
-
callback->callback_info,
|
99
|
-
Qnil,
|
100
|
-
Qnil,
|
101
|
-
raw_args);
|
102
|
-
{
|
103
|
-
guint i;
|
104
|
-
|
105
|
-
for (i = 0; i < args.metadata->len; i++) {
|
106
|
-
RBGIArgMetadata *metadata;
|
107
|
-
|
108
|
-
metadata = g_ptr_array_index(args.metadata, i);
|
109
|
-
if (!metadata->closure_p) {
|
110
|
-
continue;
|
111
|
-
}
|
112
|
-
|
113
|
-
callback_data = *((RBGICallbackData **)(raw_args[i]));
|
114
|
-
break;
|
115
|
-
}
|
116
|
-
|
117
|
-
if (!callback_data && args.metadata->len > 0) {
|
118
|
-
RBGIArgMetadata *metadata;
|
119
|
-
|
120
|
-
i = args.metadata->len - 1;
|
121
|
-
metadata = g_ptr_array_index(args.metadata, i);
|
122
|
-
if (metadata->type.tag == GI_TYPE_TAG_VOID &&
|
123
|
-
metadata->type.pointer_p &&
|
124
|
-
strcmp(metadata->name, "data") == 0) {
|
125
|
-
callback_data = *((RBGICallbackData **)(raw_args[i]));
|
126
|
-
}
|
127
|
-
}
|
128
|
-
}
|
129
|
-
|
130
|
-
{
|
131
|
-
RBGICallbackInvokeData data;
|
132
|
-
data.args = &args;
|
133
|
-
data.callback = callback;
|
134
|
-
data.callback_data = callback_data;
|
135
|
-
rb_results = rbgutil_invoke_callback(rb_gi_callback_invoke,
|
136
|
-
(VALUE)&data);
|
137
|
-
}
|
138
|
-
rb_gi_arguments_fill_raw_results(&args, rb_results, return_value);
|
139
|
-
rb_gi_arguments_clear(&args);
|
140
|
-
|
141
|
-
{
|
142
|
-
RBGIArgMetadata *callback_metadata =
|
143
|
-
rb_gi_callback_data_get_metadata(callback_data);
|
144
|
-
if (callback_metadata->scope_type == GI_SCOPE_TYPE_ASYNC) {
|
145
|
-
rb_gi_callback_data_free(callback_data);
|
146
|
-
}
|
147
|
-
}
|
148
|
-
}
|
149
|
-
|
150
65
|
static void
|
151
66
|
rb_gi_arguments_in_init_arg_ruby_callback(RBGIArguments *args,
|
152
67
|
RBGIArgMetadata *metadata)
|
@@ -187,14 +102,11 @@ rb_gi_arguments_in_init_arg_ruby_callback(RBGIArguments *args,
|
|
187
102
|
if (callback_function) {
|
188
103
|
callback_argument->v_pointer = callback_function;
|
189
104
|
} else {
|
190
|
-
|
191
|
-
|
192
|
-
callback
|
193
|
-
|
194
|
-
|
195
|
-
&(callback->cif),
|
196
|
-
rb_gi_ffi_closure_callback,
|
197
|
-
callback);
|
105
|
+
GITypeInfo *type_info = g_arg_info_get_type(arg_info);
|
106
|
+
GICallbackInfo *callback_info = g_type_info_get_interface(type_info);
|
107
|
+
callback = rb_gi_callback_new(callback_info, NULL);
|
108
|
+
g_base_info_unref(callback_info);
|
109
|
+
g_base_info_unref(type_info);
|
198
110
|
callback_argument->v_pointer = callback->closure;
|
199
111
|
}
|
200
112
|
|
@@ -1007,7 +919,7 @@ rb_gi_arguments_in_init_arg_ruby_array_c(RBGIArguments *args,
|
|
1007
919
|
/* Workaround for rsvg_handle_set_stylesheet():
|
1008
920
|
https://gitlab.gnome.org/GNOME/librsvg/-/issues/596 */
|
1009
921
|
if (strcmp(metadata->name, "css") == 0) {
|
1010
|
-
metadata->in_arg->v_pointer = RVAL2CSTR(rb_arg);
|
922
|
+
metadata->in_arg->v_pointer = (char *)RVAL2CSTR(rb_arg);
|
1011
923
|
rb_gi_arguments_in_init_arg_ruby_array_set_length(args,
|
1012
924
|
metadata,
|
1013
925
|
RSTRING_LEN(rb_arg));
|
@@ -2060,13 +1972,30 @@ rb_gi_arguments_in_init_arg_ruby(RBGIArguments *args,
|
|
2060
1972
|
case GI_TYPE_TAG_UNICHAR:
|
2061
1973
|
{
|
2062
1974
|
gunichar *target;
|
1975
|
+
VALUE rb_unichar;
|
2063
1976
|
if (metadata->direction == GI_DIRECTION_INOUT) {
|
2064
1977
|
target = ALLOC(gunichar);
|
2065
1978
|
metadata->in_arg->v_pointer = target;
|
2066
1979
|
} else {
|
2067
1980
|
target = &(metadata->in_arg->v_uint32);
|
2068
1981
|
}
|
2069
|
-
|
1982
|
+
if (RB_TYPE_P(metadata->rb_arg, RUBY_T_STRING)) {
|
1983
|
+
VALUE rb_codepoints;
|
1984
|
+
if (rb_str_strlen(metadata->rb_arg) != 1) {
|
1985
|
+
rb_raise(rb_eArgError,
|
1986
|
+
"[%s][%s] must be one character: %+" PRIsVALUE,
|
1987
|
+
metadata->name,
|
1988
|
+
g_type_tag_to_string(metadata->type.tag),
|
1989
|
+
metadata->rb_arg);
|
1990
|
+
}
|
1991
|
+
rb_codepoints = rb_funcall(metadata->rb_arg,
|
1992
|
+
rb_intern("codepoints"),
|
1993
|
+
0);
|
1994
|
+
rb_unichar = RARRAY_PTR(rb_codepoints)[0];
|
1995
|
+
} else {
|
1996
|
+
rb_unichar = metadata->rb_arg;
|
1997
|
+
}
|
1998
|
+
*target = NUM2UINT(rb_unichar);
|
2070
1999
|
}
|
2071
2000
|
break;
|
2072
2001
|
default:
|