glib2 3.4.9 → 4.0.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/ext/glib2/extconf.rb +4 -3
- data/ext/glib2/glib2.def +5 -0
- data/ext/glib2/rbglib-bytes.c +1 -1
- data/ext/glib2/rbglib-gc.c +1 -1
- data/ext/glib2/rbglib-variant-type.c +1 -1
- data/ext/glib2/rbglib-variant.c +79 -5
- data/ext/glib2/rbglib.c +30 -1
- data/ext/glib2/rbglib.h +17 -4
- data/ext/glib2/rbglib_bookmarkfile.c +3 -2
- data/ext/glib2/rbglib_convert.c +2 -2
- data/ext/glib2/rbglib_datetime.c +14 -3
- data/ext/glib2/rbglib_error.c +26 -18
- data/ext/glib2/rbglib_fileutils.c +2 -2
- data/ext/glib2/rbglib_gettext.c +1 -1
- data/ext/glib2/rbglib_i18n.c +2 -2
- data/ext/glib2/rbglib_io_constants.c +1 -1
- data/ext/glib2/rbglib_iochannel.c +2 -2
- data/ext/glib2/rbglib_iochannel_win32_socket.c +2 -2
- data/ext/glib2/rbglib_iochannelerror.c +1 -1
- data/ext/glib2/rbglib_keyfile.c +2 -2
- data/ext/glib2/rbglib_maincontext.c +6 -6
- data/ext/glib2/rbglib_mainloop.c +1 -1
- data/ext/glib2/rbglib_matchinfo.c +1 -1
- data/ext/glib2/rbglib_messages.c +1 -1
- data/ext/glib2/rbglib_pollfd.c +1 -1
- data/ext/glib2/rbglib_regex.c +3 -3
- data/ext/glib2/rbglib_shell.c +1 -1
- data/ext/glib2/rbglib_shellerror.c +1 -1
- data/ext/glib2/rbglib_source.c +1 -1
- data/ext/glib2/rbglib_spawn.c +1 -1
- data/ext/glib2/rbglib_spawnerror.c +1 -1
- data/ext/glib2/rbglib_threads.c +1 -1
- data/ext/glib2/rbglib_timer.c +1 -1
- data/ext/glib2/rbglib_timezone.c +1 -1
- data/ext/glib2/rbglib_ucs4.c +1 -1
- data/ext/glib2/rbglib_unichar.c +1 -1
- data/ext/glib2/rbglib_unicode.c +3 -3
- data/ext/glib2/rbglib_utf16.c +1 -1
- data/ext/glib2/rbglib_utf8.c +1 -1
- data/ext/glib2/rbglib_utils.c +1 -1
- data/ext/glib2/rbglib_win32.c +3 -3
- data/ext/glib2/rbgobj_binding.c +1 -1
- data/ext/glib2/rbgobj_boxed.c +2 -2
- data/ext/glib2/rbgobj_closure.c +55 -85
- data/ext/glib2/rbgobj_enums.c +4 -3
- data/ext/glib2/rbgobj_flags.c +2 -2
- data/ext/glib2/rbgobj_object.c +33 -6
- data/ext/glib2/rbgobj_param.c +2 -2
- data/ext/glib2/rbgobj_signal.c +37 -19
- data/ext/glib2/rbgobj_type.c +3 -2
- data/ext/glib2/rbgobj_typeinstance.c +1 -1
- data/ext/glib2/rbgobj_typeinterface.c +4 -4
- data/ext/glib2/rbgobj_typemodule.c +1 -1
- data/ext/glib2/rbgobj_typeplugin.c +1 -1
- data/ext/glib2/rbgobj_value.c +21 -2
- data/ext/glib2/rbgobj_valuetypes.c +14 -4
- data/ext/glib2/rbgobject.c +7 -21
- data/ext/glib2/rbgobject.h +1 -0
- data/ext/glib2/rbgprivate.h +11 -4
- data/ext/glib2/rbgutil.c +20 -1
- data/ext/glib2/rbgutil.h +6 -2
- data/ext/glib2/rbgutil_callback.c +14 -8
- data/lib/glib2/date-time.rb +35 -0
- data/lib/glib2/variant.rb +25 -0
- data/lib/glib2.rb +29 -2
- data/lib/mkmf-gnome.rb +5 -4
- data/test/glib-test-utils.rb +6 -2
- data/test/test-date-time.rb +14 -2
- data/test/test-glib2.rb +21 -9
- data/test/test-spawn.rb +3 -1
- data/test/test-variant.rb +44 -1
- metadata +8 -8
- data/ext/glib2/glib-enum-types.c +0 -1233
- data/ext/glib2/glib-enum-types.h +0 -154
data/ext/glib2/rbglib_messages.c
CHANGED
@@ -129,7 +129,7 @@ rg_s_log(G_GNUC_UNUSED VALUE self, VALUE domain, VALUE level, VALUE str)
|
|
129
129
|
void
|
130
130
|
Init_glib_messages(void)
|
131
131
|
{
|
132
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
132
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "Log");
|
133
133
|
|
134
134
|
log_canceled = FALSE;
|
135
135
|
|
data/ext/glib2/rbglib_pollfd.c
CHANGED
data/ext/glib2/rbglib_regex.c
CHANGED
@@ -459,7 +459,7 @@ rg_s_have_reference_p(G_GNUC_UNUSED VALUE self, VALUE rb_replacement)
|
|
459
459
|
void
|
460
460
|
Init_glib_regex(void)
|
461
461
|
{
|
462
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_REGEX, "Regex",
|
462
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_REGEX, "Regex", rbg_mGLib());
|
463
463
|
|
464
464
|
RG_DEF_METHOD(initialize, -1);
|
465
465
|
RG_DEF_METHOD(pattern, 0);
|
@@ -479,6 +479,6 @@ Init_glib_regex(void)
|
|
479
479
|
RG_DEF_SMETHOD(check_replacement, 1);
|
480
480
|
RG_DEF_SMETHOD_P(have_reference, 1);
|
481
481
|
|
482
|
-
G_DEF_CLASS(G_TYPE_REGEX_MATCH_FLAGS, "RegexMatchFlags",
|
483
|
-
G_DEF_CLASS(G_TYPE_REGEX_COMPILE_FLAGS, "RegexCompileFlags",
|
482
|
+
G_DEF_CLASS(G_TYPE_REGEX_MATCH_FLAGS, "RegexMatchFlags", rbg_mGLib());
|
483
|
+
G_DEF_CLASS(G_TYPE_REGEX_COMPILE_FLAGS, "RegexCompileFlags", rbg_mGLib());
|
484
484
|
}
|
data/ext/glib2/rbglib_shell.c
CHANGED
@@ -56,7 +56,7 @@ rg_s_unquote(G_GNUC_UNUSED VALUE self, VALUE quoted_string)
|
|
56
56
|
void
|
57
57
|
Init_glib_shell(void)
|
58
58
|
{
|
59
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
59
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "Shell");
|
60
60
|
|
61
61
|
RG_DEF_SMETHOD(parse, 1);
|
62
62
|
RG_DEF_SMETHOD(quote, 1);
|
@@ -26,7 +26,7 @@
|
|
26
26
|
void
|
27
27
|
Init_glib_shellerror(void)
|
28
28
|
{
|
29
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_ERROR2(G_SHELL_ERROR, "ShellError",
|
29
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_ERROR2(G_SHELL_ERROR, "ShellError", rbg_mGLib(), rb_eRuntimeError);
|
30
30
|
|
31
31
|
rb_define_const(RG_TARGET_NAMESPACE, "BAD_QUOTING", INT2FIX(G_SHELL_ERROR_BAD_QUOTING));
|
32
32
|
rb_define_const(RG_TARGET_NAMESPACE, "EMPTY_STRING", INT2FIX(G_SHELL_ERROR_EMPTY_STRING));
|
data/ext/glib2/rbglib_source.c
CHANGED
@@ -177,7 +177,7 @@ gboolean g_source_remove_by_user_data (gpointer user_data);
|
|
177
177
|
void
|
178
178
|
Init_glib_source(void)
|
179
179
|
{
|
180
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_SOURCE, "Source",
|
180
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_SOURCE, "Source", rbg_mGLib());
|
181
181
|
|
182
182
|
id_call = rb_intern("call");
|
183
183
|
|
data/ext/glib2/rbglib_spawn.c
CHANGED
@@ -217,7 +217,7 @@ rg_s_close_pid(G_GNUC_UNUSED VALUE self, VALUE pid)
|
|
217
217
|
void
|
218
218
|
Init_glib_spawn(void)
|
219
219
|
{
|
220
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
220
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "Spawn");
|
221
221
|
|
222
222
|
id_call = rb_intern("call");
|
223
223
|
id_new = rb_intern("new");
|
@@ -28,7 +28,7 @@
|
|
28
28
|
void
|
29
29
|
Init_glib_spawnerror(void)
|
30
30
|
{
|
31
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_ERROR2(G_SPAWN_ERROR, "SpawnError",
|
31
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_ERROR2(G_SPAWN_ERROR, "SpawnError", rbg_mGLib(), rb_eIOError);
|
32
32
|
|
33
33
|
rb_define_const(RG_TARGET_NAMESPACE, "FORK", INT2NUM(G_SPAWN_ERROR_FORK));
|
34
34
|
rb_define_const(RG_TARGET_NAMESPACE, "READ", INT2NUM(G_SPAWN_ERROR_READ));
|
data/ext/glib2/rbglib_threads.c
CHANGED
@@ -41,7 +41,7 @@ rg_s_supported_p(G_GNUC_UNUSED VALUE self)
|
|
41
41
|
void
|
42
42
|
Init_glib_threads(void)
|
43
43
|
{
|
44
|
-
RG_TARGET_NAMESPACE = rb_define_class_under(
|
44
|
+
RG_TARGET_NAMESPACE = rb_define_class_under(rbg_mGLib(), "Thread", rb_cObject);
|
45
45
|
|
46
46
|
RG_DEF_SMETHOD(init, 0);
|
47
47
|
RG_DEF_SMETHOD_P(supported, 0);
|
data/ext/glib2/rbglib_timer.c
CHANGED
@@ -116,7 +116,7 @@ rg_reset(VALUE self)
|
|
116
116
|
void
|
117
117
|
Init_glib_timer(void)
|
118
118
|
{
|
119
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_TIMER, "Timer",
|
119
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_TIMER, "Timer", rbg_mGLib());
|
120
120
|
|
121
121
|
RG_DEF_METHOD(initialize, 0);
|
122
122
|
RG_DEF_METHOD(start, 0);
|
data/ext/glib2/rbglib_timezone.c
CHANGED
@@ -73,7 +73,7 @@ void
|
|
73
73
|
Init_glib_time_zone(void)
|
74
74
|
{
|
75
75
|
VALUE RG_TARGET_NAMESPACE;
|
76
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_TIME_ZONE, "TimeZone",
|
76
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_TIME_ZONE, "TimeZone", rbg_mGLib());
|
77
77
|
RG_DEF_METHOD(initialize, -1);
|
78
78
|
RG_DEF_SMETHOD(local, 0);
|
79
79
|
RG_DEF_SMETHOD(utc, 0);
|
data/ext/glib2/rbglib_ucs4.c
CHANGED
@@ -72,7 +72,7 @@ rg_s_to_utf8(G_GNUC_UNUSED VALUE self, VALUE rb_ucs4)
|
|
72
72
|
void
|
73
73
|
Init_glib_ucs4(void)
|
74
74
|
{
|
75
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
75
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "UCS4");
|
76
76
|
|
77
77
|
RG_DEF_SMETHOD(to_utf16, 1);
|
78
78
|
RG_DEF_SMETHOD(to_utf8, 1);
|
data/ext/glib2/rbglib_unichar.c
CHANGED
@@ -185,7 +185,7 @@ rg_s_decompose(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
|
|
185
185
|
void
|
186
186
|
Init_glib_unichar(void)
|
187
187
|
{
|
188
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
188
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "UniChar");
|
189
189
|
|
190
190
|
rbg_define_singleton_method(RG_TARGET_NAMESPACE, "alnum?",
|
191
191
|
rbglib_m_unichar_isalnum, 1);
|
data/ext/glib2/rbglib_unicode.c
CHANGED
@@ -52,7 +52,7 @@ rg_s_canonical_ordering(G_GNUC_UNUSED VALUE self, VALUE rb_ucs4)
|
|
52
52
|
void
|
53
53
|
Init_glib_unicode(void)
|
54
54
|
{
|
55
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
55
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "Unicode");
|
56
56
|
|
57
57
|
/* GUnicodeType */
|
58
58
|
G_DEF_CLASS(G_TYPE_UNICODE_TYPE, "Type", RG_TARGET_NAMESPACE);
|
@@ -65,9 +65,9 @@ Init_glib_unicode(void)
|
|
65
65
|
G_DEF_CLASS(G_TYPE_UNICODE_SCRIPT, "Script", RG_TARGET_NAMESPACE);
|
66
66
|
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_UNICODE_SCRIPT, "G_UNICODE_");
|
67
67
|
|
68
|
-
G_DEF_CLASS(G_TYPE_NORMALIZE_MODE, "NormalizeMode",
|
68
|
+
G_DEF_CLASS(G_TYPE_NORMALIZE_MODE, "NormalizeMode", rbg_mGLib());
|
69
69
|
|
70
|
-
rbg_define_singleton_method(
|
70
|
+
rbg_define_singleton_method(rbg_mGLib(), "charset", rbglib_m_charset, 0);
|
71
71
|
|
72
72
|
RG_DEF_SMETHOD(canonical_ordering, 1);
|
73
73
|
}
|
data/ext/glib2/rbglib_utf16.c
CHANGED
@@ -71,7 +71,7 @@ rg_s_to_utf8(G_GNUC_UNUSED VALUE self, VALUE rb_utf16)
|
|
71
71
|
void
|
72
72
|
Init_glib_utf16(void)
|
73
73
|
{
|
74
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
74
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "UTF16");
|
75
75
|
|
76
76
|
RG_DEF_SMETHOD(to_ucs4, 1);
|
77
77
|
RG_DEF_SMETHOD(to_utf8, 1);
|
data/ext/glib2/rbglib_utf8.c
CHANGED
@@ -218,7 +218,7 @@ rg_s_to_ucs4(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
|
|
218
218
|
void
|
219
219
|
Init_glib_utf8(void)
|
220
220
|
{
|
221
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
221
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "UTF8");
|
222
222
|
|
223
223
|
/*
|
224
224
|
Not implemented.
|
data/ext/glib2/rbglib_utils.c
CHANGED
data/ext/glib2/rbglib_win32.c
CHANGED
@@ -90,17 +90,17 @@ Init_glib_win32(void)
|
|
90
90
|
{
|
91
91
|
#ifdef G_OS_WIN32
|
92
92
|
/* glib/gwin32.h */
|
93
|
-
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(
|
93
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "Win32");
|
94
94
|
|
95
95
|
RG_DEF_SMETHOD(error_message, 1);
|
96
96
|
RG_DEF_SMETHOD(locale, 0);
|
97
97
|
RG_DEF_SMETHOD(version, 0);
|
98
98
|
/* Deprecated */
|
99
|
-
rbg_define_singleton_method(
|
99
|
+
rbg_define_singleton_method(rbg_mGLib(), "win32_locale", rbglib_m_win32_locale_deprecated, 0);
|
100
100
|
|
101
101
|
RG_DEF_SMETHOD(locale_filename_from_utf8, 1);
|
102
102
|
/* Deprecated */
|
103
|
-
rbg_define_singleton_method(
|
103
|
+
rbg_define_singleton_method(rbg_mGLib(), "win32_locale_filename_from_utf8",
|
104
104
|
rbglib_m_win32_locale_filename_from_utf8_deprecated, 1);
|
105
105
|
|
106
106
|
RG_DEF_SMETHOD(get_package_installation_directory_of_module, -1);
|
data/ext/glib2/rbgobj_binding.c
CHANGED
data/ext/glib2/rbgobj_boxed.c
CHANGED
@@ -60,7 +60,7 @@ static const rb_data_type_t rg_glib_boxed_type = {
|
|
60
60
|
},
|
61
61
|
NULL,
|
62
62
|
NULL,
|
63
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
63
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
64
64
|
};
|
65
65
|
|
66
66
|
static boxed_holder *
|
@@ -302,7 +302,7 @@ boxed_from_ruby(VALUE from, GValue *to)
|
|
302
302
|
void
|
303
303
|
Init_gobject_gboxed(void)
|
304
304
|
{
|
305
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_BOXED, "Boxed",
|
305
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_BOXED, "Boxed", rbg_mGLib());
|
306
306
|
|
307
307
|
rbgobj_register_g2r_func(G_TYPE_BOXED, boxed_to_ruby);
|
308
308
|
rbgobj_register_r2g_func(G_TYPE_BOXED, boxed_from_ruby);
|
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) 2002-
|
3
|
+
* Copyright (C) 2002-2022 Ruby-GNOME Project Team
|
4
4
|
* Copyright (C) 2002,2003 Masahiro Sakai
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
@@ -34,7 +34,6 @@ struct _GRClosure
|
|
34
34
|
VALUE callback;
|
35
35
|
VALUE extra_args;
|
36
36
|
VALUE rb_holder;
|
37
|
-
gint count;
|
38
37
|
GList *objects;
|
39
38
|
GValToRValSignalFunc g2r_func;
|
40
39
|
RGClosureCallFunc call_func;
|
@@ -64,7 +63,7 @@ struct marshal_arg
|
|
64
63
|
static int
|
65
64
|
rclosure_alive_p(GRClosure *rclosure)
|
66
65
|
{
|
67
|
-
return
|
66
|
+
return !NIL_P(rclosure->rb_holder);
|
68
67
|
}
|
69
68
|
|
70
69
|
static VALUE
|
@@ -121,8 +120,8 @@ rclosure_marshal_do(VALUE arg_)
|
|
121
120
|
|
122
121
|
ret = rb_apply(callback, id_call, args);
|
123
122
|
} else {
|
124
|
-
|
125
|
-
|
123
|
+
g_warning("GRClosure invoking callback: already destroyed: %s",
|
124
|
+
rclosure->tag[0] ? rclosure->tag : "(anonymous)");
|
126
125
|
}
|
127
126
|
|
128
127
|
if (return_value && G_VALUE_TYPE(return_value))
|
@@ -159,43 +158,25 @@ rclosure_marshal(GClosure* closure,
|
|
159
158
|
static void rclosure_weak_notify(gpointer data, GObject* where_the_object_was);
|
160
159
|
|
161
160
|
static void
|
162
|
-
|
161
|
+
rclosure_finalize(G_GNUC_UNUSED gpointer data, GClosure *closure)
|
163
162
|
{
|
164
|
-
rclosure
|
163
|
+
GRClosure *rclosure = (GRClosure *)closure;
|
165
164
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
rclosure->objects = NULL;
|
174
|
-
if (!NIL_P(rclosure->rb_holder)) {
|
175
|
-
RTYPEDDATA_DATA(rclosure->rb_holder) = NULL;
|
176
|
-
rclosure->rb_holder = Qnil;
|
165
|
+
GList *next;
|
166
|
+
for (next = rclosure->objects; next; next = next->next) {
|
167
|
+
GObject *object = G_OBJECT(next->data);
|
168
|
+
g_object_weak_unref(object, rclosure_weak_notify, rclosure);
|
169
|
+
VALUE obj = rbgobj_ruby_object_from_instance2(object, FALSE);
|
170
|
+
if (!NIL_P(rclosure->rb_holder) && !NIL_P(obj)) {
|
171
|
+
rbgobj_object_remove_relative(obj, rclosure->rb_holder);
|
177
172
|
}
|
178
173
|
}
|
179
|
-
|
180
|
-
|
181
|
-
static void
|
182
|
-
rclosure_invalidate(G_GNUC_UNUSED gpointer data, GClosure *closure)
|
183
|
-
{
|
184
|
-
GRClosure *rclosure = (GRClosure*)closure;
|
185
|
-
|
186
|
-
if (rclosure->count > 0) {
|
187
|
-
GList *next;
|
188
|
-
|
189
|
-
rclosure->count = 1;
|
190
|
-
for (next = rclosure->objects; next; next = next->next) {
|
191
|
-
GObject *object = G_OBJECT(next->data);
|
192
|
-
VALUE obj = rbgobj_ruby_object_from_instance2(object, FALSE);
|
193
|
-
if (!NIL_P(rclosure->rb_holder) && !NIL_P(obj)) {
|
194
|
-
rbgobj_object_remove_relative(obj, rclosure->rb_holder);
|
195
|
-
}
|
196
|
-
}
|
174
|
+
g_list_free(rclosure->objects);
|
175
|
+
rclosure->objects = NULL;
|
197
176
|
|
198
|
-
|
177
|
+
if (!NIL_P(rclosure->rb_holder)) {
|
178
|
+
RTYPEDDATA_DATA(rclosure->rb_holder) = NULL;
|
179
|
+
rclosure->rb_holder = Qnil;
|
199
180
|
}
|
200
181
|
}
|
201
182
|
|
@@ -219,13 +200,7 @@ gr_closure_holder_free(void *data)
|
|
219
200
|
if (!rclosure)
|
220
201
|
return;
|
221
202
|
|
222
|
-
|
223
|
-
rclosure->count = 1;
|
224
|
-
|
225
|
-
/* No need to remove us from the relatives hash of our objects, as
|
226
|
-
* those aren't alive anymore anyway */
|
227
|
-
rclosure_unref(rclosure);
|
228
|
-
}
|
203
|
+
g_closure_unref((GClosure *)rclosure);
|
229
204
|
}
|
230
205
|
|
231
206
|
static const rb_data_type_t rbg_closure_holder_type = {
|
@@ -236,7 +211,7 @@ static const rb_data_type_t rbg_closure_holder_type = {
|
|
236
211
|
},
|
237
212
|
NULL,
|
238
213
|
NULL,
|
239
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
214
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
240
215
|
};
|
241
216
|
|
242
217
|
static GClosure *
|
@@ -245,26 +220,24 @@ g_rclosure_new_raw(VALUE callback_proc,
|
|
245
220
|
GValToRValSignalFunc g2r_func,
|
246
221
|
RGClosureCallFunc call_func)
|
247
222
|
{
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
return (GClosure*)closure;
|
223
|
+
GClosure *closure = g_closure_new_simple(sizeof(GRClosure), NULL);
|
224
|
+
|
225
|
+
GRClosure *rclosure = (GRClosure *)closure;
|
226
|
+
|
227
|
+
rclosure->g2r_func = g2r_func;
|
228
|
+
rclosure->call_func = call_func;
|
229
|
+
rclosure->objects = NULL;
|
230
|
+
rclosure->callback = callback_proc;
|
231
|
+
rclosure->extra_args = extra_args;
|
232
|
+
rclosure->rb_holder = TypedData_Wrap_Struct(rb_cObject,
|
233
|
+
&rbg_closure_holder_type,
|
234
|
+
rclosure);
|
235
|
+
rclosure->tag[0] = '\0';
|
236
|
+
|
237
|
+
g_closure_set_marshal(closure, &rclosure_marshal);
|
238
|
+
g_closure_add_finalize_notifier(closure, NULL, rclosure_finalize);
|
239
|
+
|
240
|
+
return closure;
|
268
241
|
}
|
269
242
|
|
270
243
|
GClosure *
|
@@ -287,34 +260,30 @@ g_rclosure_new_call(VALUE callback_proc,
|
|
287
260
|
}
|
288
261
|
|
289
262
|
static void
|
290
|
-
rclosure_weak_notify(gpointer data, GObject*
|
263
|
+
rclosure_weak_notify(gpointer data, GObject *where_the_object_was)
|
291
264
|
{
|
292
265
|
GRClosure *rclosure = data;
|
293
|
-
|
294
|
-
|
295
|
-
g_list_remove(rclosure->objects, where_the_object_was);
|
296
|
-
rclosure_unref(rclosure);
|
297
|
-
}
|
266
|
+
rclosure->objects = g_list_remove(rclosure->objects, where_the_object_was);
|
267
|
+
g_closure_unref((GClosure *)rclosure);
|
298
268
|
}
|
299
269
|
|
300
270
|
void
|
301
271
|
g_rclosure_attach(GClosure *closure, VALUE object)
|
302
272
|
{
|
303
|
-
static VALUE cGLibObject = Qnil;
|
304
273
|
GRClosure *rclosure = (GRClosure *)closure;
|
305
|
-
|
306
274
|
rbgobj_add_relative(object, rclosure->rb_holder);
|
275
|
+
}
|
307
276
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
277
|
+
void
|
278
|
+
g_rclosure_attach_gobject(GClosure *closure, VALUE object)
|
279
|
+
{
|
280
|
+
GRClosure *rclosure = (GRClosure *)closure;
|
281
|
+
g_rclosure_attach(closure, object);
|
282
|
+
|
283
|
+
GObject *gobject = RVAL2GOBJ(object);
|
284
|
+
g_closure_ref(closure);
|
285
|
+
g_object_weak_ref(gobject, rclosure_weak_notify, rclosure);
|
286
|
+
rclosure->objects = g_list_prepend(rclosure->objects, gobject);
|
318
287
|
}
|
319
288
|
|
320
289
|
void
|
@@ -350,8 +319,9 @@ init_rclosure(void)
|
|
350
319
|
static VALUE
|
351
320
|
rg_initialize(VALUE self)
|
352
321
|
{
|
353
|
-
GClosure*
|
322
|
+
GClosure *closure = g_rclosure_new(rb_block_proc(), Qnil, NULL);
|
354
323
|
G_INITIALIZE(self, closure);
|
324
|
+
g_closure_ref(closure);
|
355
325
|
g_closure_sink(closure);
|
356
326
|
return self;
|
357
327
|
}
|
@@ -387,7 +357,7 @@ Init_gobject_gclosure(void)
|
|
387
357
|
|
388
358
|
init_rclosure();
|
389
359
|
|
390
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_CLOSURE, "Closure",
|
360
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_CLOSURE, "Closure", rbg_mGLib());
|
391
361
|
|
392
362
|
RG_DEF_METHOD(initialize, 0);
|
393
363
|
RG_DEF_METHOD_P(in_marshal, 0);
|
data/ext/glib2/rbgobj_enums.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-2021 Ruby-GNOME Project Team
|
4
4
|
* Copyright (C) 2004-2006 Ruby-GNOME Project Team
|
5
5
|
* Copyright (C) 2002,2003 Masahiro Sakai
|
6
6
|
*
|
@@ -114,7 +114,7 @@ static const rb_data_type_t rg_glib_enum_type = {
|
|
114
114
|
},
|
115
115
|
NULL,
|
116
116
|
NULL,
|
117
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
117
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
118
118
|
};
|
119
119
|
|
120
120
|
static enum_holder *
|
@@ -191,6 +191,7 @@ rbgobj_init_enum_class(VALUE klass)
|
|
191
191
|
|
192
192
|
rb_raw_enum_value = INT2NUM(entry->value);
|
193
193
|
value = rb_funcall(klass, id_new, 1, rb_raw_enum_value);
|
194
|
+
rb_obj_freeze(value);
|
194
195
|
rb_hash_aset(values, rb_raw_enum_value, value);
|
195
196
|
const_nick_name = nick_to_const_name(entry->value_nick);
|
196
197
|
if (const_nick_name) {
|
@@ -412,7 +413,7 @@ Init_gobject_genums(void)
|
|
412
413
|
id_to_s = rb_intern("to_s");
|
413
414
|
id_values = rb_intern("values");
|
414
415
|
|
415
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_ENUM, "Enum",
|
416
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_ENUM, "Enum", rbg_mGLib());
|
416
417
|
|
417
418
|
rbg_define_singleton_method(RG_TARGET_NAMESPACE, "gtype", generic_s_gtype, 0);
|
418
419
|
rbg_define_method(RG_TARGET_NAMESPACE, "gtype", generic_gtype, 0);
|
data/ext/glib2/rbgobj_flags.c
CHANGED
@@ -83,7 +83,7 @@ static const rb_data_type_t rg_glib_flags_type = {
|
|
83
83
|
},
|
84
84
|
NULL,
|
85
85
|
NULL,
|
86
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
86
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
87
87
|
};
|
88
88
|
|
89
89
|
static flags_holder*
|
@@ -542,7 +542,7 @@ Init_gobject_gflags(void)
|
|
542
542
|
id_or = rb_intern("|");
|
543
543
|
id_to_i = rb_intern("to_i");
|
544
544
|
|
545
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_FLAGS, "Flags",
|
545
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_FLAGS, "Flags", rbg_mGLib());
|
546
546
|
|
547
547
|
rbg_define_singleton_method(RG_TARGET_NAMESPACE, "gtype", generic_s_gtype, 0);
|
548
548
|
rbg_define_method(RG_TARGET_NAMESPACE, "gtype", generic_gtype, 0);
|
data/ext/glib2/rbgobj_object.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2002-
|
3
|
+
* Copyright (C) 2002-2022 Ruby-GNOME Project Team
|
4
4
|
* Copyright (C) 2002-2003 Masahiro Sakai
|
5
5
|
* Copyright (C) 1998-2000 Yukihiro Matsumoto,
|
6
6
|
* Daisuke Kanda,
|
@@ -30,6 +30,12 @@ VALUE RG_TARGET_NAMESPACE;
|
|
30
30
|
static VALUE eNoPropertyError;
|
31
31
|
static GQuark RUBY_GOBJECT_OBJ_KEY;
|
32
32
|
|
33
|
+
VALUE
|
34
|
+
rbg_cGLibObject(void)
|
35
|
+
{
|
36
|
+
return RG_TARGET_NAMESPACE;
|
37
|
+
}
|
38
|
+
|
33
39
|
gboolean
|
34
40
|
rbg_is_object(VALUE object)
|
35
41
|
{
|
@@ -108,7 +114,7 @@ static const rb_data_type_t rg_glib_object_type = {
|
|
108
114
|
},
|
109
115
|
NULL,
|
110
116
|
NULL,
|
111
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
117
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
112
118
|
};
|
113
119
|
|
114
120
|
void
|
@@ -311,6 +317,12 @@ rg_s_new_bang(int argc, VALUE *argv, VALUE self)
|
|
311
317
|
return result;
|
312
318
|
}
|
313
319
|
|
320
|
+
static VALUE
|
321
|
+
rg_s_init(int argc, VALUE *argv, VALUE self)
|
322
|
+
{
|
323
|
+
return RUBY_Qnil;
|
324
|
+
}
|
325
|
+
|
314
326
|
struct param_setup_arg {
|
315
327
|
GObjectClass* gclass;
|
316
328
|
GParameter* params;
|
@@ -872,6 +884,15 @@ rg_initialize(int argc, VALUE *argv, VALUE self)
|
|
872
884
|
gobj = rbgobj_gobject_new(RVAL2GTYPE(self), params_hash);
|
873
885
|
|
874
886
|
G_INITIALIZE(self, gobj);
|
887
|
+
|
888
|
+
rb_funcall(self, rb_intern("initialize_post"), 0);
|
889
|
+
|
890
|
+
return Qnil;
|
891
|
+
}
|
892
|
+
|
893
|
+
static VALUE
|
894
|
+
rg_initialize_post(VALUE self)
|
895
|
+
{
|
875
896
|
return Qnil;
|
876
897
|
}
|
877
898
|
|
@@ -956,6 +977,9 @@ rbgobj_class_init_func(gpointer g_class, G_GNUC_UNUSED gpointer class_data)
|
|
956
977
|
|
957
978
|
g_object_class->set_property = set_prop_func;
|
958
979
|
g_object_class->get_property = get_prop_func;
|
980
|
+
|
981
|
+
VALUE rb_class = GTYPE2CLASS(G_TYPE_FROM_CLASS(g_class));
|
982
|
+
rb_funcall(rb_class, rb_intern("init"), 0);
|
959
983
|
}
|
960
984
|
|
961
985
|
void
|
@@ -1062,11 +1086,11 @@ rg_s_type_register(int argc, VALUE *argv, VALUE self)
|
|
1062
1086
|
void
|
1063
1087
|
Init_gobject_gobject(void)
|
1064
1088
|
{
|
1065
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS_WITH_GC_FUNC(G_TYPE_OBJECT, "Object",
|
1089
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS_WITH_GC_FUNC(G_TYPE_OBJECT, "Object", rbg_mGLib(),
|
1066
1090
|
gobj_mark, NULL);
|
1067
1091
|
|
1068
1092
|
#ifdef G_TYPE_INITIALLY_UNOWNED
|
1069
|
-
G_DEF_CLASS(G_TYPE_INITIALLY_UNOWNED, "InitiallyUnowned",
|
1093
|
+
G_DEF_CLASS(G_TYPE_INITIALLY_UNOWNED, "InitiallyUnowned", rbg_mGLib());
|
1070
1094
|
#endif
|
1071
1095
|
|
1072
1096
|
RUBY_GOBJECT_OBJ_KEY = g_quark_from_static_string("__ruby_gobject_object__");
|
@@ -1074,6 +1098,8 @@ Init_gobject_gobject(void)
|
|
1074
1098
|
rb_define_alloc_func(RG_TARGET_NAMESPACE, rbgobj_object_alloc_func);
|
1075
1099
|
RG_DEF_SMETHOD_BANG(new, -1);
|
1076
1100
|
|
1101
|
+
RG_DEF_SMETHOD(init, 0);
|
1102
|
+
|
1077
1103
|
rbg_define_singleton_method(RG_TARGET_NAMESPACE, "property", &gobj_s_property, 1);
|
1078
1104
|
rbg_define_singleton_method(RG_TARGET_NAMESPACE, "properties", &gobj_s_properties, -1);
|
1079
1105
|
RG_DEF_SMETHOD(install_property, -1);
|
@@ -1089,6 +1115,7 @@ Init_gobject_gobject(void)
|
|
1089
1115
|
RG_DEF_METHOD_P(destroyed, 0);
|
1090
1116
|
|
1091
1117
|
RG_DEF_METHOD(initialize, -1);
|
1118
|
+
RG_DEF_PRIVATE_METHOD(initialize_post, 0);
|
1092
1119
|
rbg_define_method(RG_TARGET_NAMESPACE, "ref_count", gobj_ref_count, 0); /* for debugging */
|
1093
1120
|
RG_DEF_METHOD_P(floating, 0); /* for debugging */
|
1094
1121
|
RG_DEF_METHOD(unref, 0);
|
@@ -1096,9 +1123,9 @@ Init_gobject_gobject(void)
|
|
1096
1123
|
RG_DEF_METHOD(type_name, 0);
|
1097
1124
|
|
1098
1125
|
RG_DEF_METHOD(bind_property, -1);
|
1099
|
-
G_DEF_CLASS(G_TYPE_BINDING_FLAGS, "BindingFlags",
|
1126
|
+
G_DEF_CLASS(G_TYPE_BINDING_FLAGS, "BindingFlags", rbg_mGLib());
|
1100
1127
|
|
1101
|
-
eNoPropertyError = rb_define_class_under(
|
1128
|
+
eNoPropertyError = rb_define_class_under(rbg_mGLib(), "NoPropertyError",
|
1102
1129
|
rb_eNameError);
|
1103
1130
|
|
1104
1131
|
rbg_type_to_prop_setter_tables =
|
data/ext/glib2/rbgobj_param.c
CHANGED
@@ -61,7 +61,7 @@ static const rb_data_type_t rg_glib_param_type = {
|
|
61
61
|
},
|
62
62
|
NULL,
|
63
63
|
NULL,
|
64
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
64
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
65
65
|
};
|
66
66
|
|
67
67
|
static pspec_holder *
|
@@ -353,7 +353,7 @@ void
|
|
353
353
|
Init_gobject_gparam(void)
|
354
354
|
{
|
355
355
|
qparamspec = g_quark_from_static_string("__ruby_gobject_param_spec__");
|
356
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_PARAM, "Param",
|
356
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_PARAM, "Param", rbg_mGLib());
|
357
357
|
|
358
358
|
/* GParamFlags */
|
359
359
|
rb_define_const(RG_TARGET_NAMESPACE, "READABLE",
|