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/rbgobj_signal.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
|
@@ -36,23 +36,31 @@ static const rb_data_type_t rg_glib_signal_type = {
|
|
36
36
|
},
|
37
37
|
NULL,
|
38
38
|
NULL,
|
39
|
-
RUBY_TYPED_FREE_IMMEDIATELY,
|
39
|
+
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE,
|
40
40
|
};
|
41
41
|
|
42
|
-
VALUE
|
43
|
-
|
42
|
+
static VALUE
|
43
|
+
rbgobj_signal_alloc_func(VALUE klass)
|
44
44
|
{
|
45
|
-
VALUE rb_query;
|
46
45
|
GSignalQuery *query;
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
query);
|
52
|
-
g_signal_query(id, query);
|
46
|
+
VALUE rb_query = TypedData_Make_Struct(RG_TARGET_NAMESPACE,
|
47
|
+
GSignalQuery,
|
48
|
+
&rg_glib_signal_type,
|
49
|
+
query);
|
53
50
|
return rb_query;
|
54
51
|
}
|
55
52
|
|
53
|
+
VALUE
|
54
|
+
rbgobj_signal_new(guint id)
|
55
|
+
{
|
56
|
+
ID id_new;
|
57
|
+
CONST_ID(id_new, "new");
|
58
|
+
return rb_funcall(RG_TARGET_NAMESPACE,
|
59
|
+
id_new,
|
60
|
+
1,
|
61
|
+
UINT2NUM(id));
|
62
|
+
}
|
63
|
+
|
56
64
|
static GSignalQuery *
|
57
65
|
rbgobj_signal_get_raw(VALUE rb_signal)
|
58
66
|
{
|
@@ -398,15 +406,16 @@ gobj_sig_connect_impl(gboolean after, int argc, VALUE *argv, VALUE self)
|
|
398
406
|
rbgobj_get_signal_func(signal_id));
|
399
407
|
}
|
400
408
|
}
|
401
|
-
|
409
|
+
g_rclosure_attach_gobject(rclosure, self);
|
402
410
|
g_object = RVAL2GOBJ(self);
|
403
411
|
tag = g_strdup_printf("%s::%s",
|
404
412
|
G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(g_object)),
|
405
413
|
sig_name);
|
406
|
-
g_rclosure_set_tag(
|
414
|
+
g_rclosure_set_tag(rclosure, tag);
|
407
415
|
g_free(tag);
|
408
416
|
handler_id = g_signal_connect_closure_by_id(g_object, signal_id, detail,
|
409
417
|
rclosure, after);
|
418
|
+
g_closure_unref(rclosure);
|
410
419
|
|
411
420
|
return ULONG2NUM(handler_id);
|
412
421
|
}
|
@@ -725,7 +734,7 @@ gobj_s_signal_handler_attach(VALUE klass,
|
|
725
734
|
Qnil,
|
726
735
|
rbgobj_get_signal_func(signal_id));
|
727
736
|
g_rclosure_set_tag(rclosure, handler_name);
|
728
|
-
g_rclosure_attach(
|
737
|
+
g_rclosure_attach(rclosure, klass);
|
729
738
|
g_signal_override_class_closure(signal_id, cinfo->gtype, rclosure);
|
730
739
|
|
731
740
|
{
|
@@ -745,6 +754,13 @@ rbgobj_signal_wrap(guint sig_id)
|
|
745
754
|
return rbgobj_signal_new(sig_id);
|
746
755
|
}
|
747
756
|
|
757
|
+
static VALUE
|
758
|
+
rg_initialize(VALUE self, VALUE id)
|
759
|
+
{
|
760
|
+
g_signal_query(NUM2UINT(id), rbgobj_signal_get_raw(self));
|
761
|
+
return RUBY_Qnil;
|
762
|
+
}
|
763
|
+
|
748
764
|
static VALUE
|
749
765
|
rg_id(VALUE self)
|
750
766
|
{
|
@@ -957,8 +973,10 @@ Init_gobject_gsignal(void)
|
|
957
973
|
{
|
958
974
|
VALUE cSignalFlags, cSignalMatchType;
|
959
975
|
|
960
|
-
RG_TARGET_NAMESPACE = rb_define_class_under(
|
976
|
+
RG_TARGET_NAMESPACE = rb_define_class_under(rbg_mGLib(), "Signal", rb_cObject);
|
977
|
+
rb_define_alloc_func(RG_TARGET_NAMESPACE, rbgobj_signal_alloc_func);
|
961
978
|
|
979
|
+
RG_DEF_METHOD(initialize, 1);
|
962
980
|
RG_DEF_METHOD(id, 0);
|
963
981
|
RG_DEF_METHOD(name, 0);
|
964
982
|
RG_DEF_METHOD(flags, 0);
|
@@ -972,7 +990,7 @@ Init_gobject_gsignal(void)
|
|
972
990
|
RG_DEF_METHOD(remove_emission_hook, 1);
|
973
991
|
|
974
992
|
/* GSignalFlags */
|
975
|
-
cSignalFlags = G_DEF_CLASS(G_TYPE_SIGNAL_FLAGS, "SignalFlags",
|
993
|
+
cSignalFlags = G_DEF_CLASS(G_TYPE_SIGNAL_FLAGS, "SignalFlags", rbg_mGLib());
|
976
994
|
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_SIGNAL_FLAGS, "G_SIGNAL_");
|
977
995
|
rb_define_const(cSignalFlags, "MASK", INT2NUM(G_SIGNAL_FLAGS_MASK));
|
978
996
|
rb_define_const(RG_TARGET_NAMESPACE, "FLAGS_MASK", INT2NUM(G_SIGNAL_FLAGS_MASK));
|
@@ -986,19 +1004,19 @@ Init_gobject_gsignal(void)
|
|
986
1004
|
rbg_define_method(RG_TARGET_NAMESPACE, "no_hooks?", query_is_G_SIGNAL_NO_HOOKS, 0);
|
987
1005
|
|
988
1006
|
/* GConnectFlags */
|
989
|
-
G_DEF_CLASS(G_TYPE_CONNECT_FLAGS, "ConnectFlags",
|
1007
|
+
G_DEF_CLASS(G_TYPE_CONNECT_FLAGS, "ConnectFlags", rbg_mGLib());
|
990
1008
|
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_CONNECT_FLAGS, "G_");
|
991
1009
|
|
992
1010
|
/* GSignalMatchType */
|
993
1011
|
cSignalMatchType = G_DEF_CLASS(G_TYPE_SIGNAL_MATCH_TYPE,
|
994
|
-
"SignalMatchType",
|
1012
|
+
"SignalMatchType", rbg_mGLib());
|
995
1013
|
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_SIGNAL_MATCH_TYPE, "G_SIGNAL_");
|
996
1014
|
rb_define_const(cSignalMatchType, "MASK", INT2NUM(G_SIGNAL_MATCH_MASK));
|
997
1015
|
rb_define_const(RG_TARGET_NAMESPACE, "MATCH_MASK", INT2NUM(G_SIGNAL_MATCH_MASK));
|
998
1016
|
|
999
1017
|
rb_define_const(RG_TARGET_NAMESPACE, "TYPE_STATIC_SCOPE", INT2FIX(G_SIGNAL_TYPE_STATIC_SCOPE));
|
1000
1018
|
|
1001
|
-
eNoSignalError = rb_define_class_under(
|
1019
|
+
eNoSignalError = rb_define_class_under(rbg_mGLib(), "NoSignalError", rb_eNameError);
|
1002
1020
|
|
1003
1021
|
rbg_signal_func_table = g_hash_table_new(g_direct_hash, g_direct_equal);
|
1004
1022
|
g_mutex_init(&rbg_signal_func_table_mutex);
|
data/ext/glib2/rbgobj_type.c
CHANGED
@@ -974,6 +974,7 @@ static inline void
|
|
974
974
|
_def_fundamental_type(VALUE ary, GType gtype, const char* name)
|
975
975
|
{
|
976
976
|
VALUE c = rbgobj_gtype_new(gtype);
|
977
|
+
rb_obj_freeze(c);
|
977
978
|
rb_define_const(RG_TARGET_NAMESPACE, name, c);
|
978
979
|
rb_ary_push(ary, c);
|
979
980
|
}
|
@@ -992,12 +993,12 @@ Init_gobject_gtype(void)
|
|
992
993
|
id_lock = rb_intern("lock");
|
993
994
|
id_unlock = rb_intern("unlock");
|
994
995
|
lookup_class_mutex = rb_funcall(rb_cMutex, id_new, 0);
|
995
|
-
rb_iv_set(
|
996
|
+
rb_iv_set(rbg_mGLib(), "lookup_class_mutex", lookup_class_mutex);
|
996
997
|
|
997
998
|
dynamic_gtype_list = g_hash_table_new(g_str_hash, g_str_equal);
|
998
999
|
id_gtype = rb_intern("__gobject_gtype__");
|
999
1000
|
|
1000
|
-
RG_TARGET_NAMESPACE = rb_define_class_under(
|
1001
|
+
RG_TARGET_NAMESPACE = rb_define_class_under(rbg_mGLib(), "Type", rb_cObject);
|
1001
1002
|
|
1002
1003
|
RG_DEF_SMETHOD(try_convert, 1);
|
1003
1004
|
|
@@ -125,7 +125,7 @@ void
|
|
125
125
|
Init_gobject_typeinstance(void)
|
126
126
|
{
|
127
127
|
/* should be renamed to GLib::Instance? */
|
128
|
-
RG_TARGET_NAMESPACE = rb_define_class_under(
|
128
|
+
RG_TARGET_NAMESPACE = rb_define_class_under(rbg_mGLib(), "Instantiatable", rb_cObject);
|
129
129
|
rb_extend_object(RG_TARGET_NAMESPACE, mMetaInterface);
|
130
130
|
|
131
131
|
rb_define_alloc_func(RG_TARGET_NAMESPACE, (VALUE(*)_((VALUE)))instantiatable_s_allocate);
|
@@ -107,7 +107,7 @@ rg_property(VALUE self, VALUE property_name)
|
|
107
107
|
rb_raise(rb_eTypeError, "%s isn't interface module", rb_class2name(self));
|
108
108
|
/* XXX: g_type_default_interface_ref(G_TYPE_INTERFACE) causes SEGV. */
|
109
109
|
if (gtype == G_TYPE_INTERFACE) {
|
110
|
-
rb_raise(rb_const_get(
|
110
|
+
rb_raise(rb_const_get(rbg_mGLib(), rb_intern("NoPropertyError")),
|
111
111
|
"No such property: %s", name);
|
112
112
|
}
|
113
113
|
|
@@ -115,7 +115,7 @@ rg_property(VALUE self, VALUE property_name)
|
|
115
115
|
prop = g_object_interface_find_property(ginterface, name);
|
116
116
|
if (!prop){
|
117
117
|
g_type_default_interface_unref(ginterface);
|
118
|
-
rb_raise(rb_const_get(
|
118
|
+
rb_raise(rb_const_get(rbg_mGLib(), rb_intern("NoPropertyError")),
|
119
119
|
"No such property: %s", name);
|
120
120
|
}
|
121
121
|
result = GOBJ2RVAL(prop);
|
@@ -173,7 +173,7 @@ rbgobj_init_interface(VALUE interf)
|
|
173
173
|
void
|
174
174
|
Init_gobject_typeinterface(void)
|
175
175
|
{
|
176
|
-
RG_TARGET_NAMESPACE = rb_define_module_under(
|
176
|
+
RG_TARGET_NAMESPACE = rb_define_module_under(rbg_mGLib(), "MetaInterface");
|
177
177
|
rbg_define_method(RG_TARGET_NAMESPACE, "gtype", generic_s_gtype, 0);
|
178
178
|
RG_DEF_METHOD(append_features, 1);
|
179
179
|
RG_DEF_METHOD(included, 1);
|
@@ -181,5 +181,5 @@ Init_gobject_typeinterface(void)
|
|
181
181
|
RG_DEF_METHOD(property, 1);
|
182
182
|
RG_DEF_METHOD(properties, -1);
|
183
183
|
|
184
|
-
rbgobj_mInterface = G_DEF_INTERFACE(G_TYPE_INTERFACE, "Interface",
|
184
|
+
rbgobj_mInterface = G_DEF_INTERFACE(G_TYPE_INTERFACE, "Interface", rbg_mGLib());
|
185
185
|
}
|
@@ -64,7 +64,7 @@ void g_type_module_add_interface (GTypeModule *module,
|
|
64
64
|
void
|
65
65
|
Init_gobject_gtypemodule(void)
|
66
66
|
{
|
67
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_TYPE_MODULE, "TypeModule",
|
67
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_TYPE_MODULE, "TypeModule", rbg_mGLib());
|
68
68
|
RG_DEF_METHOD(use, 0);
|
69
69
|
RG_DEF_METHOD(unuse, 0);
|
70
70
|
RG_DEF_METHOD(name, 0);
|
@@ -51,7 +51,7 @@ void g_type_plugin_complete_interface_info (GTypePlugin *plugin,
|
|
51
51
|
void
|
52
52
|
Init_gobject_gtypeplugin(void)
|
53
53
|
{
|
54
|
-
VALUE RG_TARGET_NAMESPACE = G_DEF_INTERFACE(G_TYPE_TYPE_PLUGIN, "TypePlugin",
|
54
|
+
VALUE RG_TARGET_NAMESPACE = G_DEF_INTERFACE(G_TYPE_TYPE_PLUGIN, "TypePlugin", rbg_mGLib());
|
55
55
|
RG_DEF_METHOD(use, 0);
|
56
56
|
RG_DEF_METHOD(unuse, 0);
|
57
57
|
}
|
data/ext/glib2/rbgobj_value.c
CHANGED
@@ -129,6 +129,7 @@ rbgobj_gvalue_to_rvalue(const GValue* value)
|
|
129
129
|
continue;
|
130
130
|
return func(value);
|
131
131
|
}
|
132
|
+
return BOXED2RVAL(g_value_get_boxed(value), type);
|
132
133
|
}
|
133
134
|
case G_TYPE_VARIANT:
|
134
135
|
{
|
@@ -293,7 +294,24 @@ rbgobj_rvalue_to_gvalue(VALUE val, GValue* result)
|
|
293
294
|
}
|
294
295
|
case G_TYPE_OBJECT:
|
295
296
|
case G_TYPE_INTERFACE:
|
296
|
-
|
297
|
+
if (NIL_P(val)) {
|
298
|
+
g_value_set_object(result, NULL);
|
299
|
+
} else {
|
300
|
+
VALUE value_class = GTYPE2CLASS(type);
|
301
|
+
ID id_try_convert;
|
302
|
+
CONST_ID(id_try_convert, "try_convert");
|
303
|
+
if (!NIL_P(value_class) &&
|
304
|
+
rb_respond_to(value_class, id_try_convert)) {
|
305
|
+
VALUE converted_value = rb_funcall(value_class,
|
306
|
+
id_try_convert,
|
307
|
+
1,
|
308
|
+
val);
|
309
|
+
if (!NIL_P(converted_value)) {
|
310
|
+
val = converted_value;
|
311
|
+
}
|
312
|
+
}
|
313
|
+
g_value_set_object(result, RVAL2GOBJ(val));
|
314
|
+
}
|
297
315
|
return;
|
298
316
|
case G_TYPE_PARAM:
|
299
317
|
g_value_set_param(result, NIL_P(val) ? NULL : RVAL2GOBJ(val));
|
@@ -330,6 +348,7 @@ rbgobj_rvalue_to_gvalue(VALUE val, GValue* result)
|
|
330
348
|
func(val, result);
|
331
349
|
}
|
332
350
|
}
|
351
|
+
break;
|
333
352
|
}
|
334
353
|
}
|
335
354
|
|
@@ -403,7 +422,7 @@ Init_gobject_gvalue(void)
|
|
403
422
|
qRValueToGValueFunc = g_quark_from_static_string("__ruby_r2g_func__");
|
404
423
|
qGValueToRValueFunc = g_quark_from_static_string("__ruby_g2r_func__");
|
405
424
|
|
406
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_VALUE, "Value",
|
425
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_VALUE, "Value", rbg_mGLib());
|
407
426
|
RG_DEF_METHOD(initialize, -1);
|
408
427
|
RG_DEF_METHOD(type, 0);
|
409
428
|
RG_DEF_METHOD(value, 0);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011-
|
3
|
+
* Copyright (C) 2011-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
|
@@ -22,11 +22,21 @@
|
|
22
22
|
#include "rbgprivate.h"
|
23
23
|
#include "rbgobject.h"
|
24
24
|
|
25
|
+
static const rb_data_type_t rbg_pointer_type = {
|
26
|
+
"GLib::Poitner",
|
27
|
+
{
|
28
|
+
NULL,
|
29
|
+
NULL,
|
30
|
+
},
|
31
|
+
NULL,
|
32
|
+
NULL,
|
33
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
34
|
+
};
|
25
35
|
|
26
36
|
VALUE
|
27
37
|
rbgobj_ptr_new(GType type, gpointer ptr)
|
28
38
|
{
|
29
|
-
return
|
39
|
+
return TypedData_Wrap_Struct(GTYPE2CLASS(type), &rbg_pointer_type, ptr);
|
30
40
|
}
|
31
41
|
|
32
42
|
gpointer
|
@@ -34,7 +44,7 @@ rbgobj_ptr2cptr(VALUE ptr)
|
|
34
44
|
{
|
35
45
|
gpointer dest;
|
36
46
|
if (rb_obj_is_kind_of(ptr, GTYPE2CLASS(G_TYPE_POINTER))){
|
37
|
-
|
47
|
+
TypedData_Get_Struct(ptr, void, &rbg_pointer_type, dest);
|
38
48
|
} else if (rb_obj_is_kind_of(ptr, rb_cObject)){
|
39
49
|
dest = (gpointer)ptr;
|
40
50
|
} else{
|
@@ -58,7 +68,7 @@ ptr_gtype(VALUE self)
|
|
58
68
|
static void
|
59
69
|
Init_gtype_pointer(void)
|
60
70
|
{
|
61
|
-
VALUE cPtr = G_DEF_CLASS(G_TYPE_POINTER, "Pointer",
|
71
|
+
VALUE cPtr = G_DEF_CLASS(G_TYPE_POINTER, "Pointer", rbg_mGLib());
|
62
72
|
rbg_define_singleton_method(cPtr, "gtype", ptr_s_gtype, 1);
|
63
73
|
rbg_define_method(cPtr, "gtype", ptr_gtype, 1);
|
64
74
|
}
|
data/ext/glib2/rbgobject.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2003-
|
3
|
+
* Copyright (C) 2003-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,
|
@@ -179,12 +179,7 @@ rbgobj_ruby_object_from_instance_with_unref(gpointer instance)
|
|
179
179
|
void
|
180
180
|
rbgobj_add_relative(VALUE obj, VALUE relative)
|
181
181
|
{
|
182
|
-
|
183
|
-
if (NIL_P(mGLibObject)) {
|
184
|
-
mGLibObject = rb_const_get(mGLib, rb_intern("Object"));
|
185
|
-
}
|
186
|
-
|
187
|
-
if (rb_obj_is_kind_of(obj, mGLibObject)) {
|
182
|
+
if (rb_obj_is_kind_of(obj, rbg_cGLibObject())) {
|
188
183
|
rbgobj_object_add_relative(obj, relative);
|
189
184
|
} else {
|
190
185
|
VALUE rb_gc_marker = Qnil;
|
@@ -212,13 +207,8 @@ rbgobj_invalidate_relatives(VALUE obj)
|
|
212
207
|
void
|
213
208
|
rbgobj_add_relative_removable(VALUE obj, VALUE relative, ID obj_ivar_id, VALUE hash_key)
|
214
209
|
{
|
215
|
-
static VALUE cGLibObject = Qnil;
|
216
|
-
if (NIL_P(cGLibObject)) {
|
217
|
-
cGLibObject = rb_const_get(mGLib, rb_intern("Object"));
|
218
|
-
}
|
219
|
-
|
220
210
|
if (obj_ivar_id == rbgobj_id_children &&
|
221
|
-
rb_obj_is_kind_of(obj,
|
211
|
+
rb_obj_is_kind_of(obj, rbg_cGLibObject())) {
|
222
212
|
rbgobj_object_add_relative(obj, hash_key);
|
223
213
|
} else {
|
224
214
|
VALUE hash = Qnil;
|
@@ -251,17 +241,12 @@ rbgobj_get_relative_removable(VALUE obj, ID obj_ivar_id, VALUE hash_key)
|
|
251
241
|
void
|
252
242
|
rbgobj_remove_relative(VALUE obj, ID obj_ivar_id, VALUE relative)
|
253
243
|
{
|
254
|
-
static VALUE cGLibObject = Qnil;
|
255
|
-
if (NIL_P(cGLibObject)) {
|
256
|
-
cGLibObject = rb_const_get(mGLib, rb_intern("Object"));
|
257
|
-
}
|
258
|
-
|
259
244
|
if (obj_ivar_id == (ID)0) {
|
260
245
|
obj_ivar_id = id_relatives;
|
261
246
|
}
|
262
247
|
|
263
248
|
if ((obj_ivar_id == id_relatives || obj_ivar_id == rbgobj_id_children) &&
|
264
|
-
rb_obj_is_kind_of(obj,
|
249
|
+
rb_obj_is_kind_of(obj, rbg_cGLibObject())) {
|
265
250
|
rbgobj_object_remove_relative(obj, relative);
|
266
251
|
} else {
|
267
252
|
VALUE rb_gc_marker = Qnil;
|
@@ -343,7 +328,7 @@ rbgobj_define_property_accessors(VALUE klass)
|
|
343
328
|
|
344
329
|
if (pspec->flags & G_PARAM_READABLE){
|
345
330
|
g_string_append_printf(
|
346
|
-
source,
|
331
|
+
source,
|
347
332
|
"def %s%s; get_property('%s'); end\n",
|
348
333
|
prop_name,
|
349
334
|
(G_PARAM_SPEC_VALUE_TYPE(pspec) == G_TYPE_BOOLEAN) ? "?" : "",
|
@@ -361,11 +346,12 @@ rbgobj_define_property_accessors(VALUE klass)
|
|
361
346
|
g_free(buf);
|
362
347
|
}
|
363
348
|
|
364
|
-
if (source->len > 0)
|
349
|
+
if (source->len > 0) {
|
365
350
|
rb_funcall(klass, id_module_eval, 3,
|
366
351
|
rb_str_new2(source->str),
|
367
352
|
rb_str_new2(__FILE__),
|
368
353
|
INT2NUM(__LINE__));
|
354
|
+
}
|
369
355
|
g_string_free(source, TRUE);
|
370
356
|
}
|
371
357
|
|
data/ext/glib2/rbgobject.h
CHANGED
@@ -237,6 +237,7 @@ extern GClosure* g_rclosure_new_call(VALUE callback_proc,
|
|
237
237
|
VALUE extra_args,
|
238
238
|
RGClosureCallFunc func);
|
239
239
|
extern void g_rclosure_attach(GClosure *closure, VALUE object);
|
240
|
+
extern void g_rclosure_attach_gobject(GClosure *closure, VALUE object);
|
240
241
|
extern void g_rclosure_set_tag(GClosure *closure, const gchar *tag);
|
241
242
|
|
242
243
|
/* rbgobj_value.c */
|
data/ext/glib2/rbgprivate.h
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2007-
|
3
|
+
* Copyright (C) 2007-2022 Ruby-GNOME 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
|
@@ -22,12 +22,15 @@
|
|
22
22
|
|
23
23
|
/*
|
24
24
|
* CentOS 7: GLib 2.50
|
25
|
-
*
|
26
|
-
*
|
25
|
+
* AlmaLinux 8: GLib 2.56
|
26
|
+
* AlmaLinux 9: GLib 2.68
|
27
27
|
* Ubuntu 18.04: GLib 2.56
|
28
28
|
* Ubuntu 20.04: GLib 2.64
|
29
|
+
* Ubuntu 22.04: GLib 2.72
|
29
30
|
*/
|
30
|
-
#define GLIB_VERSION_MIN_REQUIRED
|
31
|
+
#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_50
|
32
|
+
|
33
|
+
#define G_LOG_DOMAIN "Ruby/GLib2"
|
31
34
|
|
32
35
|
#include "rbgobject.h"
|
33
36
|
|
@@ -43,6 +46,10 @@
|
|
43
46
|
# define G_VALUE_INIT { 0, { { 0 } } }
|
44
47
|
#endif
|
45
48
|
|
49
|
+
#ifndef RUBY_TYPED_FROZEN_SHAREABLE
|
50
|
+
# define RUBY_TYPED_FROZEN_SHAREABLE 0
|
51
|
+
#endif
|
52
|
+
|
46
53
|
G_BEGIN_DECLS
|
47
54
|
|
48
55
|
typedef struct {
|
data/ext/glib2/rbgutil.c
CHANGED
@@ -46,6 +46,25 @@ rbg_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int arg
|
|
46
46
|
INT2NUM(__LINE__));
|
47
47
|
}
|
48
48
|
|
49
|
+
void
|
50
|
+
rbg_define_private_method(VALUE klass,
|
51
|
+
const char *name,
|
52
|
+
VALUE (*func)(ANYARGS),
|
53
|
+
int argc)
|
54
|
+
{
|
55
|
+
rb_define_private_method(klass, name, func, argc);
|
56
|
+
if ((argc != 1) || strncmp(name, "set_", 4))
|
57
|
+
return;
|
58
|
+
|
59
|
+
name += 4;
|
60
|
+
rb_funcall(klass, rbgutil_id_module_eval, 3,
|
61
|
+
CSTR2RVAL_FREE(g_strdup_printf("def %s=(val); set_%s(val); val; end\n"
|
62
|
+
"private :%s=\n",
|
63
|
+
name, name, name)),
|
64
|
+
rb_str_new2(__FILE__),
|
65
|
+
INT2NUM(__LINE__));
|
66
|
+
}
|
67
|
+
|
49
68
|
void
|
50
69
|
rbg_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), int argc)
|
51
70
|
{
|
@@ -84,7 +103,7 @@ rbgutil_set_properties(VALUE self, VALUE hash)
|
|
84
103
|
VALUE
|
85
104
|
rbgutil_def_setters(VALUE klass)
|
86
105
|
{
|
87
|
-
return rb_funcall(
|
106
|
+
return rb_funcall(rbg_mGLib(), id_add_one_arg_setter, 1, klass);
|
88
107
|
}
|
89
108
|
|
90
109
|
void
|
data/ext/glib2/rbgutil.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011-
|
4
|
-
* Copyright (C) 2002,2003
|
3
|
+
* Copyright (C) 2011-2022 Ruby-GNOME Project Team
|
4
|
+
* Copyright (C) 2002,2003 Masao Mutoh
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
7
7
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -55,6 +55,8 @@ G_BEGIN_DECLS
|
|
55
55
|
#define RG_DEF_ATTR(attr, read, write, ex) \
|
56
56
|
rb_attr(RG_TARGET_NAMESPACE, rb_intern(attr), read, write, ex)
|
57
57
|
#define RG_DEF_ALIAS(new, old) rb_define_alias(RG_TARGET_NAMESPACE, new, old)
|
58
|
+
#define RG_DEF_PRIVATE_METHOD(method, argc) \
|
59
|
+
rbg_define_private_method(RG_TARGET_NAMESPACE, #method, rg_ ## method, argc)
|
58
60
|
|
59
61
|
#define RG_REG_GLIBID_SETTER(name) \
|
60
62
|
rbgobj_register_property_setter(CLASS2GTYPE(RG_TARGET_NAMESPACE), name, rbgutil_glibid_r2g_func)
|
@@ -88,10 +90,12 @@ G_BEGIN_DECLS
|
|
88
90
|
(rbgutil_string_set_utf8_encoding(string))
|
89
91
|
|
90
92
|
extern void rbg_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc);
|
93
|
+
extern void rbg_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc);
|
91
94
|
extern void rbg_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), int argc);
|
92
95
|
extern VALUE rbgutil_def_setters(VALUE klass);
|
93
96
|
extern void rbgutil_set_properties(VALUE self, VALUE hash);
|
94
97
|
extern VALUE rbgutil_protect(VALUE (*proc) (VALUE), VALUE data);
|
98
|
+
extern void rbgutil_on_callback_error(VALUE error);
|
95
99
|
extern VALUE rbgutil_invoke_callback(VALUE (*func)(VALUE), VALUE arg);
|
96
100
|
extern void rbgutil_start_callback_dispatch_thread(void);
|
97
101
|
extern void rbgutil_stop_callback_dispatch_thread(void);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2007-
|
3
|
+
* Copyright (C) 2007-2022 Ruby-GNOME 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
|
@@ -49,10 +49,16 @@ rbgutil_protect(VALUE (*func) (VALUE), VALUE data)
|
|
49
49
|
VALUE ret = rb_protect(func, data, &state);
|
50
50
|
VALUE e = rb_errinfo();
|
51
51
|
if (state && !NIL_P(e))
|
52
|
-
|
52
|
+
rbgutil_on_callback_error(e);
|
53
53
|
return ret;
|
54
54
|
}
|
55
55
|
|
56
|
+
void
|
57
|
+
rbgutil_on_callback_error(VALUE error)
|
58
|
+
{
|
59
|
+
rb_funcall(rbg_mGLib(), id_exit_application, 2, error, INT2NUM(EXIT_FAILURE));
|
60
|
+
}
|
61
|
+
|
56
62
|
/**********************************************************************/
|
57
63
|
|
58
64
|
#ifdef HAVE_NATIVETHREAD
|
@@ -222,13 +228,13 @@ rbgutil_start_callback_dispatch_thread(void)
|
|
222
228
|
VALUE callback_dispatch_thread;
|
223
229
|
|
224
230
|
g_mutex_lock(&callback_dispatch_thread_mutex);
|
225
|
-
callback_dispatch_thread = rb_ivar_get(
|
231
|
+
callback_dispatch_thread = rb_ivar_get(rbg_mGLib(), id_callback_dispatch_thread);
|
226
232
|
if (NIL_P(callback_dispatch_thread)) {
|
227
233
|
if (pipe(callback_pipe_fds) == -1)
|
228
234
|
rb_sys_fail("pipe()");
|
229
235
|
|
230
236
|
callback_dispatch_thread = rb_thread_create(mainloop, NULL);
|
231
|
-
rb_ivar_set(
|
237
|
+
rb_ivar_set(rbg_mGLib(), id_callback_dispatch_thread,
|
232
238
|
callback_dispatch_thread);
|
233
239
|
}
|
234
240
|
g_mutex_unlock(&callback_dispatch_thread_mutex);
|
@@ -242,10 +248,10 @@ rbgutil_stop_callback_dispatch_thread(void)
|
|
242
248
|
VALUE callback_dispatch_thread;
|
243
249
|
|
244
250
|
g_mutex_lock(&callback_dispatch_thread_mutex);
|
245
|
-
callback_dispatch_thread = rb_ivar_get(
|
251
|
+
callback_dispatch_thread = rb_ivar_get(rbg_mGLib(), id_callback_dispatch_thread);
|
246
252
|
if (!NIL_P(callback_dispatch_thread)) {
|
247
253
|
queue_callback_request(NULL);
|
248
|
-
rb_ivar_set(
|
254
|
+
rb_ivar_set(rbg_mGLib(), id_callback_dispatch_thread, Qnil);
|
249
255
|
}
|
250
256
|
g_mutex_unlock(&callback_dispatch_thread_mutex);
|
251
257
|
#endif
|
@@ -256,12 +262,12 @@ Init_gutil_callback(void)
|
|
256
262
|
{
|
257
263
|
id_exit_application = rb_intern("exit_application");
|
258
264
|
rbgutil_eGLibCallbackNotInitializedError =
|
259
|
-
rb_define_class_under(
|
265
|
+
rb_define_class_under(rbg_mGLib(), "CallbackNotInitializedError",
|
260
266
|
rb_eRuntimeError);
|
261
267
|
|
262
268
|
#ifdef HAVE_NATIVETHREAD
|
263
269
|
id_callback_dispatch_thread = rb_intern("callback_dispatch_thread");
|
264
|
-
rb_ivar_set(
|
270
|
+
rb_ivar_set(rbg_mGLib(), id_callback_dispatch_thread, Qnil);
|
265
271
|
|
266
272
|
callback_request_queue = g_async_queue_new();
|
267
273
|
g_mutex_init(&callback_dispatch_thread_mutex);
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Copyright (C) 2022 Ruby-GNOME Project Team
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
module GLib
|
18
|
+
class DateTime
|
19
|
+
class << self
|
20
|
+
def try_convert(value)
|
21
|
+
case value
|
22
|
+
when ::Time
|
23
|
+
new(year: value.year,
|
24
|
+
month: value.month,
|
25
|
+
day: value.day,
|
26
|
+
hour: value.hour,
|
27
|
+
minute: value.min,
|
28
|
+
second: value.sec + (value.nsec / 1_000_000_000.0))
|
29
|
+
else
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (C) 2022 Ruby-GNOME Project Team
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
module GLib
|
18
|
+
class Variant
|
19
|
+
def inspect
|
20
|
+
super.gsub(/>\z/) do
|
21
|
+
" type=#{type} value=#{value.inspect}>"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|