glib2 3.0.9 → 3.1.0

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: b94f7308e7d76205d90b18b897c9d69accc2a888
4
- data.tar.gz: 9aeb896467dcdd6ddd7656ff0dc7f82efe8feacd
3
+ metadata.gz: 398786c497340ba507311f59d7abe62b6d157cf6
4
+ data.tar.gz: 9dbcf93fe4255b9e3b9d87d53d75356a42b8a691
5
5
  SHA512:
6
- metadata.gz: 2436a45d9721ab2bd307a33bb541980ab2e178f26fe686e9ef97f4ee6f1a7bb4ac8b18a21346fa852ffeac91e104ec7730e788ec6bb0193764917d778eba170c
7
- data.tar.gz: dc94179cadf65f94b31597b5e2ffa8eb47d7cd4e8353152c24cdb195cd6ff0702a2cb93b35802c9f0f77fcb77f242a53e9e9984416e5bf0209add69874f036f6
6
+ metadata.gz: 19a054eaeb33aa1ab949d286f22fe661f26aca95de6e7b114fbb1589e54a08d6d8238f5d488bdcf9364f1529e5edef2b3a1bbeeffe96d95b453d5a8f38a2caba
7
+ data.tar.gz: 2b88e5545b2d18f4f24f628dbc782d9344d8c13685caa94c5ba6f2e13bf126ca77bd362b3ee9fdb57b5ca4525f7be2781568381e8ee9405a06e250f7aa2762b1
data/Rakefile CHANGED
@@ -85,7 +85,7 @@ package_task = GNOME2::Rake::PackageTask.new do |package|
85
85
  :name => "glib",
86
86
  :download_site => :gnome,
87
87
  :label => "GLib",
88
- :version => "2.48.1",
88
+ :version => "2.50.2",
89
89
  :compression_method => "xz",
