glib2 2.2.5 → 3.0.1
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 +53 -8
- data/ext/glib2/extconf.rb +1 -1
- data/ext/glib2/glib2.def +8 -0
- data/ext/glib2/rbglib-variant-type.c +296 -0
- data/ext/glib2/rbglib-variant.c +132 -0
- data/ext/glib2/rbglib.c +16 -1
- data/ext/glib2/rbglib.h +18 -7
- data/ext/glib2/rbglib2conversions.h +6 -1
- data/ext/glib2/rbglib_fileutils.c +3 -3
- data/ext/glib2/rbglib_maincontext.c +35 -5
- data/ext/glib2/rbgobj_binding.c +48 -0
- data/ext/glib2/rbgobj_boxed.c +6 -2
- data/ext/glib2/rbgobj_enums.c +55 -12
- data/ext/glib2/rbgobj_flags.c +115 -70
- data/ext/glib2/rbgobj_object.c +91 -77
- data/ext/glib2/rbgobj_type.c +1 -1
- data/ext/glib2/rbgobj_typeinstance.c +8 -2
- data/ext/glib2/rbgobj_value.c +20 -12
- data/ext/glib2/rbgobject.c +2 -0
- data/ext/glib2/rbgobject.h +4 -2
- data/ext/glib2/rbgprivate.h +4 -3
- data/ext/glib2/rbgutil.c +36 -8
- data/ext/glib2/rbgutil.h +3 -1
- data/ext/glib2/rbgutil_list.c +97 -1
- data/ext/glib2/rbgutil_list.h +10 -1
- data/lib/glib2/deprecatable.rb +20 -5
- data/lib/gnome2/rake/native-binary-build-task.rb +1 -1
- data/lib/gnome2/rake/windows-binary-build-task.rb +12 -15
- data/lib/mkmf-gnome2.rb +10 -11
- data/test/test-binding.rb +97 -0
- data/test/test-variant-type.rb +357 -0
- data/test/test_enum.rb +5 -8
- data/test/test_file_utils.rb +30 -8
- data/test/test_source.rb +11 -0
- data/test/test_value.rb +5 -0
- metadata +7 -3
- data/README +0 -40
data/ext/glib2/rbgobj_flags.c
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C)
|
4
|
-
* Copyright (C) 2004-2006 Ruby-GNOME2 Project Team
|
3
|
+
* Copyright (C) 2004-2015 Ruby-GNOME2 Project Team
|
5
4
|
* Copyright (C) 2002,2003 Masahiro Sakai
|
6
5
|
*
|
7
6
|
* This library is free software; you can redistribute it and/or
|
@@ -30,33 +29,10 @@ VALUE RG_TARGET_NAMESPACE;
|
|
30
29
|
static ID id_new;
|
31
30
|
static ID id_module_eval;
|
32
31
|
static ID id_or;
|
32
|
+
static ID id_to_i;
|
33
33
|
|
34
34
|
/**********************************************************************/
|
35
35
|
|
36
|
-
static VALUE
|
37
|
-
resolve_flags_value(VALUE klass, VALUE nick_or_nicks)
|
38
|
-
{
|
39
|
-
int i, len;
|
40
|
-
VALUE flags_value;
|
41
|
-
|
42
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(nick_or_nicks, rb_cArray)))
|
43
|
-
return rg_enum_resolve_value(klass, nick_or_nicks);
|
44
|
-
|
45
|
-
len = RARRAY_LEN(nick_or_nicks);
|
46
|
-
flags_value = rb_funcall(klass, id_new, 0);
|
47
|
-
for (i = 0; i < len; i++) {
|
48
|
-
VALUE value;
|
49
|
-
|
50
|
-
value = rg_enum_resolve_value(klass, RARRAY_PTR(nick_or_nicks)[i]);
|
51
|
-
if (NIL_P(value))
|
52
|
-
return Qnil;
|
53
|
-
|
54
|
-
flags_value = rb_funcall(flags_value, id_or, 1, value);
|
55
|
-
}
|
56
|
-
|
57
|
-
return flags_value;
|
58
|
-
}
|
59
|
-
|
60
36
|
void
|
61
37
|
rg_flags_add_constants(VALUE mod, GType flags_type, const gchar *strip_prefix)
|
62
38
|
{
|
@@ -127,25 +103,13 @@ rbgobj_get_flags(VALUE obj, GType gtype)
|
|
127
103
|
rb_raise(rb_eTypeError, "%s is not a %s",
|
128
104
|
g_type_name(gtype), g_type_name(G_TYPE_FLAGS));
|
129
105
|
|
130
|
-
/* for compatibility */
|
131
|
-
if (rb_obj_is_kind_of(obj, rb_cInteger))
|
132
|
-
obj = rbgobj_make_flags(NUM2UINT(obj), gtype);
|
133
|
-
|
134
106
|
klass = GTYPE2CLASS(gtype);
|
135
107
|
|
136
|
-
if (!rb_obj_is_kind_of(obj, klass)) {
|
137
|
-
|
138
|
-
|
139
|
-
flags_value = resolve_flags_value(klass, obj);
|
140
|
-
if (!NIL_P(flags_value))
|
141
|
-
obj = flags_value;
|
108
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(obj, klass))) {
|
109
|
+
obj = rb_funcall(klass, id_new, 1, obj);
|
142
110
|
}
|
143
111
|
|
144
|
-
|
145
|
-
return flags_get_holder(obj)->value;
|
146
|
-
else
|
147
|
-
rb_raise(rb_eTypeError, "not a %s: %s",
|
148
|
-
rb_class2name(klass), RBG_INSPECT(obj));
|
112
|
+
return flags_get_holder(obj)->value;
|
149
113
|
}
|
150
114
|
|
151
115
|
/**********************************************************************/
|
@@ -251,29 +215,80 @@ flags_s_allocate(VALUE self)
|
|
251
215
|
}
|
252
216
|
}
|
253
217
|
|
218
|
+
static guint
|
219
|
+
resolve_flags_value(VALUE klass, GFlagsClass *gclass, VALUE flag_or_flags)
|
220
|
+
{
|
221
|
+
guint value = 0;
|
222
|
+
|
223
|
+
switch (TYPE(flag_or_flags)) {
|
224
|
+
case RUBY_T_NIL:
|
225
|
+
value = 0;
|
226
|
+
break;
|
227
|
+
case RUBY_T_FIXNUM:
|
228
|
+
case RUBY_T_BIGNUM:
|
229
|
+
value = NUM2UINT(flag_or_flags);
|
230
|
+
break;
|
231
|
+
case RUBY_T_STRING:
|
232
|
+
case RUBY_T_SYMBOL:
|
233
|
+
{
|
234
|
+
const gchar *name;
|
235
|
+
GFlagsValue *info;
|
236
|
+
|
237
|
+
name = RVAL2CSTR_ACCEPT_SYMBOL(flag_or_flags);
|
238
|
+
info = g_flags_get_value_by_name(gclass, name);
|
239
|
+
if (!info) {
|
240
|
+
gchar *nick;
|
241
|
+
nick = rbg_name_to_nick(name);
|
242
|
+
info = g_flags_get_value_by_nick(gclass, nick);
|
243
|
+
g_free(nick);
|
244
|
+
}
|
245
|
+
if (!info) {
|
246
|
+
rb_raise(rb_eArgError,
|
247
|
+
"unknown flag name: <%s>(%s)",
|
248
|
+
name,
|
249
|
+
g_type_name(G_TYPE_FROM_CLASS(gclass)));
|
250
|
+
}
|
251
|
+
value = info->value;
|
252
|
+
break;
|
253
|
+
}
|
254
|
+
case RUBY_T_ARRAY:
|
255
|
+
{
|
256
|
+
int i, n;
|
257
|
+
n = RARRAY_LEN(flag_or_flags);
|
258
|
+
for (i = 0; i < n; i++) {
|
259
|
+
value |= resolve_flags_value(klass,
|
260
|
+
gclass,
|
261
|
+
RARRAY_PTR(flag_or_flags)[i]);
|
262
|
+
}
|
263
|
+
break;
|
264
|
+
}
|
265
|
+
default:
|
266
|
+
if (RVAL2CBOOL(rb_obj_is_kind_of(flag_or_flags, klass))) {
|
267
|
+
value = NUM2UINT(rb_funcall(flag_or_flags, id_to_i, 0));
|
268
|
+
} else {
|
269
|
+
rb_raise(rb_eArgError,
|
270
|
+
"flag value must be one of "
|
271
|
+
"nil, Fixnum, String, Symbol, %s or Array of them: "
|
272
|
+
"<%s>(%s)",
|
273
|
+
RBG_INSPECT(klass),
|
274
|
+
RBG_INSPECT(flag_or_flags),
|
275
|
+
g_type_name(G_TYPE_FROM_CLASS(gclass)));
|
276
|
+
}
|
277
|
+
break;
|
278
|
+
}
|
279
|
+
|
280
|
+
return value;
|
281
|
+
}
|
282
|
+
|
254
283
|
static VALUE
|
255
284
|
rg_initialize(int argc, VALUE* argv, VALUE self)
|
256
285
|
{
|
257
286
|
flags_holder* p = flags_get_holder(self);
|
258
|
-
VALUE
|
287
|
+
VALUE flag_or_flags;
|
259
288
|
|
260
|
-
rb_scan_args(argc, argv, "01", &
|
289
|
+
rb_scan_args(argc, argv, "01", &flag_or_flags);
|
261
290
|
|
262
|
-
|
263
|
-
p->value = 0;
|
264
|
-
} else {
|
265
|
-
if (rb_respond_to(arg, rb_intern("to_str"))) {
|
266
|
-
const char* str = StringValuePtr(arg);
|
267
|
-
p->info = g_flags_get_value_by_name(p->gclass, str);
|
268
|
-
if (!p->info)
|
269
|
-
p->info = g_flags_get_value_by_nick(p->gclass, str);
|
270
|
-
if (!p->info)
|
271
|
-
rb_raise(rb_eArgError, "invalid argument");
|
272
|
-
p->value = p->info->value;
|
273
|
-
} else {
|
274
|
-
p->value = NUM2UINT(arg);
|
275
|
-
}
|
276
|
-
}
|
291
|
+
p->value = resolve_flags_value(CLASS_OF(self), p->gclass, flag_or_flags);
|
277
292
|
|
278
293
|
if (!p->info) {
|
279
294
|
guint i;
|
@@ -316,27 +331,56 @@ rg_nick(VALUE self)
|
|
316
331
|
#define FLAGS_COMP_ELSE -2
|
317
332
|
#define FLAGS_COMP_INCOMPARABLE -3
|
318
333
|
|
334
|
+
typedef struct {
|
335
|
+
GType gtype;
|
336
|
+
VALUE rb_value;
|
337
|
+
guint value;
|
338
|
+
gboolean compatible;
|
339
|
+
} compare_data;
|
340
|
+
|
341
|
+
static VALUE
|
342
|
+
flags_compare_get_flags_body(VALUE user_data)
|
343
|
+
{
|
344
|
+
compare_data *data = (compare_data *)user_data;
|
345
|
+
|
346
|
+
data->value = rbgobj_get_flags(data->rb_value, data->gtype);
|
347
|
+
data->compatible = TRUE;
|
348
|
+
|
349
|
+
return Qnil;
|
350
|
+
}
|
351
|
+
|
352
|
+
static VALUE
|
353
|
+
flags_compare_get_flags_rescue(VALUE user_data)
|
354
|
+
{
|
355
|
+
compare_data *data = (compare_data *)user_data;
|
356
|
+
|
357
|
+
data->compatible = FALSE;
|
358
|
+
|
359
|
+
return Qnil;
|
360
|
+
}
|
361
|
+
|
319
362
|
static gint
|
320
363
|
flags_compare(VALUE self, VALUE rhs)
|
321
364
|
{
|
322
365
|
flags_holder* p = flags_get_holder(self);
|
323
|
-
|
324
|
-
VALUE klass = GTYPE2CLASS(gtype);
|
325
|
-
guint rhs_val;
|
366
|
+
compare_data data;
|
326
367
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
}
|
368
|
+
data.gtype = G_TYPE_FROM_CLASS(p->gclass);
|
369
|
+
data.rb_value = rhs;
|
370
|
+
data.value = 0;
|
371
|
+
data.compatible = TRUE;
|
332
372
|
|
333
|
-
|
373
|
+
rb_rescue(flags_compare_get_flags_body, (VALUE)&data,
|
374
|
+
flags_compare_get_flags_rescue, (VALUE)&data);
|
375
|
+
if (!data.compatible) {
|
376
|
+
return FLAGS_COMP_INCOMPARABLE;
|
377
|
+
}
|
334
378
|
|
335
|
-
if (p->value ==
|
379
|
+
if (p->value == data.value)
|
336
380
|
return FLAGS_COMP_EQUAL;
|
337
|
-
else if ((p->value &
|
381
|
+
else if ((p->value & data.value) == data.value)
|
338
382
|
return FLAGS_COMP_GREATER;
|
339
|
-
else if ((p->value &
|
383
|
+
else if ((p->value & data.value) == p->value)
|
340
384
|
return FLAGS_COMP_LESS;
|
341
385
|
else
|
342
386
|
return FLAGS_COMP_ELSE;
|
@@ -476,6 +520,7 @@ Init_gobject_gflags(void)
|
|
476
520
|
id_module_eval = rb_intern("module_eval");
|
477
521
|
id_new = rb_intern("new");
|
478
522
|
id_or = rb_intern("|");
|
523
|
+
id_to_i = rb_intern("to_i");
|
479
524
|
|
480
525
|
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_FLAGS, "Flags", mGLib);
|
481
526
|
|
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) 2011 Ruby-GNOME2 Project Team
|
3
|
+
* Copyright (C) 2011-2015 Ruby-GNOME2 Project Team
|
4
4
|
* Copyright (C) 2002-2004 Ruby-GNOME2 Project Team
|
5
5
|
* Copyright (C) 2002-2003 Masahiro Sakai
|
6
6
|
* Copyright (C) 1998-2000 Yukihiro Matsumoto,
|
@@ -170,15 +170,6 @@ rbgobj_init_object_class(VALUE klass)
|
|
170
170
|
|
171
171
|
/**********************************************************************/
|
172
172
|
|
173
|
-
static gboolean
|
174
|
-
is_gtkobject(GObject *gobj)
|
175
|
-
{
|
176
|
-
static GType gtype_gtkobject = G_TYPE_INVALID;
|
177
|
-
if (!gtype_gtkobject)
|
178
|
-
gtype_gtkobject = g_type_from_name("GtkObject");
|
179
|
-
return gtype_gtkobject && g_type_is_a(G_OBJECT_TYPE(gobj), gtype_gtkobject);
|
180
|
-
}
|
181
|
-
|
182
173
|
static void
|
183
174
|
gobj_mark(gpointer ptr)
|
184
175
|
{
|
@@ -227,15 +218,7 @@ rg_s_new_bang(int argc, VALUE *argv, VALUE self)
|
|
227
218
|
|
228
219
|
gobj = rbgobj_gobject_new(cinfo->gtype, params_hash);
|
229
220
|
result = GOBJ2RVAL(gobj);
|
230
|
-
|
231
|
-
// XXX: Ughhhhh
|
232
|
-
if (is_gtkobject(gobj)){
|
233
|
-
// We can't call gtk_object_sink() here.
|
234
|
-
// But hopefully someone will call it in the future.
|
235
|
-
//gtk_object_sink(gobj);
|
236
|
-
} else {
|
237
|
-
g_object_unref(gobj);
|
238
|
-
}
|
221
|
+
g_object_unref(gobj);
|
239
222
|
|
240
223
|
return result;
|
241
224
|
}
|
@@ -637,6 +620,35 @@ rg_type_name(VALUE self)
|
|
637
620
|
return CSTR2RVAL(G_OBJECT_TYPE_NAME(RVAL2GOBJ(self)));
|
638
621
|
}
|
639
622
|
|
623
|
+
#if GLIB_CHECK_VERSION(2, 26, 0)
|
624
|
+
static VALUE
|
625
|
+
rg_bind_property(VALUE self,
|
626
|
+
VALUE rb_source_property,
|
627
|
+
VALUE rb_target,
|
628
|
+
VALUE rb_target_property,
|
629
|
+
VALUE rb_flags)
|
630
|
+
{
|
631
|
+
gpointer source;
|
632
|
+
const gchar *source_property;
|
633
|
+
gpointer target;
|
634
|
+
const gchar *target_property;
|
635
|
+
GBindingFlags flags;
|
636
|
+
GBinding *binding;
|
637
|
+
|
638
|
+
source = RVAL2GOBJ(self);
|
639
|
+
source_property = RVAL2CSTR(rb_source_property);
|
640
|
+
target = RVAL2GOBJ(rb_target);
|
641
|
+
target_property = RVAL2CSTR(rb_target_property);
|
642
|
+
flags = RVAL2GBINDINGFLAGS(rb_flags);
|
643
|
+
|
644
|
+
binding = g_object_bind_property(source, source_property,
|
645
|
+
target, target_property,
|
646
|
+
flags);
|
647
|
+
|
648
|
+
return GOBJ2RVAL(binding);
|
649
|
+
}
|
650
|
+
#endif
|
651
|
+
|
640
652
|
static VALUE
|
641
653
|
rg_initialize(int argc, VALUE *argv, VALUE self)
|
642
654
|
{
|
@@ -658,13 +670,6 @@ rg_initialize(int argc, VALUE *argv, VALUE self)
|
|
658
670
|
|
659
671
|
gobj = rbgobj_gobject_new(RVAL2GTYPE(self), params_hash);
|
660
672
|
|
661
|
-
if (is_gtkobject(gobj)){
|
662
|
-
gobj = g_object_ref(gobj);
|
663
|
-
// We can't call gtk_object_sink() here.
|
664
|
-
// But hopefully someone will call it in the future.
|
665
|
-
//gtk_object_sink(gobj);
|
666
|
-
}
|
667
|
-
|
668
673
|
G_INITIALIZE(self, gobj);
|
669
674
|
return Qnil;
|
670
675
|
}
|
@@ -679,7 +684,6 @@ gobj_ref_count(VALUE self)
|
|
679
684
|
|
680
685
|
/**********************************************************************/
|
681
686
|
|
682
|
-
static VALUE proc_mod_eval;
|
683
687
|
static GQuark q_ruby_setter;
|
684
688
|
static GQuark q_ruby_getter;
|
685
689
|
|
@@ -732,55 +736,51 @@ set_prop_func(GObject* object,
|
|
732
736
|
rb_funcall(GOBJ2RVAL(object), ruby_setter, 1, GVAL2RVAL(value));
|
733
737
|
}
|
734
738
|
|
735
|
-
|
736
|
-
|
737
|
-
class_init_func(gpointer g_class_, G_GNUC_UNUSED gpointer class_data)
|
739
|
+
void
|
740
|
+
rbgobj_class_init_func(gpointer g_class, G_GNUC_UNUSED gpointer class_data)
|
738
741
|
{
|
739
|
-
GObjectClass*
|
742
|
+
GObjectClass* g_object_class = G_OBJECT_CLASS(g_class);
|
740
743
|
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
#if 0
|
745
|
-
VALUE class_init_proc = (VALUE)class_data;
|
746
|
-
rb_funcall(proc_mod_eval, rb_intern("call"), 2,
|
747
|
-
GTYPE2CLASS(G_TYPE_FROM_CLASS(g_class)), class_init_proc);
|
748
|
-
#endif
|
744
|
+
g_object_class->set_property = set_prop_func;
|
745
|
+
g_object_class->get_property = get_prop_func;
|
749
746
|
}
|
750
747
|
|
751
|
-
|
752
|
-
|
748
|
+
void
|
749
|
+
rbgobj_register_type(VALUE klass, VALUE type_name, GClassInitFunc class_init)
|
753
750
|
{
|
754
|
-
VALUE type_name, flags;
|
755
|
-
volatile VALUE class_init_proc = Qnil;
|
756
751
|
GType parent_type;
|
757
|
-
GTypeInfo*
|
758
|
-
|
759
|
-
rb_scan_args(argc, argv, "03", &type_name, &info, &flags);
|
752
|
+
GTypeInfo *info;
|
760
753
|
|
761
754
|
{
|
762
|
-
const RGObjClassInfo*
|
763
|
-
if (cinfo->klass ==
|
764
|
-
rb_raise(rb_eTypeError,
|
755
|
+
const RGObjClassInfo *cinfo = rbgobj_lookup_class(klass);
|
756
|
+
if (cinfo->klass == klass)
|
757
|
+
rb_raise(rb_eTypeError,
|
758
|
+
"already registered class: <%s>",
|
759
|
+
RBG_INSPECT(klass));
|
765
760
|
}
|
766
761
|
|
767
762
|
{
|
768
|
-
VALUE superclass = rb_funcall(
|
769
|
-
const RGObjClassInfo*
|
763
|
+
VALUE superclass = rb_funcall(klass, rb_intern("superclass"), 0);
|
764
|
+
const RGObjClassInfo *cinfo = rbgobj_lookup_class(superclass);
|
770
765
|
if (cinfo->klass != superclass)
|
771
|
-
rb_raise(rb_eTypeError,
|
766
|
+
rb_raise(rb_eTypeError,
|
767
|
+
"super class must be registered to GLib: <%s>",
|
768
|
+
RBG_INSPECT(superclass));
|
772
769
|
parent_type = cinfo->gtype;
|
773
770
|
}
|
774
771
|
|
775
772
|
if (NIL_P(type_name)) {
|
776
|
-
VALUE
|
773
|
+
VALUE klass_name = rb_funcall(klass, rb_intern("name"), 0);
|
777
774
|
|
778
|
-
if (strlen(
|
779
|
-
rb_raise(rb_eTypeError,
|
775
|
+
if (strlen(StringValueCStr(klass_name)) == 0)
|
776
|
+
rb_raise(rb_eTypeError,
|
777
|
+
"can't determine type name: <%s>",
|
778
|
+
RBG_INSPECT(klass));
|
780
779
|
|
781
|
-
type_name = rb_funcall(
|
782
|
-
|
783
|
-
|
780
|
+
type_name = rb_funcall(klass_name, rb_intern("gsub"),
|
781
|
+
2,
|
782
|
+
rb_str_new_cstr("::"),
|
783
|
+
rb_str_new_cstr(""));
|
784
784
|
}
|
785
785
|
|
786
786
|
{
|
@@ -793,9 +793,9 @@ rg_s_type_register(int argc, VALUE* argv, VALUE self)
|
|
793
793
|
info->class_size = query.class_size;
|
794
794
|
info->base_init = NULL;
|
795
795
|
info->base_finalize = NULL;
|
796
|
-
info->class_init =
|
796
|
+
info->class_init = class_init;
|
797
797
|
info->class_finalize = NULL;
|
798
|
-
info->class_data =
|
798
|
+
info->class_data = NULL;
|
799
799
|
info->instance_size = query.instance_size;
|
800
800
|
info->n_preallocs = 0;
|
801
801
|
info->instance_init = NULL;
|
@@ -804,37 +804,49 @@ rg_s_type_register(int argc, VALUE* argv, VALUE self)
|
|
804
804
|
|
805
805
|
{
|
806
806
|
GType type = g_type_register_static(parent_type,
|
807
|
-
|
807
|
+
StringValueCStr(type_name),
|
808
808
|
info,
|
809
|
-
|
810
|
-
G_RELATIVE(self, class_init_proc);
|
809
|
+
0);
|
811
810
|
|
812
|
-
rbgobj_register_class(
|
811
|
+
rbgobj_register_class(klass, type, TRUE, TRUE);
|
813
812
|
|
814
813
|
{
|
815
|
-
RGObjClassInfo*
|
814
|
+
RGObjClassInfo *cinfo = (RGObjClassInfo *)rbgobj_lookup_class(klass);
|
816
815
|
cinfo->flags |= RBGOBJ_DEFINED_BY_RUBY;
|
817
816
|
}
|
818
817
|
|
819
818
|
{
|
820
819
|
GType parent = g_type_parent(type);
|
821
|
-
const RGObjClassInfo*
|
822
|
-
VALUE
|
823
|
-
|
824
|
-
|
825
|
-
|
820
|
+
const RGObjClassInfo *cinfo = GTYPE2CINFO(parent);
|
821
|
+
VALUE initialize_module;
|
822
|
+
|
823
|
+
initialize_module = rb_define_module_under(klass,
|
824
|
+
RubyGObjectHookModule);
|
825
|
+
if (!(cinfo->flags & RBGOBJ_DEFINED_BY_RUBY)) {
|
826
|
+
rbg_define_method(initialize_module,
|
827
|
+
"initialize", rg_initialize, -1);
|
826
828
|
}
|
827
829
|
|
828
|
-
rb_include_module(
|
830
|
+
rb_include_module(klass, initialize_module);
|
829
831
|
}
|
830
|
-
|
831
|
-
return Qnil;
|
832
832
|
}
|
833
833
|
}
|
834
834
|
|
835
|
+
static VALUE
|
836
|
+
rg_s_type_register(int argc, VALUE *argv, VALUE self)
|
837
|
+
{
|
838
|
+
VALUE type_name;
|
839
|
+
|
840
|
+
rb_scan_args(argc, argv, "01", &type_name);
|
841
|
+
|
842
|
+
rbgobj_register_type(self, type_name, rbgobj_class_init_func);
|
843
|
+
|
844
|
+
return Qnil;
|
845
|
+
}
|
846
|
+
|
835
847
|
/**********************************************************************/
|
836
848
|
|
837
|
-
void
|
849
|
+
void
|
838
850
|
Init_gobject_gobject(void)
|
839
851
|
{
|
840
852
|
RG_TARGET_NAMESPACE = G_DEF_CLASS_WITH_GC_FUNC(G_TYPE_OBJECT, "Object", mGLib,
|
@@ -869,6 +881,11 @@ Init_gobject_gobject(void)
|
|
869
881
|
RG_DEF_METHOD(inspect, 0);
|
870
882
|
RG_DEF_METHOD(type_name, 0);
|
871
883
|
|
884
|
+
#if GLIB_CHECK_VERSION(2, 26, 0)
|
885
|
+
RG_DEF_METHOD(bind_property, 4);
|
886
|
+
G_DEF_CLASS(G_TYPE_BINDING_FLAGS, "BindingFlags", mGLib);
|
887
|
+
#endif
|
888
|
+
|
872
889
|
eNoPropertyError = rb_define_class_under(mGLib, "NoPropertyError",
|
873
890
|
rb_eNameError);
|
874
891
|
|
@@ -879,7 +896,4 @@ Init_gobject_gobject(void)
|
|
879
896
|
|
880
897
|
/* subclass */
|
881
898
|
RG_DEF_SMETHOD(type_register, -1);
|
882
|
-
|
883
|
-
rb_global_variable(&proc_mod_eval);
|
884
|
-
proc_mod_eval = rb_eval_string("lambda{|obj,proc| obj.module_eval(&proc)}");
|
885
899
|
}
|