gobject-introspection 3.1.8 → 3.1.9

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
  SHA1:
3
- metadata.gz: 4386d429bf37ac770fa9a6c4b96675872e24715e
4
- data.tar.gz: dc49de3b9438371496177dbe4fd732db1433a9d6
3
+ metadata.gz: 7600f4505e9b541f1599e76e10711438487a9ab2
4
+ data.tar.gz: 9e00b3aec282ba5bbf005dea71c1eb0d17a64c1b
5
5
  SHA512:
6
- metadata.gz: bc66cb8e0a0e7af892b3c7a76fb9f40a7315e2ebf7a2619973371a0a7606945ca0203fc5508a18f0f29b94213ae22a626fa7b24c381bf2632b36d32d78ee946d
7
- data.tar.gz: 3c78fb0a78b5c0b3969fe04a265d2fe59d5b0284302861a54523604ab1961c269c8ff66b0687c9001aece8f56fe9410c6e28586d9f08323afd9f7911d0e5f404
6
+ metadata.gz: 5674b84f008018f0033aa29c177c5f9b1ad578f2860f19343871679d630e85caf273c09db62150e8c565832a75e749aadda89a2edbb416a1ea4b43ddf1469ccd
7
+ data.tar.gz: 5a6e890806dd92a78730b902be40e17a37a83d83dc6c7a9ed6d73a3d44d18b378bf03265e505355daa64deff6033e1e8330b162214513bc36f3374fd0b9aad4d
data/Rakefile CHANGED
@@ -32,7 +32,7 @@ package_task = GNOME2::Rake::PackageTask.new do |package|
32
32
  :name => "glib",
33
33
  :download_site => :gnome,
34
34
  :label => "GLib",
35
- :version => "2.52.3",
35
+ :version => "2.54.1",
36
36
  :compression_method => "xz",
