glib2 3.0.9 → 3.1.0
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 +4 -4
- data/Rakefile +2 -2
- data/ext/glib2/extconf.rb +0 -3
- data/ext/glib2/glib2.def +3 -0
- data/ext/glib2/rbglib.c +52 -20
- data/ext/glib2/rbglib.h +2 -2
- data/ext/glib2/rbglib_iochannel.c +1 -1
- data/ext/glib2/rbglib_mainloop.c +34 -11
- data/ext/glib2/rbglib_messages.c +21 -14
- data/ext/glib2/rbgobj_closure.c +65 -28
- data/ext/glib2/rbgobj_signal.c +38 -2
- data/ext/glib2/rbgobject.h +16 -0
- data/ext/glib2/rbgutil.c +6 -6
- data/lib/glib2.rb +8 -3
- data/lib/gnome2/rake/external-package.rb +24 -0
- data/lib/gnome2/rake/windows-binary-build-task.rb +339 -338
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 398786c497340ba507311f59d7abe62b6d157cf6
|
4
|
+
data.tar.gz: 9dbcf93fe4255b9e3b9d87d53d75356a42b8a691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
171
|
+
:version => "2.50.0",
|
172
172
|
:compression_method => "xz",
|
173
173
|
:windows => {
|
174
174
|
:configure_args => [
|
data/ext/glib2/extconf.rb
CHANGED
@@ -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)
|
data/ext/glib2/glib2.def
CHANGED
@@ -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
|
data/ext/glib2/rbglib.c
CHANGED
@@ -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
|
-
|
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
|
-
|
865
|
-
} else {
|
863
|
+
if (!NIL_P(options)) {
|
864
|
+
VALUE original_options = options;
|
866
865
|
options = rbg_check_hash_type(options);
|
867
|
-
if (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
|
881
|
-
value = va_arg(args, VALUE *);
|
879
|
+
VALUE *value;
|
882
880
|
|
883
|
-
|
884
|
-
|
885
|
-
|
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 (
|
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
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
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
|
data/ext/glib2/rbglib.h
CHANGED
@@ -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
|
45
|
+
rb_raise(rb_eRuntimeError, "An error occurred. status = %d\n", status);
|
46
46
|
}
|
47
47
|
}
|
48
48
|
|
data/ext/glib2/rbglib_mainloop.c
CHANGED
@@ -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
|
-
|
73
|
+
check_interrupt(gpointer user_data)
|
62
74
|
{
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
-
|
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
|
-
|
79
|
-
|
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
|
-
|
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
|
}
|
data/ext/glib2/rbglib_messages.c
CHANGED
@@ -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 (!
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
}
|
data/ext/glib2/rbgobj_closure.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011-
|
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*
|
75
|
-
GValue*
|
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
|
-
|
82
|
-
|
83
|
-
|
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
|
-
|
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
|
-
|
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
|
{
|
data/ext/glib2/rbgobj_signal.c
CHANGED
@@ -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
|
-
|
325
|
-
|
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);
|