90
90
  :windows => {
91
91
  :need_autoreconf => true,
@@ -168,7 +168,7 @@ package_task = GNOME2::Rake::PackageTask.new do |package|
168
168
  :name => "glib-networking",
169
169
  :download_site => :gnome,
170
170
  :label => "glib-networking",
171
- :version => "2.48.2",
171
+ :version => "2.50.0",
172
172
  :compression_method => "xz",
173
173
  :windows => {
174
174
  :configure_args => [
@@ -41,9 +41,6 @@ have_func("rb_check_array_type", ruby_header)
41
41
  have_func("rb_check_hash_type", ruby_header)
42
42
  have_func("rb_exec_recursive", ruby_header)
43
43
  have_func("rb_errinfo", ruby_header)
44
- have_func("rb_sourcefile", ruby_header)
45
- have_func("rb_sourceline", ruby_header)
46
- have_func("ruby_set_current_source", ruby_header)
47
44
  have_func("rb_thread_call_without_gvl", ruby_header)
48
45
  have_func("ruby_native_thread_p", ruby_header)
49
46
  have_func("rb_thread_call_with_gvl", ruby_header)
@@ -56,10 +56,13 @@ EXPORTS
56
56
  rbgobj_register_type
57
57
  rbgobj_set_signal_func
58
58
  rbgobj_get_signal_func
59
+ rbgobj_set_signal_call_func
60
+ rbgobj_get_signal_call_func
59
61
  rbgobj_add_constants
60
62
  rbgobj_constant_remap
61
63
  rbgobj_signal_wrap
62
64
  g_rclosure_new
65
+ g_rclosure_new_call
63
66
  g_rclosure_attach
64
67
  g_rclosure_set_tag
65
68
  rbgobj_ruby_value_get_type
@@ -854,47 +854,79 @@ rbg_check_hash_type (VALUE object)
854
854
  void
855
855
  rbg_scan_options (VALUE options, ...)
856
856
  {
857
- VALUE original_options = options;
858
- VALUE available_keys;
859
857
  const char *key;
860
- VALUE *value;
858
+ gsize n_keys = 0;
859
+ gsize n_found_keys = 0;
861
860
  va_list args;
861
+ va_list args_copy;
862
862
 
863
- if (NIL_P(options)) {
864
- options = rb_hash_new();
865
- } else {
863
+ if (!NIL_P(options)) {
864
+ VALUE original_options = options;
866
865
  options = rbg_check_hash_type(options);
867
- if (options == original_options) {
868
- options = rb_funcall(options, rb_intern("dup"), 0);
869
- } else if (NIL_P(options)) {
866
+ if (NIL_P(options)) {
870
867
  rb_raise(rb_eArgError,
871
868
  "options must be Hash or nil: %+" PRIsVALUE,
872
869
  original_options);
873
870
  }
874
871
  }
875
872
 
876
- available_keys = rb_ary_new();
877
873
  va_start(args, options);
874
+ va_copy(args_copy, args);
878
875
  key = va_arg(args, const char *);
876
+ n_keys = 0;
877
+ n_found_keys = 0;
879
878
  while (key) {
880
- VALUE rb_key;
881
- value = va_arg(args, VALUE *);
879
+ VALUE *value;
882
880
 
883
- rb_key = ID2SYM(rb_intern(key));
884
- rb_ary_push(available_keys, rb_key);
885
- *value = rb_funcall(options, rb_intern("delete"), 1, rb_key);
881
+ value = va_arg(args, VALUE *);
882
+ if (NIL_P(options)) {
883
+ *value = Qnil;
884
+ } else {
885
+ VALUE rb_key;
886
+ rb_key = ID2SYM(rb_intern(key));
887
+ if (RTEST(rb_funcall(options, rb_intern("key?"), 1, rb_key))) {
888
+ n_found_keys++;
889
+ }
890
+ *value = rb_hash_aref(options, rb_key);
891
+ }
892
+ n_keys++;
886
893
 
887
894
  key = va_arg(args, const char *);
888
895
  }
889
896
  va_end(args);
890
897
 
891
- if (RVAL2CBOOL(rb_funcall(options, rb_intern("empty?"), 0)))
898
+ if (NIL_P(options)) {
899
+ return;
900
+ }
901
+
902
+ if (n_found_keys == RHASH_SIZE(options)) {
892
903
  return;
904
+ }
905
+
906
+ {
907
+ VALUE rb_available_keys;
893
908
 
894
- rb_raise(rb_eArgError,
895
- "unexpected key(s) exist: %s: available keys: %s",
896
- rbg_inspect(rb_funcall(options, rb_intern("keys"), 0)),
897
- rbg_inspect(available_keys));
909
+ rb_available_keys = rb_ary_new();
910
+ key = va_arg(args_copy, const char *);
911
+ while (key) {
912
+ VALUE rb_key;
913
+
914
+ va_arg(args_copy, VALUE *);
915
+ rb_key = ID2SYM(rb_intern(key));
916
+ rb_ary_push(rb_available_keys, rb_key);
917
+ key = va_arg(args_copy, const char *);
918
+ }
919
+ va_end(args_copy);
920
+
921
+ rb_raise(rb_eArgError,
922
+ "unexpected key(s) exist: %+" PRIsVALUE
923
+ ": available keys: %+" PRIsVALUE,
924
+ rb_funcall(rb_funcall(options, rb_intern("keys"), 0),
925
+ rb_intern("-"),
926
+ 1,
927
+ rb_available_keys),
928
+ rb_available_keys);
929
+ }
898
930
  }
899
931
 
900
932
  #if 0
@@ -35,8 +35,8 @@ extern "C" {
35
35
  #endif /* __cplusplus */
36
36
 
37
37
  #define RBGLIB_MAJOR_VERSION 3
38
- #define RBGLIB_MINOR_VERSION 0
39
- #define RBGLIB_MICRO_VERSION 9
38
+ #define RBGLIB_MINOR_VERSION 1
39
+ #define RBGLIB_MICRO_VERSION 0
40
40
 
41
41
  #ifndef RB_ZALLOC
42
42
  # ifdef ZALLOC
@@ -42,7 +42,7 @@ ioc_error(GIOStatus status, GError *err)
42
42
  } else if (status == G_IO_STATUS_NORMAL){
43
43
  /* Do nothing */
44
44
  } else {
45
- rb_raise(rb_eRuntimeError, "An error occured. status = %d\n", status);
45
+ rb_raise(rb_eRuntimeError, "An error occurred. status = %d\n", status);
46
46
  }
47
47
  }
48
48
 
@@ -57,34 +57,57 @@ rg_initialize(int argc, VALUE *argv, VALUE self)
57
57
  return Qnil;
58
58
  }
59
59
 
60
+ typedef struct {
61
+ GMainLoop *loop;
62
+ int state;
63
+ } CheckInterruptData;
64
+
65
+ static VALUE
66
+ check_interrupt_raw(G_GNUC_UNUSED VALUE user_data)
67
+ {
68
+ rb_thread_check_ints();
69
+ return Qnil;
70
+ }
71
+
60
72
  static gboolean
61
- quit_loop(gpointer user_data)
73
+ check_interrupt(gpointer user_data)
62
74
  {
63
- GMainLoop *loop = user_data;
64
- g_main_loop_quit(loop);
65
- return G_SOURCE_REMOVE;
75
+ CheckInterruptData *data = user_data;
76
+
77
+ rb_protect(check_interrupt_raw, Qnil, &(data->state));
78
+ if (data->state == 0) {
79
+ return G_SOURCE_CONTINUE;
80
+ } else {
81
+ g_main_loop_quit(data->loop);
82
+ return G_SOURCE_REMOVE;
83
+ }
66
84
  }
67
85
 
68
86
  static VALUE
69
87
  rg_run(VALUE self)
70
88
  {
71
- GMainLoop *loop;
89
+ CheckInterruptData data;
72
90
  GSource *interrupt_source;
73
91
 
74
- loop = _SELF(self);
92
+ data.loop = _SELF(self);
93
+ data.state = 0;
75
94
 
76
95
  interrupt_source = rbg_interrupt_source_new();
77
96
  g_source_set_callback(interrupt_source,
78
- quit_loop,
79
- loop,
97
+ check_interrupt,
98
+ &data,
80
99
  NULL);
81
100
  g_source_attach(interrupt_source,
82
- g_main_loop_get_context(loop));
83
- g_main_loop_run(loop);
101
+ g_main_loop_get_context(data.loop));
102
+ g_main_loop_run(data.loop);
84
103
  g_source_destroy(interrupt_source);
85
104
  g_source_unref(interrupt_source);
86
105
 
87
- rb_thread_check_ints();
106
+ if (data.state == 0) {
107
+ rb_thread_check_ints();
108
+ } else {
109
+ rb_jump_tag(data.state);
110
+ }
88
111
 
89
112
  return self;
90
113
  }
@@ -24,14 +24,6 @@
24
24
 
25
25
  #include "rbgprivate.h"
26
26
 
27
- #ifndef HAVE_RB_SOURCEFILE
28
- #define rb_sourcefile() (ruby_sourcefile)
29
- #endif
30
-
31
- #ifndef HAVE_RB_SOURCELINE
32
- #define rb_sourceline() (ruby_sourceline)
33
- #endif
34
-
35
27
  #define RG_TARGET_NAMESPACE mLog
36
28
 
37
29
  static VALUE rbglib_log_handler_procs;
@@ -56,15 +48,30 @@ logmessage(GLogLevelFlags level)
56
48
  return "UNKNOWN";
57
49
  }
58
50
 
51
+ static VALUE
52
+ rbg_printerr(VALUE message, G_GNUC_UNUSED VALUE user_data)
53
+ {
54
+ g_printerr("\tfrom %.*s\n",
55
+ (int)RSTRING_LEN(message),
56
+ RSTRING_PTR(message));
57
+ return Qnil;
58
+ }
59
+
59
60
  static void
60
61
  rbglib_log_handler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
61
62
  {
62
- if (! log_canceled){
63
- #ifdef HAVE_RUBY_SET_CURRENT_SOURCE
64
- ruby_set_current_source();
65
- #endif
66
- g_printerr("%s: line %d\n", rb_sourcefile(), rb_sourceline());
67
- g_printerr(" %s-%s **:%s\n", log_domain, logmessage(log_level), message);
63
+ if (!log_canceled) {
64
+ g_printerr("%s-%s **: %s\n",
65
+ log_domain, logmessage(log_level), message);
66
+ if (rb_during_gc()) {
67
+ g_printerr("\tfrom %s:%d\n", rb_sourcefile(), rb_sourceline());
68
+ } else {
69
+ VALUE backtrace;
70
+
71
+ backtrace = rb_funcall(rb_mKernel, rb_intern("caller"), 0);
72
+ rb_iterate(rb_each, backtrace,
73
+ rbg_printerr, Qnil);
74
+ }
68
75
  } else {
69
76
  g_log_default_handler(log_domain, log_level, message, user_data);
70
77
  }
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011-2013 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2011-2016 Ruby-GNOME2 Project Team
4
4
  * Copyright (C) 2002-2006 Ruby-GNOME2 Project
5
5
  * Copyright (C) 2002,2003 Masahiro Sakai
6
6
  *
@@ -38,6 +38,7 @@ struct _GRClosure
38
38
  gint count;
39
39
  GList *objects;
40
40
  GValToRValSignalFunc g2r_func;
41
+ RGClosureCallFunc call_func;
41
42
  gchar tag[TAG_SIZE];
42
43
  };
43
44
 
@@ -70,38 +71,51 @@ rclosure_alive_p(GRClosure *rclosure)
70
71
  static VALUE
71
72
  rclosure_marshal_do(VALUE arg_)
72
73
  {
74
+ VALUE ret = Qnil;
73
75
  struct marshal_arg *arg;
74
- GRClosure* rclosure;
75
- GValue* return_value;
76
- guint n_param_values;
77
- const GValue* param_values;
78
- /* gpointer invocation_hint;*/
79
- /* gpointer marshal_data; */
76
+ GRClosure *rclosure;
77
+ GValue *return_value;
80
78
 
81
- VALUE ret = Qnil;
82
- VALUE args;
83
- GValToRValSignalFunc func;
84
-
85
- arg = (struct marshal_arg*)arg_;
86
- rclosure = (GRClosure *)(arg->closure);
87
- return_value = arg->return_value;
88
- n_param_values = arg->n_param_values;
89
- param_values = arg->param_values;
90
- /* invocation_hint = arg->invocation_hint; */
91
- /* marshal_data = arg->marshal_data; */
92
-
93
- if (rclosure->g2r_func){
94
- func = (GValToRValSignalFunc)rclosure->g2r_func;
95
- } else {
96
- func = (GValToRValSignalFunc)rclosure_default_g2r_func;
97
- }
98
- args = (*func)(n_param_values, param_values);
79
+ arg = (struct marshal_arg *)arg_;
80
+ rclosure = (GRClosure *)(arg->closure);
81
+ return_value = arg->return_value;
99
82
 
100
83
  if (rclosure_alive_p(rclosure)) {
101
- VALUE callback, extra_args;
84
+ guint n_param_values;
85
+ const GValue *param_values;
86
+ /* gpointer invocation_hint;*/
87
+ /* gpointer marshal_data; */
88
+ GValToRValSignalFunc g2r_func;
89
+ VALUE callback;
90
+ VALUE extra_args;
91
+ VALUE args;
92
+
93
+ n_param_values = arg->n_param_values;
94
+ param_values = arg->param_values;
95
+ /* invocation_hint = arg->invocation_hint; */
96
+ /* marshal_data = arg->marshal_data; */
97
+
102
98
  callback = rclosure->callback;
103
99
  extra_args = rclosure->extra_args;
104
100
 
101
+ if (rclosure->call_func) {
102
+ RGClosureCallData data;
103
+ data.return_value = return_value;
104
+ data.n_param_values = n_param_values;
105
+ data.param_values = param_values;
106
+ data.callback = callback;
107
+ data.extra_args = extra_args;
108
+ rclosure->call_func(&data);
109
+ return Qnil;
110
+ }
111
+
112
+ if (rclosure->g2r_func) {
113
+ g2r_func = (GValToRValSignalFunc)rclosure->g2r_func;
114
+ } else {
115
+ g2r_func = (GValToRValSignalFunc)rclosure_default_g2r_func;
116
+ }
117
+ args = (*g2r_func)(n_param_values, param_values);
118
+
105
119
  if (!NIL_P(extra_args)) {
106
120
  args = rb_ary_concat(args, extra_args);
107
121
  }
@@ -210,8 +224,11 @@ gr_closure_holder_free(GRClosure *rclosure)
210
224
  }
211
225
  }
212
226
 
213
- GClosure*
214
- g_rclosure_new(VALUE callback_proc, VALUE extra_args, GValToRValSignalFunc g2r_func)
227
+ static GClosure *
228
+ g_rclosure_new_raw(VALUE callback_proc,
229
+ VALUE extra_args,
230
+ GValToRValSignalFunc g2r_func,
231
+ RGClosureCallFunc call_func)
215
232
  {
216
233
  GRClosure* closure;
217
234
 
@@ -219,6 +236,7 @@ g_rclosure_new(VALUE callback_proc, VALUE extra_args, GValToRValSignalFunc g2r_f
219
236
 
220
237
  closure->count = 1;
221
238
  closure->g2r_func = g2r_func;
239
+ closure->call_func = call_func;
222
240
  closure->objects = NULL;
223
241
  closure->callback = callback_proc;
224
242
  closure->extra_args = extra_args;
@@ -235,6 +253,25 @@ g_rclosure_new(VALUE callback_proc, VALUE extra_args, GValToRValSignalFunc g2r_f
235
253
  return (GClosure*)closure;
236
254
  }
237
255
 
256
+ GClosure *
257
+ g_rclosure_new(VALUE callback_proc,
258
+ VALUE extra_args,
259
+ GValToRValSignalFunc g2r_func)
260
+ {
261
+ return g_rclosure_new_raw(callback_proc, extra_args, g2r_func, NULL);
262
+ }
263
+
264
+ GClosure *
265
+ g_rclosure_new_call(VALUE callback_proc,
266
+ VALUE extra_args,
267
+ RGClosureCallFunc call_func)
268
+ {
269
+ return g_rclosure_new_raw(callback_proc,
270
+ extra_args,
271
+ NULL,
272
+ call_func);
273
+ }
274
+
238
275
  static void
239
276
  rclosure_weak_notify(gpointer data, GObject* where_the_object_was)
240
277
  {
@@ -51,6 +51,28 @@ rbgobj_get_signal_func(guint signal_id)
51
51
  return func;
52
52
  }
53
53
 
54
+ static VALUE signal_call_func_table;
55
+
56
+ void
57
+ rbgobj_set_signal_call_func(VALUE klass,
58
+ const gchar *signal_name,
59
+ RGClosureCallFunc func)
60
+ {
61
+ VALUE obj = Data_Wrap_Struct(rb_cData, NULL, NULL, func);
62
+ guint signal_id = g_signal_lookup(signal_name, CLASS2GTYPE(klass));
63
+ rb_hash_aset(signal_call_func_table, UINT2NUM(signal_id), obj);
64
+ }
65
+
66
+ RGClosureCallFunc
67
+ rbgobj_get_signal_call_func(guint signal_id)
68
+ {
69
+ RGClosureCallFunc func = NULL;
70
+ VALUE func_obj = rb_hash_aref(signal_call_func_table, UINT2NUM(signal_id));
71
+ if (!NIL_P(func_obj))
72
+ Data_Get_Struct(func_obj, void, func);
73
+ return func;
74
+ }
75
+
54
76
  /**********************************************************************/
55
77
 
56
78
  static VALUE eNoSignalError;
@@ -321,8 +343,19 @@ gobj_sig_connect_impl(gboolean after, int argc, VALUE *argv, VALUE self)
321
343
  rb_str_new_cstr(normalized_signal_name),
322
344
  rb_block_proc());
323
345
  }
324
- rclosure = g_rclosure_new(func, rest,
325
- rbgobj_get_signal_func(signal_id));
346
+ {
347
+ RGClosureCallFunc call_func;
348
+ call_func = rbgobj_get_signal_call_func(signal_id);
349
+ if (call_func) {
350
+ rclosure = g_rclosure_new_call(func,
351
+ rest,
352
+ call_func);
353
+ } else {
354
+ rclosure = g_rclosure_new(func,
355
+ rest,
356
+ rbgobj_get_signal_func(signal_id));
357
+ }
358
+ }
326
359
  g_rclosure_attach((GClosure *)rclosure, self);
327
360
  g_object = RVAL2GOBJ(self);
328
361
  tag = g_strdup_printf("%s::%s",
@@ -947,6 +980,9 @@ Init_gobject_gsignal(void)
947
980
  signal_func_table = rb_hash_new();
948
981
  rb_global_variable(&signal_func_table);
949
982
 
983
+ signal_call_func_table = rb_hash_new();
984
+ rb_global_variable(&signal_call_func_table);
985
+
950
986
  rbg_define_method(mMetaInterface, "signal_new", gobj_s_signal_new, -1);
951
987
  rbg_define_method(mMetaInterface, "signals", gobj_s_signals, -1);
952
988
  rbg_define_method(mMetaInterface, "signal", gobj_s_signal, 1);