37
37
  :windows => {
38
38
  :build => false,
@@ -47,7 +47,7 @@ package_task = GNOME2::Rake::PackageTask.new do |package|
47
47
  :name => "gobject-introspection",
48
48
  :download_site => :gnome,
49
49
  :label => "gobject-introspection",
50
- :version => "1.52.1",
50
+ :version => "1.54.1",
51
51
  :compression_method => "xz",
52
52
  :windows => {
53
53
  :configure_args => [
@@ -61,13 +61,14 @@ array_c_to_ruby_sized_interface(gconstpointer *elements,
61
61
  g_base_info_unref(interface_info);
62
62
  g_base_info_unref(element_type_info);
63
63
  } else {
64
- interface_name = g_info_type_to_string(interface_type);
64
+ /* TODO: Should we check caller_allocates? */
65
+ gsize struct_size = g_struct_info_get_size(interface_info);
66
+ for (i = 0; i < n_elements; i++) {
67
+ gpointer element = ((gchar *)elements) + struct_size * i;
68
+ rb_ary_push(rb_array, BOXED2RVAL(element, gtype));
69
+ }
65
70
  g_base_info_unref(interface_info);
66
71
  g_base_info_unref(element_type_info);
67
- rb_raise(rb_eNotImpError,
68
- "TODO: GIArgument(array)[c][interface(%s)](%s) -> Ruby",
69
- interface_name,
70
- g_type_name(gtype));
71
72
  }
72
73
  break;
73
74
  case GI_INFO_TYPE_BOXED:
@@ -131,12 +132,20 @@ array_c_to_ruby_sized(gconstpointer *elements,
131
132
 
132
133
  switch (element_type_tag) {
133
134
  case GI_TYPE_TAG_VOID:
134
- case GI_TYPE_TAG_BOOLEAN:
135
135
  g_base_info_unref(element_type_info);
136
136
  rb_raise(rb_eNotImpError,
137
137
  "TODO: GIArgument(array)[c][%s] -> Ruby",
138
138
  g_type_tag_to_string(element_type_tag));
139
139
  break;
140
+ case GI_TYPE_TAG_BOOLEAN:
141
+ g_base_info_unref(element_type_info);
142
+ {
143
+ const gboolean *booleans = (const gboolean *)elements;
144
+ for (i = 0; i < n_elements; i++) {
145
+ rb_ary_push(rb_array, CBOOL2RVAL(booleans[i]));
146
+ }
147
+ }
148
+ break;
140
149
  case GI_TYPE_TAG_INT8:
141
150
  g_base_info_unref(element_type_info);
142
151
  {
@@ -1146,8 +1155,15 @@ rb_gi_argument_to_ruby_ghash(GIArgument *argument, GITypeInfo *type_info)
1146
1155
  g_base_info_unref(value_type_info);
1147
1156
  rb_argument =
1148
1157
  rb_gi_argument_to_ruby_ghash_utf8_utf8(argument->v_pointer);
1149
- break;
1158
+ } else {
1159
+ g_base_info_unref(key_type_info);
1160
+ g_base_info_unref(value_type_info);
1161
+ rb_raise(rb_eNotImpError,
1162
+ "TODO: GIArgument(GHash)[%s][%s] -> Ruby",
1163
+ g_type_tag_to_string(key_type_tag),
1164
+ g_type_tag_to_string(value_type_tag));
1150
1165
  }
1166
+ break;
1151
1167
  case GI_TYPE_TAG_FILENAME:
1152
1168
  case GI_TYPE_TAG_ARRAY:
1153
1169
  case GI_TYPE_TAG_INTERFACE:
@@ -3330,6 +3346,22 @@ set_in_array_length_argument(GIArgument *argument,
3330
3346
  }
3331
3347
  }
3332
3348
 
3349
+ static void
3350
+ set_in_array_boolean_arguments_from_ruby(GIArgument *array_argument,
3351
+ VALUE rb_boolean_array)
3352
+ {
3353
+ gboolean *booleans;
3354
+ gint i, n_args;
3355
+
3356
+ n_args = RARRAY_LEN(rb_boolean_array);
3357
+ booleans = ALLOC_N(gboolean, n_args);
3358
+ for (i = 0; i < n_args; i++) {
3359
+ booleans[i] = RVAL2CBOOL(RARRAY_PTR(rb_boolean_array)[i]);
3360
+ }
3361
+
3362
+ array_argument->v_pointer = booleans;
3363
+ }
3364
+
3333
3365
  static void
3334
3366
  set_in_array_int8_arguments_from_ruby(GIArgument *array_argument,
3335
3367
  VALUE rb_number_array)
@@ -3644,11 +3676,16 @@ in_array_c_argument_from_ruby(GIArgument *array_argument,
3644
3676
  element_type_tag = g_type_info_get_tag(element_type_info);
3645
3677
  switch (element_type_tag) {
3646
3678
  case GI_TYPE_TAG_VOID:
3647
- case GI_TYPE_TAG_BOOLEAN:
3648
3679
  rb_raise(rb_eNotImpError,
3649
3680
  "TODO: Ruby -> GIArgument(array)[%s]",
3650
3681
  g_type_tag_to_string(element_type_tag));
3651
3682
  break;
3683
+ case GI_TYPE_TAG_BOOLEAN:
3684
+ rb_argument = rbg_to_array(rb_argument);
3685
+ set_in_array_boolean_arguments_from_ruby(array_argument, rb_argument);
3686
+ set_in_array_length_argument(length_argument, length_type_info,
3687
+ RARRAY_LEN(rb_argument));
3688
+ break;
3652
3689
  case GI_TYPE_TAG_INT8:
3653
3690
  if (RB_TYPE_P(rb_argument, RUBY_T_STRING)) {
3654
3691
  array_argument->v_pointer = RSTRING_PTR(rb_argument);
@@ -3953,11 +3990,13 @@ rb_gi_value_argument_free_array_c(VALUE rb_argument,
3953
3990
  element_type_tag = g_type_info_get_tag(element_type_info);
3954
3991
  switch (element_type_tag) {
3955
3992
  case GI_TYPE_TAG_VOID:
3956
- case GI_TYPE_TAG_BOOLEAN:
3957
3993
  rb_raise(rb_eNotImpError,
3958
3994
  "TODO: free GIArgument(array)[%s]",
3959
3995
  g_type_tag_to_string(element_type_tag));
3960
3996
  break;
3997
+ case GI_TYPE_TAG_BOOLEAN:
3998
+ xfree(argument->v_pointer);
3999
+ break;
3961
4000
  case GI_TYPE_TAG_INT8:
3962
4001
  case GI_TYPE_TAG_UINT8:
3963
4002
  if (RB_TYPE_P(rb_argument, RUBY_T_STRING)) {
@@ -3985,6 +4024,7 @@ rb_gi_value_argument_free_array_c(VALUE rb_argument,
3985
4024
  rb_raise(rb_eNotImpError,
3986
4025
  "TODO: free GIArgument(array)[%s]",
3987
4026
  g_type_tag_to_string(element_type_tag));
4027
+ break;
3988
4028
  case GI_TYPE_TAG_INTERFACE:
3989
4029
  xfree(argument->v_pointer);
3990
4030
  break;
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2015 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2012-2017 Ruby-GNOME2 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
@@ -23,6 +23,7 @@
23
23
  #define RG_TARGET_NAMESPACE rb_cGILoader
24
24
 
25
25
  static const gchar *boxed_class_converters_name = "@@boxed_class_converters";
26
+ static const gchar *object_class_converters_name = "@@object_class_converters";
26
27
 
27
28
  static VALUE
28
29
  rg_s_define_class(int argc, VALUE *argv, G_GNUC_UNUSED VALUE klass)
@@ -194,6 +195,76 @@ rg_s_register_boxed_class_converter(VALUE klass, VALUE rb_gtype)
194
195
  return Qnil;
195
196
  }
196
197
 
198
+ typedef struct {
199
+ GType type;
200
+ VALUE rb_converters;
201
+ VALUE rb_converter;
202
+ } ObjectInstance2RObjData;
203
+
204
+ static void
205
+ object_class_converter_free(gpointer user_data)
206
+ {
207
+ ObjectInstance2RObjData *data = user_data;
208
+ rb_ary_delete(data->rb_converters, data->rb_converter);
209
+ g_free(data);
210
+ }
211
+
212
+ static VALUE
213
+ object_instance2robj(gpointer instance, gpointer user_data)
214
+ {
215
+ ObjectInstance2RObjData *data = user_data;
216
+ VALUE existing_rb_instance;
217
+ VALUE default_rb_instance;
218
+ VALUE klass;
219
+ ID id_call;
220
+ VALUE converted_rb_instance;
221
+ ID id_unref;
222
+
223
+ existing_rb_instance = rbgobj_get_ruby_object_from_gobject(instance, FALSE);
224
+ if (!NIL_P(existing_rb_instance))
225
+ return existing_rb_instance;
226
+
227
+ default_rb_instance = rbgobj_get_ruby_object_from_gobject(instance, TRUE);
228
+ CONST_ID(id_call, "call");
229
+ klass = rb_funcall(data->rb_converter, id_call, 1, default_rb_instance);
230
+ if (klass == rb_class_of(default_rb_instance))
231
+ return default_rb_instance;
232
+
233
+ converted_rb_instance = rbgobj_object_alloc_func(klass);
234
+ g_object_ref(instance);
235
+ CONST_ID(id_unref, "unref");
236
+ rb_funcall(default_rb_instance, id_unref, 0);
237
+ rbgobj_gobject_initialize(converted_rb_instance, instance);
238
+ return converted_rb_instance;
239
+ }
240
+
241
+ static VALUE
242
+ rg_s_register_object_class_converter(VALUE klass, VALUE rb_gtype)
243
+ {
244
+ RGConvertTable table;
245
+ ObjectInstance2RObjData *data;
246
+ ID id_to_i;
247
+ VALUE object_class_converters;
248
+
249
+ memset(&table, 0, sizeof(RGConvertTable));
250
+ CONST_ID(id_to_i, "to_i");
251
+ table.type = NUM2ULONG(rb_funcall(rb_gtype, id_to_i, 0));
252
+ table.klass = Qnil;
253
+ table.instance2robj = object_instance2robj;
254
+
255
+ data = g_new(ObjectInstance2RObjData, 1);
256
+ data->type = table.type;
257
+ data->rb_converter = rb_block_proc();
258
+ object_class_converters = rb_cv_get(klass, object_class_converters_name);
259
+ rb_ary_push(object_class_converters, data->rb_converter);
260
+ table.user_data = data;
261
+ table.notify = object_class_converter_free;
262
+
263
+ rbgobj_convert_define(&table);
264
+
265
+ return Qnil;
266
+ }
267
+
197
268
  static VALUE
198
269
  rg_s_register_constant_rename_map(G_GNUC_UNUSED VALUE klass,
199
270
  VALUE rb_original,
@@ -260,12 +331,14 @@ rb_gi_loader_init(VALUE rb_mGI)
260
331
  RG_TARGET_NAMESPACE = rb_define_class_under(rb_mGI, "Loader", rb_cObject);
261
332
 
262
333
  rb_cv_set(RG_TARGET_NAMESPACE, boxed_class_converters_name, rb_ary_new());
334
+ rb_cv_set(RG_TARGET_NAMESPACE, object_class_converters_name, rb_ary_new());
263
335
 
264
336
  RG_DEF_SMETHOD(define_class, -1);
265
337
  RG_DEF_SMETHOD(define_interface, 3);
266
338
  RG_DEF_SMETHOD(define_struct, -1);
267
339
  RG_DEF_SMETHOD(define_error, -1);
268
340
  RG_DEF_SMETHOD(register_boxed_class_converter, 1);
341
+ RG_DEF_SMETHOD(register_object_class_converter, 1);
269
342
  RG_DEF_SMETHOD(register_constant_rename_map, 2);
270
343
  RG_DEF_SMETHOD(start_callback_dispatch_thread, 0);
271
344
  RG_DEF_SMETHOD(reference_gobject, -1);
data/test/run-test.rb CHANGED
@@ -27,7 +27,7 @@ modules = [
27
27
  [gobject_introspection_base, "gobject-introspection"]
28
28
  ]
29
29
  modules.each do |target, module_name|
30
- if system("which make > /dev/null")
30
+ if File.exist?("#{target}/Makefile") and system("which make > /dev/null")
31
31
  `make -C #{target.dump} > /dev/null` or exit(false)
32
32
  end
33
33
  $LOAD_PATH.unshift(File.join(target, "ext", module_name))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gobject-introspection
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.8
4
+ version: 3.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Ruby-GNOME2 Project Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-15 00:00:00.000000000 Z
11
+ date: 2017-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glib2
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.8
19
+ version: 3.1.9
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.1.8
26
+ version: 3.1.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: test-unit
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  version: '0'
145
145
  requirements: []
146
146
  rubyforge_project:
147
- rubygems_version: 2.5.2
147
+ rubygems_version: 2.5.2.1
148
148
  signing_key:
149
149
  specification_version: 4
150
150
  summary: Ruby/GObjectIntrospection is a Ruby binding of GObjectIntrospection.