gobject-introspection 3.1.8 → 3.1.9

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
  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.