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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d072b72b786e12f881fea9bde17a9eff9a4c71bedd25f4ecdd2b18267b8ba051
4
- data.tar.gz: c9e9e78f5c492cb8fea24a1b54e05c2cedad2ec6ce877030cdb3782863340673
3
+ metadata.gz: 311ffa1b66531188bbe757027e6e7ff1c38936334bd461fe98f74dfc7354a6f8
4
+ data.tar.gz: 232f861d7013b3e366eb9949f7c59445808e9a3a84653479e02694856939bceb
5
5
  SHA512:
6
- metadata.gz: a24acd65c6f1ddfe47665819bbb37c6121e2c154183c23f64512e4e6ad3b9ba52cde4f035d06754f45071afed0a3db82024efe2ceac596b3d45eeb2027d182d2
7
- data.tar.gz: 1cdf78cd475b3401ecbd261b182b4271989600a2aef1f572e14c460fa25a84350c0c515edd301c4af7e27ad79943d9c33e24f21fa01c2d5634e7cbd9aec51d38
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-2019 Ruby-GNOME Project Team
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 = ULONG2NUM(GPOINTER_TO_UINT(argument->v_pointer));
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
- return Qnil;
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-2019 Ruby-GNOME Project Team
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
- typedef struct {
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
- callback = RB_ZALLOC(RBGICallback);
191
- callback->type_info = g_arg_info_get_type(arg_info);
192
- callback->callback_info = g_type_info_get_interface(callback->type_info);
193
- callback->closure =
194
- g_callable_info_prepare_closure(callback->callback_info,
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
- *target = NUM2UINT(metadata->rb_arg);
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: