gobject-introspection 3.4.4 → 3.4.8

Sign up to get free protection for your applications and to get access to all the features.
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: