glib2 3.4.0 → 3.4.5
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/README.md +5 -5
- data/Rakefile +6 -4
- data/ext/glib2/extconf.rb +1 -5
- data/ext/glib2/glib2.def +1 -0
- data/ext/glib2/rbglib-bytes.c +1 -5
- data/ext/glib2/rbglib-gc.c +98 -52
- data/ext/glib2/rbglib-variant-type.c +1 -5
- data/ext/glib2/rbglib-variant.c +3 -5
- data/ext/glib2/rbglib.c +4 -0
- data/ext/glib2/rbglib.h +13 -3
- data/ext/glib2/rbglib_bookmarkfile.c +4 -4
- data/ext/glib2/rbglib_datetime.c +1 -5
- data/ext/glib2/rbglib_error.c +3 -1
- data/ext/glib2/rbglib_fileutils.c +1 -17
- data/ext/glib2/rbglib_iochannel.c +4 -4
- data/ext/glib2/rbglib_keyfile.c +16 -41
- data/ext/glib2/rbglib_maincontext.c +6 -32
- data/ext/glib2/rbglib_mainloop.c +2 -17
- data/ext/glib2/rbglib_matchinfo.c +1 -5
- data/ext/glib2/rbglib_pollfd.c +1 -25
- data/ext/glib2/rbglib_regex.c +1 -13
- data/ext/glib2/rbglib_source.c +1 -39
- data/ext/glib2/rbglib_spawn.c +5 -10
- data/ext/glib2/rbglib_spawnerror.c +2 -2
- data/ext/glib2/rbglib_threads.c +2 -15
- data/ext/glib2/rbglib_timezone.c +1 -5
- data/ext/glib2/rbglib_unichar.c +46 -5
- data/ext/glib2/rbglib_unicode.c +1 -18
- data/ext/glib2/rbglib_utils.c +1 -14
- data/ext/glib2/rbglib_win32.c +3 -7
- data/ext/glib2/rbgobj_binding.c +1 -7
- data/ext/glib2/rbgobj_closure.c +22 -9
- data/ext/glib2/rbgobj_object.c +113 -104
- data/ext/glib2/rbgobj_param.c +2 -8
- data/ext/glib2/rbgobj_paramspecs.c +6 -24
- data/ext/glib2/rbgobj_signal.c +104 -92
- data/ext/glib2/rbgobj_strv.c +2 -2
- data/ext/glib2/rbgobj_type.c +58 -68
- data/ext/glib2/rbgobj_typeinterface.c +38 -2
- data/ext/glib2/rbgobj_value.c +3 -7
- data/ext/glib2/rbgobj_valuetypes.c +14 -62
- data/ext/glib2/rbgobject.c +4 -6
- data/ext/glib2/rbgobject.h +2 -27
- data/ext/glib2/rbgprivate.h +6 -6
- data/ext/glib2/rbgutil_callback.c +23 -26
- data/lib/glib2.rb +32 -3
- data/lib/glib2/deprecated.rb +22 -1
- data/lib/mkmf-gnome.rb +4 -4
- data/test/glib-test-utils.rb +18 -3
- data/test/run-test.rb +49 -14
- data/test/test-binding.rb +1 -11
- data/test/test-bytes.rb +1 -5
- data/test/test-date-time.rb +1 -3
- data/test/test-file-utils.rb +1 -32
- data/test/test-iochannel.rb +3 -5
- data/test/test-key-file.rb +5 -6
- data/test/test-match-info.rb +1 -5
- data/test/test-regex.rb +1 -5
- data/test/test-source.rb +1 -14
- data/test/test-spawn.rb +2 -1
- data/test/test-time-zone.rb +1 -5
- data/test/test-timeout.rb +2 -3
- data/test/test-unicode.rb +16 -12
- data/test/test-utils.rb +2 -8
- data/test/test-variant-type.rb +1 -3
- data/test/test-win32.rb +6 -6
- metadata +3 -7
- data/ext/glib2/glib-enum-types.c +0 -1233
- data/ext/glib2/glib-enum-types.h +0 -154
- data/ext/glib2/rbgobj_valuearray.c +0 -100
- data/test/glib-test-init.rb +0 -21
data/ext/glib2/rbgobj_strv.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011 Ruby-
|
3
|
+
* Copyright (C) 2011-2020 Ruby-GNOME Project Team
|
4
4
|
* Copyright (C) 2005 Masao Mutoh
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
@@ -30,7 +30,7 @@ strv_to_ruby(const GValue *from)
|
|
30
30
|
static void
|
31
31
|
strv_from_ruby(VALUE from, GValue *to)
|
32
32
|
{
|
33
|
-
|
33
|
+
gchar **strings = RVAL2STRV(from);
|
34
34
|
g_value_set_boxed(to, strings);
|
35
35
|
g_free(strings);
|
36
36
|
}
|
data/ext/glib2/rbgobj_type.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-2021 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
|
@@ -31,9 +31,10 @@ static VALUE rb_cMutex;
|
|
31
31
|
#endif
|
32
32
|
static VALUE lookup_class_mutex;
|
33
33
|
|
34
|
+
static ID id_gtype;
|
35
|
+
static ID id_lock;
|
34
36
|
static ID id_new;
|
35
37
|
static ID id_superclass;
|
36
|
-
static ID id_lock;
|
37
38
|
static ID id_unlock;
|
38
39
|
static GHashTable *gtype_to_cinfo;
|
39
40
|
static VALUE klass_to_cinfo;
|
@@ -110,7 +111,7 @@ rbgobj_class_info_create_data_type(VALUE klass)
|
|
110
111
|
if (RB_TYPE_P(klass, RUBY_T_CLASS) && klass != rb_cObject) {
|
111
112
|
VALUE p = RCLASS_SUPER(klass);
|
112
113
|
while (p != rb_cObject) {
|
113
|
-
if (RTYPEDDATA_P(p)) {
|
114
|
+
if (RB_TYPE_P(p, RUBY_T_DATA) && RTYPEDDATA_P(p)) {
|
114
115
|
data_type->parent = RTYPEDDATA_TYPE(p);
|
115
116
|
break;
|
116
117
|
}
|
@@ -133,7 +134,7 @@ rbgobj_class_info_register_without_lock(GType gtype, VALUE klass)
|
|
133
134
|
VALUE c;
|
134
135
|
|
135
136
|
data_type = rbgobj_class_info_create_data_type(klass);
|
136
|
-
c = TypedData_Make_Struct(
|
137
|
+
c = TypedData_Make_Struct(rb_cObject, RGObjClassInfo, data_type, cinfo);
|
137
138
|
cinfo->klass = klass;
|
138
139
|
cinfo->gtype = gtype;
|
139
140
|
cinfo->mark = NULL;
|
@@ -238,9 +239,7 @@ get_superclass(GType gtype, VALUE module)
|
|
238
239
|
case G_TYPE_OBJECT:
|
239
240
|
return cInstantiatable;
|
240
241
|
case G_TYPE_BOXED:
|
241
|
-
return rb_cObject;
|
242
242
|
case G_TYPE_POINTER:
|
243
|
-
return rb_cData;
|
244
243
|
case G_TYPE_ENUM:
|
245
244
|
case G_TYPE_FLAGS:
|
246
245
|
return rb_cObject;
|
@@ -432,9 +431,9 @@ rbgobj_gtype_to_ruby_class(GType gtype)
|
|
432
431
|
GType
|
433
432
|
rbgobj_gtype_from_ruby(VALUE rb_gtype)
|
434
433
|
{
|
435
|
-
|
436
|
-
|
437
|
-
if (RB_TYPE_P(rb_gtype, RUBY_T_STRING)) {
|
434
|
+
if (NIL_P(rb_gtype)) {
|
435
|
+
return G_TYPE_NONE;
|
436
|
+
} else if (RB_TYPE_P(rb_gtype, RUBY_T_STRING)) {
|
438
437
|
GType gtype;
|
439
438
|
gtype = g_type_from_name(RVAL2CSTR(rb_gtype));
|
440
439
|
if (gtype == G_TYPE_INVALID) {
|
@@ -443,14 +442,13 @@ rbgobj_gtype_from_ruby(VALUE rb_gtype)
|
|
443
442
|
RVAL2CSTR(rb_gtype));
|
444
443
|
}
|
445
444
|
return gtype;
|
445
|
+
} else if (RVAL2CBOOL(rb_obj_is_kind_of(rb_gtype, RG_TARGET_NAMESPACE))) {
|
446
|
+
return NUM2SIZET(rb_ivar_get(rb_gtype, id_gtype));
|
447
|
+
} else if (RVAL2CBOOL(rb_obj_is_kind_of(rb_gtype, rb_cClass))) {
|
448
|
+
return CLASS2GTYPE(rb_gtype);
|
449
|
+
} else {
|
450
|
+
return NUM2SIZET(rb_to_int(rb_gtype));
|
446
451
|
}
|
447
|
-
|
448
|
-
CONST_ID(id_gtype, "gtype");
|
449
|
-
if (rb_respond_to(rb_gtype, id_gtype)) {
|
450
|
-
rb_gtype = rb_funcall(rb_gtype, id_gtype, 0);
|
451
|
-
}
|
452
|
-
|
453
|
-
return NUM2ULONG(rb_gtype);
|
454
452
|
}
|
455
453
|
|
456
454
|
VALUE
|
@@ -532,7 +530,7 @@ rbgobj_register_class(VALUE klass,
|
|
532
530
|
|
533
531
|
if (klass2gtype) {
|
534
532
|
data_type = rbgobj_class_info_create_data_type(klass);
|
535
|
-
c = TypedData_Make_Struct(
|
533
|
+
c = TypedData_Make_Struct(rb_cObject, RGObjClassInfo, data_type, cinfo);
|
536
534
|
}
|
537
535
|
if (gtype2klass && !cinfo)
|
538
536
|
cinfo = g_new(RGObjClassInfo, 1);
|
@@ -607,26 +605,21 @@ init_typemap(void)
|
|
607
605
|
/* GLib::Type */
|
608
606
|
|
609
607
|
VALUE RG_TARGET_NAMESPACE;
|
610
|
-
static ID id_gtype;
|
611
608
|
|
612
609
|
VALUE
|
613
610
|
rbgobj_gtype_new(GType gtype)
|
614
611
|
{
|
615
612
|
VALUE result = rb_obj_alloc(RG_TARGET_NAMESPACE);
|
616
|
-
VALUE arg =
|
613
|
+
VALUE arg = SIZET2NUM(gtype);
|
617
614
|
rb_obj_call_init(result, 1, &arg);
|
618
615
|
return result;
|
619
616
|
}
|
620
617
|
|
618
|
+
/* Deprecated. Use rbgobj_gtype_from_ruby() instead. */
|
621
619
|
GType
|
622
|
-
rbgobj_gtype_get(VALUE
|
620
|
+
rbgobj_gtype_get(VALUE rb_gtype)
|
623
621
|
{
|
624
|
-
|
625
|
-
return NUM2ULONG(rb_ivar_get(self, id_gtype));
|
626
|
-
} else {
|
627
|
-
return CLASS2GTYPE(self);
|
628
|
-
}
|
629
|
-
rb_raise(rb_eTypeError, "Not a GLib::Type");
|
622
|
+
return rbgobj_gtype_from_ruby(rb_gtype);
|
630
623
|
}
|
631
624
|
|
632
625
|
static VALUE
|
@@ -690,7 +683,7 @@ rg_initialize(VALUE self, VALUE type)
|
|
690
683
|
GType gtype;
|
691
684
|
|
692
685
|
if (RVAL2CBOOL(rb_obj_is_kind_of(type, rb_cInteger))) {
|
693
|
-
gtype =
|
686
|
+
gtype = NUM2SIZET(type);
|
694
687
|
if (!g_type_name(gtype))
|
695
688
|
gtype = G_TYPE_INVALID;
|
696
689
|
} else {
|
@@ -700,7 +693,7 @@ rg_initialize(VALUE self, VALUE type)
|
|
700
693
|
if (G_TYPE_INVALID == gtype)
|
701
694
|
rb_raise(rb_eArgError, "invalid GType");
|
702
695
|
|
703
|
-
rb_ivar_set(self, id_gtype,
|
696
|
+
rb_ivar_set(self, id_gtype, SIZET2NUM(gtype));
|
704
697
|
|
705
698
|
return Qnil;
|
706
699
|
}
|
@@ -708,7 +701,7 @@ rg_initialize(VALUE self, VALUE type)
|
|
708
701
|
static VALUE
|
709
702
|
rg_inspect(VALUE self)
|
710
703
|
{
|
711
|
-
GType gtype =
|
704
|
+
GType gtype = rbgobj_gtype_from_ruby(self);
|
712
705
|
gchar* str;
|
713
706
|
VALUE result;
|
714
707
|
|
@@ -725,8 +718,8 @@ rg_operator_type_compare(VALUE self, VALUE other)
|
|
725
718
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
726
719
|
return Qnil;
|
727
720
|
else {
|
728
|
-
GType a =
|
729
|
-
GType b =
|
721
|
+
GType a = rbgobj_gtype_from_ruby(self);
|
722
|
+
GType b = rbgobj_gtype_from_ruby(other);
|
730
723
|
|
731
724
|
if (a==b)
|
732
725
|
return INT2FIX(0);
|
@@ -745,8 +738,8 @@ rg_operator_type_eq(VALUE self, VALUE other)
|
|
745
738
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
746
739
|
return Qnil;
|
747
740
|
else {
|
748
|
-
GType a =
|
749
|
-
GType b =
|
741
|
+
GType a = rbgobj_gtype_from_ruby(self);
|
742
|
+
GType b = rbgobj_gtype_from_ruby(other);
|
750
743
|
return CBOOL2RVAL(a == b);
|
751
744
|
}
|
752
745
|
}
|
@@ -757,8 +750,8 @@ rg_operator_type_lt_eq(VALUE self, VALUE other)
|
|
757
750
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
758
751
|
return Qnil;
|
759
752
|
else {
|
760
|
-
GType a =
|
761
|
-
GType b =
|
753
|
+
GType a = rbgobj_gtype_from_ruby(self);
|
754
|
+
GType b = rbgobj_gtype_from_ruby(other);
|
762
755
|
return CBOOL2RVAL(g_type_is_a(a, b));
|
763
756
|
}
|
764
757
|
}
|
@@ -769,8 +762,8 @@ rg_operator_type_gt_eq(VALUE self, VALUE other)
|
|
769
762
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
770
763
|
return Qnil;
|
771
764
|
else {
|
772
|
-
GType a =
|
773
|
-
GType b =
|
765
|
+
GType a = rbgobj_gtype_from_ruby(self);
|
766
|
+
GType b = rbgobj_gtype_from_ruby(other);
|
774
767
|
return CBOOL2RVAL(g_type_is_a(b, a));
|
775
768
|
}
|
776
769
|
}
|
@@ -781,8 +774,8 @@ rg_operator_type_lt(VALUE self, VALUE other)
|
|
781
774
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
782
775
|
return Qnil;
|
783
776
|
else {
|
784
|
-
GType a =
|
785
|
-
GType b =
|
777
|
+
GType a = rbgobj_gtype_from_ruby(self);
|
778
|
+
GType b = rbgobj_gtype_from_ruby(other);
|
786
779
|
return CBOOL2RVAL(g_type_is_a(a, b) && a != b);
|
787
780
|
}
|
788
781
|
}
|
@@ -793,8 +786,8 @@ rg_operator_type_gt(VALUE self, VALUE other)
|
|
793
786
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
794
787
|
return Qnil;
|
795
788
|
else {
|
796
|
-
GType a =
|
797
|
-
GType b =
|
789
|
+
GType a = rbgobj_gtype_from_ruby(self);
|
790
|
+
GType b = rbgobj_gtype_from_ruby(other);
|
798
791
|
return CBOOL2RVAL(g_type_is_a(b, a) && a != b);
|
799
792
|
}
|
800
793
|
}
|
@@ -808,112 +801,113 @@ rg_hash(VALUE self)
|
|
808
801
|
static VALUE
|
809
802
|
rg_to_class(VALUE self)
|
810
803
|
{
|
811
|
-
return GTYPE2CLASS(
|
804
|
+
return GTYPE2CLASS(rbgobj_gtype_from_ruby(self));
|
812
805
|
}
|
813
806
|
|
814
807
|
static VALUE
|
815
808
|
rg_fundamental(VALUE self)
|
816
809
|
{
|
817
|
-
return rbgobj_gtype_new(G_TYPE_FUNDAMENTAL(
|
810
|
+
return rbgobj_gtype_new(G_TYPE_FUNDAMENTAL(rbgobj_gtype_from_ruby(self)));
|
818
811
|
}
|
819
812
|
|
820
813
|
static VALUE
|
821
814
|
rg_fundamental_p(VALUE self)
|
822
815
|
{
|
823
|
-
return CBOOL2RVAL(G_TYPE_IS_FUNDAMENTAL(
|
816
|
+
return CBOOL2RVAL(G_TYPE_IS_FUNDAMENTAL(rbgobj_gtype_from_ruby(self)));
|
824
817
|
}
|
825
818
|
|
826
819
|
static VALUE
|
827
820
|
rg_derived_p(VALUE self)
|
828
821
|
{
|
829
|
-
return CBOOL2RVAL(G_TYPE_IS_DERIVED(
|
822
|
+
return CBOOL2RVAL(G_TYPE_IS_DERIVED(rbgobj_gtype_from_ruby(self)));
|
830
823
|
}
|
831
824
|
|
832
825
|
static VALUE
|
833
826
|
rg_interface_p(VALUE self)
|
834
827
|
{
|
835
|
-
return CBOOL2RVAL(G_TYPE_IS_INTERFACE(
|
828
|
+
return CBOOL2RVAL(G_TYPE_IS_INTERFACE(rbgobj_gtype_from_ruby(self)));
|
836
829
|
}
|
837
830
|
|
838
831
|
static VALUE
|
839
832
|
rg_classed_p(VALUE self)
|
840
833
|
{
|
841
|
-
return CBOOL2RVAL(G_TYPE_IS_CLASSED(
|
834
|
+
return CBOOL2RVAL(G_TYPE_IS_CLASSED(rbgobj_gtype_from_ruby(self)));
|
842
835
|
}
|
843
836
|
|
844
837
|
static VALUE
|
845
838
|
rg_instantiatable_p(VALUE self)
|
846
839
|
{
|
847
|
-
return CBOOL2RVAL(G_TYPE_IS_INSTANTIATABLE(
|
840
|
+
return CBOOL2RVAL(G_TYPE_IS_INSTANTIATABLE(rbgobj_gtype_from_ruby(self)));
|
848
841
|
}
|
849
842
|
|
850
843
|
static VALUE
|
851
844
|
rg_derivable_p(VALUE self)
|
852
845
|
{
|
853
|
-
return CBOOL2RVAL(G_TYPE_IS_DERIVABLE(
|
846
|
+
return CBOOL2RVAL(G_TYPE_IS_DERIVABLE(rbgobj_gtype_from_ruby(self)));
|
854
847
|
}
|
855
848
|
|
856
849
|
static VALUE
|
857
850
|
rg_deep_derivable_p(VALUE self)
|
858
851
|
{
|
859
|
-
return CBOOL2RVAL(G_TYPE_IS_DEEP_DERIVABLE(
|
852
|
+
return CBOOL2RVAL(G_TYPE_IS_DEEP_DERIVABLE(rbgobj_gtype_from_ruby(self)));
|
860
853
|
}
|
861
854
|
|
862
855
|
static VALUE
|
863
856
|
rg_abstract_p(VALUE self)
|
864
857
|
{
|
865
|
-
return CBOOL2RVAL(G_TYPE_IS_ABSTRACT(
|
858
|
+
return CBOOL2RVAL(G_TYPE_IS_ABSTRACT(rbgobj_gtype_from_ruby(self)));
|
866
859
|
}
|
867
860
|
|
868
861
|
static VALUE
|
869
862
|
rg_value_abstract_p(VALUE self)
|
870
863
|
{
|
871
|
-
return CBOOL2RVAL(G_TYPE_IS_VALUE_ABSTRACT(
|
864
|
+
return CBOOL2RVAL(G_TYPE_IS_VALUE_ABSTRACT(rbgobj_gtype_from_ruby(self)));
|
872
865
|
}
|
873
866
|
|
874
867
|
static VALUE
|
875
868
|
rg_value_type_p(VALUE self)
|
876
869
|
{
|
877
|
-
return CBOOL2RVAL(G_TYPE_IS_VALUE_TYPE(
|
870
|
+
return CBOOL2RVAL(G_TYPE_IS_VALUE_TYPE(rbgobj_gtype_from_ruby(self)));
|
878
871
|
}
|
879
872
|
|
880
873
|
static VALUE
|
881
874
|
rg_has_value_table(VALUE self)
|
882
875
|
{
|
883
|
-
return CBOOL2RVAL(G_TYPE_HAS_VALUE_TABLE(
|
876
|
+
return CBOOL2RVAL(G_TYPE_HAS_VALUE_TABLE(rbgobj_gtype_from_ruby(self)));
|
884
877
|
}
|
885
878
|
|
886
879
|
static VALUE
|
887
880
|
rg_name(VALUE self)
|
888
881
|
{
|
889
|
-
return rb_str_new2(g_type_name(
|
882
|
+
return rb_str_new2(g_type_name(rbgobj_gtype_from_ruby(self)));
|
890
883
|
}
|
891
884
|
|
892
885
|
static VALUE
|
893
886
|
rg_parent(VALUE self)
|
894
887
|
{
|
895
|
-
GType parent = g_type_parent(
|
888
|
+
GType parent = g_type_parent(rbgobj_gtype_from_ruby(self));
|
896
889
|
return parent ? rbgobj_gtype_new(parent) : Qnil;
|
897
890
|
}
|
898
891
|
|
899
892
|
static VALUE
|
900
893
|
rg_depth(VALUE self)
|
901
894
|
{
|
902
|
-
return UINT2NUM(g_type_depth(
|
895
|
+
return UINT2NUM(g_type_depth(rbgobj_gtype_from_ruby(self)));
|
903
896
|
}
|
904
897
|
|
905
898
|
static VALUE
|
906
899
|
rg_next_base(VALUE leaf_type, VALUE root_type)
|
907
900
|
{
|
908
|
-
GType ret = g_type_next_base(
|
909
|
-
|
901
|
+
GType ret = g_type_next_base(rbgobj_gtype_from_ruby(leaf_type),
|
902
|
+
rbgobj_gtype_from_ruby(root_type));
|
910
903
|
return ret ? rbgobj_gtype_new(ret) : Qnil;
|
911
904
|
}
|
912
905
|
|
913
906
|
static VALUE
|
914
907
|
rg_type_is_a_p(VALUE self, VALUE is_a_type)
|
915
908
|
{
|
916
|
-
return CBOOL2RVAL(g_type_is_a(
|
909
|
+
return CBOOL2RVAL(g_type_is_a(rbgobj_gtype_from_ruby(self),
|
910
|
+
rbgobj_gtype_from_ruby(is_a_type)));
|
917
911
|
}
|
918
912
|
|
919
913
|
#if 0
|
@@ -934,7 +928,7 @@ rg_children(VALUE self)
|
|
934
928
|
VALUE result;
|
935
929
|
guint i;
|
936
930
|
|
937
|
-
types = g_type_children(
|
931
|
+
types = g_type_children(rbgobj_gtype_from_ruby(self), &n_children);
|
938
932
|
result = rb_ary_new2(n_children);
|
939
933
|
for (i = 0; i < n_children; i++)
|
940
934
|
rb_ary_store(result, i, rbgobj_gtype_new(types[i]));
|
@@ -951,7 +945,7 @@ rg_interfaces(VALUE self)
|
|
951
945
|
VALUE result;
|
952
946
|
guint i;
|
953
947
|
|
954
|
-
types = g_type_interfaces(
|
948
|
+
types = g_type_interfaces(rbgobj_gtype_from_ruby(self), &n_interfaces);
|
955
949
|
result = rb_ary_new2(n_interfaces);
|
956
950
|
for (i = 0; i < n_interfaces; i++)
|
957
951
|
rb_ary_store(result, i, rbgobj_gtype_new(types[i]));
|
@@ -964,7 +958,7 @@ static VALUE
|
|
964
958
|
rg_class_size(VALUE self)
|
965
959
|
{
|
966
960
|
GTypeQuery query;
|
967
|
-
g_type_query(
|
961
|
+
g_type_query(rbgobj_gtype_from_ruby(self), &query);
|
968
962
|
return UINT2NUM(query.class_size);
|
969
963
|
}
|
970
964
|
|
@@ -972,7 +966,7 @@ static VALUE
|
|
972
966
|
rg_instance_size(VALUE self)
|
973
967
|
{
|
974
968
|
GTypeQuery query;
|
975
|
-
g_type_query(
|
969
|
+
g_type_query(rbgobj_gtype_from_ruby(self), &query);
|
976
970
|
return UINT2NUM(query.instance_size);
|
977
971
|
}
|
978
972
|
|
@@ -989,10 +983,6 @@ _def_fundamental_type(VALUE ary, GType gtype, const char* name)
|
|
989
983
|
void
|
990
984
|
Init_gobject_gtype(void)
|
991
985
|
{
|
992
|
-
#if !GLIB_CHECK_VERSION(2, 35, 1)
|
993
|
-
g_type_init();
|
994
|
-
#endif
|
995
|
-
|
996
986
|
init_typemap();
|
997
987
|
|
998
988
|
/* type */
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011,
|
4
|
-
* Copyright (C) 2002-2006 Ruby-
|
3
|
+
* Copyright (C) 2011,2021 Ruby-GNOME Project Team
|
4
|
+
* Copyright (C) 2002-2006 Ruby-GNOME Project Team
|
5
5
|
* Copyright (C) 2002,2003 Masahiro Sakai
|
6
6
|
*
|
7
7
|
* This library is free software; you can redistribute it and/or
|
@@ -35,6 +35,41 @@ rg_append_features(G_GNUC_UNUSED VALUE self, VALUE klass)
|
|
35
35
|
return rb_call_super(1, &klass);
|
36
36
|
}
|
37
37
|
|
38
|
+
static void
|
39
|
+
interface_init(G_GNUC_UNUSED gpointer g_iface,
|
40
|
+
G_GNUC_UNUSED gpointer iface_data)
|
41
|
+
{
|
42
|
+
}
|
43
|
+
|
44
|
+
static VALUE
|
45
|
+
rg_included(VALUE self, VALUE class_or_module)
|
46
|
+
{
|
47
|
+
const GInterfaceInfo interface_info = {
|
48
|
+
interface_init, NULL, NULL
|
49
|
+
};
|
50
|
+
const RGObjClassInfo *interface_cinfo;
|
51
|
+
const RGObjClassInfo *class_cinfo;
|
52
|
+
if (RVAL2CBOOL(rb_obj_is_instance_of(class_or_module, rb_cModule))) {
|
53
|
+
rb_raise(rb_eTypeError,
|
54
|
+
"GLib::Interface based module (%" PRIsVALUE ") "
|
55
|
+
"must be included into a class directly: %" PRIsVALUE,
|
56
|
+
self,
|
57
|
+
class_or_module);
|
58
|
+
}
|
59
|
+
interface_cinfo = rbgobj_lookup_class(self);
|
60
|
+
class_cinfo = rbgobj_lookup_class(class_or_module);
|
61
|
+
if (class_cinfo->klass != class_or_module) {
|
62
|
+
return Qnil;
|
63
|
+
}
|
64
|
+
if (g_type_is_a(class_cinfo->gtype, interface_cinfo->gtype)) {
|
65
|
+
return Qnil;
|
66
|
+
}
|
67
|
+
g_type_add_interface_static(class_cinfo->gtype,
|
68
|
+
interface_cinfo->gtype,
|
69
|
+
&interface_info);
|
70
|
+
return Qnil;
|
71
|
+
}
|
72
|
+
|
38
73
|
static VALUE
|
39
74
|
rg_install_property(VALUE self, VALUE pspec_obj)
|
40
75
|
{
|
@@ -141,6 +176,7 @@ Init_gobject_typeinterface(void)
|
|
141
176
|
RG_TARGET_NAMESPACE = rb_define_module_under(mGLib, "MetaInterface");
|
142
177
|
rbg_define_method(RG_TARGET_NAMESPACE, "gtype", generic_s_gtype, 0);
|
143
178
|
RG_DEF_METHOD(append_features, 1);
|
179
|
+
RG_DEF_METHOD(included, 1);
|
144
180
|
RG_DEF_METHOD(install_property, 1);
|
145
181
|
RG_DEF_METHOD(property, 1);
|
146
182
|
RG_DEF_METHOD(properties, -1);
|