glib2 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/glib2/extconf.rb +1 -0
- data/ext/glib2/glib2.def +23 -0
- data/ext/glib2/rbgcompat.h +19 -5
- data/ext/glib2/rbglib.c +607 -160
- data/ext/glib2/rbglib.h +81 -26
- data/ext/glib2/rbglib2conversions.h +57 -0
- data/ext/glib2/rbglib_bookmarkfile.c +117 -107
- data/ext/glib2/rbglib_completion.c +37 -26
- data/ext/glib2/rbglib_convert.c +42 -30
- data/ext/glib2/rbglib_error.c +20 -10
- data/ext/glib2/rbglib_fileutils.c +48 -37
- data/ext/glib2/rbglib_i18n.c +24 -14
- data/ext/glib2/rbglib_int64.c +24 -16
- data/ext/glib2/rbglib_iochannel.c +146 -204
- data/ext/glib2/rbglib_iochannel_win32_socket.c +56 -0
- data/ext/glib2/rbglib_iochannelerror.c +49 -0
- data/ext/glib2/rbglib_keyfile.c +171 -182
- data/ext/glib2/rbglib_maincontext.c +107 -92
- data/ext/glib2/rbglib_mainloop.c +34 -21
- data/ext/glib2/rbglib_messages.c +53 -44
- data/ext/glib2/rbglib_pollfd.c +37 -26
- data/ext/glib2/rbglib_shell.c +29 -22
- data/ext/glib2/rbglib_shellerror.c +34 -0
- data/ext/glib2/rbglib_source.c +49 -36
- data/ext/glib2/rbglib_spawn.c +50 -61
- data/ext/glib2/rbglib_spawnerror.c +53 -0
- data/ext/glib2/rbglib_threads.c +28 -16
- data/ext/glib2/rbglib_timer.c +35 -24
- data/ext/glib2/rbglib_ucs4.c +79 -0
- data/ext/glib2/rbglib_unichar.c +209 -0
- data/ext/glib2/rbglib_unicode.c +34 -584
- data/ext/glib2/rbglib_utf16.c +78 -0
- data/ext/glib2/rbglib_utf8.c +259 -0
- data/ext/glib2/rbglib_utils.c +95 -91
- data/ext/glib2/rbglib_win32.c +52 -45
- data/ext/glib2/rbglibdeprecated.c +56 -0
- data/ext/glib2/rbglibdeprecated.h +34 -0
- data/ext/glib2/rbgobj_boxed.c +40 -33
- data/ext/glib2/rbgobj_closure.c +45 -34
- data/ext/glib2/rbgobj_convert.c +19 -9
- data/ext/glib2/rbgobj_enumflags.c +109 -0
- data/ext/glib2/rbgobj_enums.c +67 -646
- data/ext/glib2/rbgobj_flags.c +522 -0
- data/ext/glib2/rbgobj_fundamental.c +19 -6
- data/ext/glib2/rbgobj_object.c +90 -81
- data/ext/glib2/rbgobj_param.c +78 -83
- data/ext/glib2/rbgobj_paramspecs.c +20 -12
- data/ext/glib2/rbgobj_signal.c +248 -193
- data/ext/glib2/rbgobj_strv.c +20 -10
- data/ext/glib2/rbgobj_type.c +153 -149
- data/ext/glib2/rbgobj_typeinstance.c +49 -39
- data/ext/glib2/rbgobj_typeinterface.c +37 -27
- data/ext/glib2/rbgobj_typemodule.c +39 -29
- data/ext/glib2/rbgobj_typeplugin.c +36 -26
- data/ext/glib2/rbgobj_value.c +41 -11
- data/ext/glib2/rbgobj_valuearray.c +59 -23
- data/ext/glib2/rbgobj_valuetypes.c +27 -17
- data/ext/glib2/rbgobject.c +26 -40
- data/ext/glib2/rbgobject.h +38 -20
- data/ext/glib2/rbgprivate.h +87 -5
- data/ext/glib2/rbgutil.c +52 -238
- data/ext/glib2/rbgutil.h +55 -42
- data/ext/glib2/rbgutil_callback.c +47 -12
- data/ext/glib2/rbgutil_list.c +173 -0
- data/ext/glib2/rbgutil_list.h +85 -0
- data/ext/glib2/rbgutildeprecated.c +252 -0
- data/ext/glib2/rbgutildeprecated.h +63 -0
- data/lib/glib-mkenums.rb +2 -2
- data/lib/glib2.rb +2 -25
- data/lib/glib2/deprecatable.rb +149 -0
- data/lib/gnome2-raketask.rb +45 -15
- data/lib/gnome2-win32-binary-downloader.rb +1 -1
- data/lib/mkmf-gnome2.rb +37 -18
- data/test/test_flags.rb +129 -0
- data/test/test_key_file.rb +6 -2
- data/test/test_spawn.rb +33 -0
- metadata +26 -7
- data/ChangeLog +0 -3513
data/ext/glib2/rbgobj_strv.c
CHANGED
@@ -1,13 +1,23 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
/*
|
3
|
+
* Copyright (C) 2011 Ruby-GNOME2 Project Team
|
4
|
+
* Copyright (C) 2005 Masao Mutoh
|
5
|
+
*
|
6
|
+
* This library is free software; you can redistribute it and/or
|
7
|
+
* modify it under the terms of the GNU Lesser General Public
|
8
|
+
* License as published by the Free Software Foundation; either
|
9
|
+
* version 2.1 of the License, or (at your option) any later version.
|
10
|
+
*
|
11
|
+
* This library is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
* Lesser General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU Lesser General Public
|
17
|
+
* License along with this library; if not, write to the Free Software
|
18
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
+
* MA 02110-1301 USA
|
20
|
+
*/
|
11
21
|
|
12
22
|
#include "rbgprivate.h"
|
13
23
|
|
@@ -28,7 +38,7 @@ strv_from_ruby(VALUE from, GValue *to)
|
|
28
38
|
}
|
29
39
|
|
30
40
|
void
|
31
|
-
Init_gobject_gstrv()
|
41
|
+
Init_gobject_gstrv(void)
|
32
42
|
{
|
33
43
|
/* GStrv is treated as Array */
|
34
44
|
rbgobj_register_g2r_func(G_TYPE_STRV, strv_to_ruby);
|
data/ext/glib2/rbgobj_type.c
CHANGED
@@ -1,19 +1,29 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
2
|
+
/*
|
3
|
+
* Copyright (C) 2011 Ruby-GNOME2 Project Team
|
4
|
+
* Copyright (C) 2002-2009 Ruby-GNOME2 Project Team
|
5
|
+
* Copyright (C) 2002,2003 Masahiro Sakai
|
6
|
+
*
|
7
|
+
* This library is free software; you can redistribute it and/or
|
8
|
+
* modify it under the terms of the GNU Lesser General Public
|
9
|
+
* License as published by the Free Software Foundation; either
|
10
|
+
* version 2.1 of the License, or (at your option) any later version.
|
11
|
+
*
|
12
|
+
* This library is distributed in the hope that it will be useful,
|
13
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15
|
+
* Lesser General Public License for more details.
|
16
|
+
*
|
17
|
+
* You should have received a copy of the GNU Lesser General Public
|
18
|
+
* License along with this library; if not, write to the Free Software
|
19
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
* MA 02110-1301 USA
|
21
|
+
*/
|
14
22
|
|
15
23
|
#include "rbgprivate.h"
|
16
24
|
|
25
|
+
#define RG_TARGET_NAMESPACE rbgobj_cType
|
26
|
+
|
17
27
|
/**********************************************************************/
|
18
28
|
/* Type Mapping */
|
19
29
|
|
@@ -52,7 +62,6 @@ cinfo_mark(RGObjClassInfo* cinfo)
|
|
52
62
|
rb_gc_mark(cinfo->klass);
|
53
63
|
}
|
54
64
|
|
55
|
-
|
56
65
|
const RGObjClassInfo *
|
57
66
|
rbgobj_lookup_class(VALUE klass)
|
58
67
|
{
|
@@ -77,8 +86,8 @@ rbgobj_lookup_class(VALUE klass)
|
|
77
86
|
}
|
78
87
|
|
79
88
|
static const RGObjClassInfo *rbgobj_lookup_class_by_gtype_without_lock(GType gtype,
|
80
|
-
|
81
|
-
|
89
|
+
VALUE parent,
|
90
|
+
gboolean create_class);
|
82
91
|
|
83
92
|
static VALUE
|
84
93
|
get_superclass(GType gtype)
|
@@ -106,12 +115,12 @@ get_superclass(GType gtype)
|
|
106
115
|
default:
|
107
116
|
{
|
108
117
|
const RGObjClassInfo *cinfo_super;
|
109
|
-
|
118
|
+
GType parent_type;
|
110
119
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
120
|
+
parent_type = g_type_parent(gtype);
|
121
|
+
cinfo_super = rbgobj_lookup_class_by_gtype_without_lock(parent_type,
|
122
|
+
Qnil,
|
123
|
+
TRUE);
|
115
124
|
return cinfo_super->klass;
|
116
125
|
}
|
117
126
|
}
|
@@ -119,7 +128,7 @@ get_superclass(GType gtype)
|
|
119
128
|
|
120
129
|
static const RGObjClassInfo *
|
121
130
|
rbgobj_lookup_class_by_gtype_without_lock(GType gtype, VALUE parent,
|
122
|
-
|
131
|
+
gboolean create_class)
|
123
132
|
{
|
124
133
|
GType fundamental_type;
|
125
134
|
RGObjClassInfo* cinfo;
|
@@ -135,7 +144,7 @@ rbgobj_lookup_class_by_gtype_without_lock(GType gtype, VALUE parent,
|
|
135
144
|
return cinfo;
|
136
145
|
|
137
146
|
if (!create_class)
|
138
|
-
|
147
|
+
return NULL;
|
139
148
|
|
140
149
|
c = Data_Make_Struct(rb_cData, RGObjClassInfo, cinfo_mark, NULL, cinfo);
|
141
150
|
cinfo->gtype = gtype;
|
@@ -154,11 +163,11 @@ rbgobj_lookup_class_by_gtype_without_lock(GType gtype, VALUE parent,
|
|
154
163
|
if (NIL_P(parent)) parent = get_superclass(gtype);
|
155
164
|
cinfo->klass = rb_funcall(rb_cClass, id_new, 1, parent);
|
156
165
|
break;
|
157
|
-
|
166
|
+
|
158
167
|
case G_TYPE_INTERFACE:
|
159
168
|
cinfo->klass = rb_module_new();
|
160
169
|
break;
|
161
|
-
|
170
|
+
|
162
171
|
default:
|
163
172
|
if (NIL_P(parent)) parent = get_superclass(gtype);
|
164
173
|
if (NIL_P(parent)) {
|
@@ -173,7 +182,7 @@ rbgobj_lookup_class_by_gtype_without_lock(GType gtype, VALUE parent,
|
|
173
182
|
}
|
174
183
|
|
175
184
|
cinfod = (RGObjClassInfoDynamic *)g_hash_table_lookup(dynamic_gtype_list,
|
176
|
-
|
185
|
+
g_type_name(gtype));
|
177
186
|
if (cinfod){
|
178
187
|
cinfo->mark = cinfod->mark;
|
179
188
|
cinfo->free = cinfod->free;
|
@@ -182,10 +191,10 @@ rbgobj_lookup_class_by_gtype_without_lock(GType gtype, VALUE parent,
|
|
182
191
|
|
183
192
|
rb_hash_aset(klass_to_cinfo, cinfo->klass, c);
|
184
193
|
g_hash_table_insert(gtype_to_cinfo, GUINT_TO_POINTER(gtype), cinfo);
|
185
|
-
|
194
|
+
|
186
195
|
if (G_TYPE_IS_CLASSED(gtype))
|
187
196
|
gclass = g_type_class_ref(gtype);
|
188
|
-
|
197
|
+
|
189
198
|
if (G_TYPE_IS_INSTANTIATABLE(gtype) || G_TYPE_IS_INTERFACE(gtype))
|
190
199
|
rbgobj_define_action_methods(cinfo->klass);
|
191
200
|
|
@@ -196,11 +205,11 @@ rbgobj_lookup_class_by_gtype_without_lock(GType gtype, VALUE parent,
|
|
196
205
|
|
197
206
|
interfaces = g_type_interfaces(gtype, &n_interfaces);
|
198
207
|
for (i = 0; i < n_interfaces; i++){
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
208
|
+
const RGObjClassInfo *iface_cinfo;
|
209
|
+
iface_cinfo =
|
210
|
+
rbgobj_lookup_class_by_gtype_without_lock(interfaces[i],
|
211
|
+
Qnil,
|
212
|
+
TRUE);
|
204
213
|
rb_include_module(cinfo->klass, iface_cinfo->klass);
|
205
214
|
}
|
206
215
|
g_free(interfaces);
|
@@ -239,13 +248,13 @@ rbgobj_lookup_class_by_gtype_body(VALUE data)
|
|
239
248
|
const RGObjClassInfo *cinfo;
|
240
249
|
|
241
250
|
cinfo = rbgobj_lookup_class_by_gtype_without_lock(cdata->gtype,
|
242
|
-
|
243
|
-
|
251
|
+
cdata->parent,
|
252
|
+
cdata->create_class);
|
244
253
|
return (VALUE)cinfo;
|
245
254
|
}
|
246
255
|
|
247
256
|
static VALUE
|
248
|
-
rbgobj_lookup_class_by_gtype_ensure(VALUE data)
|
257
|
+
rbgobj_lookup_class_by_gtype_ensure(G_GNUC_UNUSED VALUE data)
|
249
258
|
{
|
250
259
|
rb_funcall(lookup_class_mutex, id_unlock, 0);
|
251
260
|
return Qundef;
|
@@ -259,7 +268,7 @@ rbgobj_lookup_class_by_gtype(GType gtype, VALUE parent)
|
|
259
268
|
|
260
269
|
const RGObjClassInfo *
|
261
270
|
rbgobj_lookup_class_by_gtype_full(GType gtype, VALUE parent,
|
262
|
-
|
271
|
+
gboolean create_class)
|
263
272
|
{
|
264
273
|
RGObjClassByGtypeData data;
|
265
274
|
|
@@ -268,14 +277,14 @@ rbgobj_lookup_class_by_gtype_full(GType gtype, VALUE parent,
|
|
268
277
|
data.create_class = create_class;
|
269
278
|
|
270
279
|
if (create_class) {
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
280
|
+
rb_funcall(lookup_class_mutex, id_lock, 0);
|
281
|
+
return (RGObjClassInfo *)rb_ensure(rbgobj_lookup_class_by_gtype_body,
|
282
|
+
(VALUE)&data,
|
283
|
+
rbgobj_lookup_class_by_gtype_ensure,
|
284
|
+
(VALUE)&data);
|
276
285
|
} else {
|
277
|
-
|
278
|
-
|
286
|
+
return rbgobj_lookup_class_by_gtype_without_lock(gtype, parent,
|
287
|
+
create_class);
|
279
288
|
}
|
280
289
|
}
|
281
290
|
|
@@ -325,16 +334,16 @@ rbgobj_register_class(VALUE klass,
|
|
325
334
|
VALUE c = Qnil;
|
326
335
|
|
327
336
|
if (klass2gtype)
|
328
|
-
|
337
|
+
c = Data_Make_Struct(rb_cData, RGObjClassInfo, cinfo_mark, NULL, cinfo);
|
329
338
|
if (gtype2klass && !cinfo)
|
330
|
-
|
339
|
+
cinfo = g_new(RGObjClassInfo, 1);
|
331
340
|
|
332
341
|
if (cinfo) {
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
342
|
+
cinfo->klass = klass;
|
343
|
+
cinfo->gtype = gtype;
|
344
|
+
cinfo->mark = NULL;
|
345
|
+
cinfo->free = NULL;
|
346
|
+
cinfo->flags = 0;
|
338
347
|
}
|
339
348
|
|
340
349
|
if (klass2gtype)
|
@@ -351,7 +360,7 @@ rbgobj_register_class(VALUE klass,
|
|
351
360
|
rbgobj_register_class(klass, gtype, FALSE, TRUE)
|
352
361
|
|
353
362
|
static void
|
354
|
-
|
363
|
+
init_typemap(void)
|
355
364
|
{
|
356
365
|
id_new = rb_intern("new");
|
357
366
|
id_superclass = rb_intern("superclass");
|
@@ -391,13 +400,13 @@ Init_typemap()
|
|
391
400
|
/**********************************************************************/
|
392
401
|
/* GLib::Type */
|
393
402
|
|
394
|
-
VALUE
|
403
|
+
VALUE RG_TARGET_NAMESPACE;
|
395
404
|
static ID id_gtype;
|
396
405
|
|
397
406
|
VALUE
|
398
407
|
rbgobj_gtype_new(GType gtype)
|
399
408
|
{
|
400
|
-
VALUE result = rb_obj_alloc(
|
409
|
+
VALUE result = rb_obj_alloc(RG_TARGET_NAMESPACE);
|
401
410
|
VALUE arg = ULONG2NUM(gtype);
|
402
411
|
rb_obj_call_init(result, 1, &arg);
|
403
412
|
return result;
|
@@ -406,7 +415,7 @@ rbgobj_gtype_new(GType gtype)
|
|
406
415
|
GType
|
407
416
|
rbgobj_gtype_get(VALUE self)
|
408
417
|
{
|
409
|
-
if (RVAL2CBOOL(rb_obj_is_kind_of(self,
|
418
|
+
if (RVAL2CBOOL(rb_obj_is_kind_of(self, RG_TARGET_NAMESPACE))) {
|
410
419
|
return NUM2ULONG(rb_ivar_get(self, id_gtype));
|
411
420
|
} else {
|
412
421
|
return CLASS2GTYPE(self);
|
@@ -415,7 +424,7 @@ rbgobj_gtype_get(VALUE self)
|
|
415
424
|
}
|
416
425
|
|
417
426
|
static VALUE
|
418
|
-
|
427
|
+
rg_initialize(VALUE self, VALUE type)
|
419
428
|
{
|
420
429
|
GType gtype;
|
421
430
|
|
@@ -432,12 +441,12 @@ type_initialize(VALUE self, VALUE type)
|
|
432
441
|
rb_raise(rb_eArgError, "invalid type");
|
433
442
|
|
434
443
|
rb_ivar_set(self, id_gtype, UINT2NUM(gtype));
|
435
|
-
|
444
|
+
|
436
445
|
return Qnil;
|
437
446
|
}
|
438
447
|
|
439
448
|
static VALUE
|
440
|
-
|
449
|
+
rg_inspect(VALUE self)
|
441
450
|
{
|
442
451
|
GType gtype = rbgobj_gtype_get(self);
|
443
452
|
gchar* str;
|
@@ -451,9 +460,9 @@ type_inspect(VALUE self)
|
|
451
460
|
}
|
452
461
|
|
453
462
|
static VALUE
|
454
|
-
|
463
|
+
rg_operator_type_compare(VALUE self, VALUE other)
|
455
464
|
{
|
456
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(other,
|
465
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
457
466
|
return Qnil;
|
458
467
|
else {
|
459
468
|
GType a = rbgobj_gtype_get(self);
|
@@ -471,9 +480,9 @@ type_compare(VALUE self, VALUE other)
|
|
471
480
|
}
|
472
481
|
|
473
482
|
static VALUE
|
474
|
-
|
483
|
+
rg_operator_type_eq(VALUE self, VALUE other)
|
475
484
|
{
|
476
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(other,
|
485
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
477
486
|
return Qnil;
|
478
487
|
else {
|
479
488
|
GType a = rbgobj_gtype_get(self);
|
@@ -483,9 +492,9 @@ type_eq(VALUE self, VALUE other)
|
|
483
492
|
}
|
484
493
|
|
485
494
|
static VALUE
|
486
|
-
|
495
|
+
rg_operator_type_lt_eq(VALUE self, VALUE other)
|
487
496
|
{
|
488
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(other,
|
497
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
489
498
|
return Qnil;
|
490
499
|
else {
|
491
500
|
GType a = rbgobj_gtype_get(self);
|
@@ -495,9 +504,9 @@ type_lt_eq(VALUE self, VALUE other)
|
|
495
504
|
}
|
496
505
|
|
497
506
|
static VALUE
|
498
|
-
|
507
|
+
rg_operator_type_gt_eq(VALUE self, VALUE other)
|
499
508
|
{
|
500
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(other,
|
509
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
501
510
|
return Qnil;
|
502
511
|
else {
|
503
512
|
GType a = rbgobj_gtype_get(self);
|
@@ -507,9 +516,9 @@ type_gt_eq(VALUE self, VALUE other)
|
|
507
516
|
}
|
508
517
|
|
509
518
|
static VALUE
|
510
|
-
|
519
|
+
rg_operator_type_lt(VALUE self, VALUE other)
|
511
520
|
{
|
512
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(other,
|
521
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
513
522
|
return Qnil;
|
514
523
|
else {
|
515
524
|
GType a = rbgobj_gtype_get(self);
|
@@ -519,9 +528,9 @@ type_lt(VALUE self, VALUE other)
|
|
519
528
|
}
|
520
529
|
|
521
530
|
static VALUE
|
522
|
-
|
531
|
+
rg_operator_type_gt(VALUE self, VALUE other)
|
523
532
|
{
|
524
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(other,
|
533
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(other, RG_TARGET_NAMESPACE)))
|
525
534
|
return Qnil;
|
526
535
|
else {
|
527
536
|
GType a = rbgobj_gtype_get(self);
|
@@ -531,110 +540,110 @@ type_gt(VALUE self, VALUE other)
|
|
531
540
|
}
|
532
541
|
|
533
542
|
static VALUE
|
534
|
-
|
543
|
+
rg_hash(VALUE self)
|
535
544
|
{
|
536
545
|
return rb_ivar_get(self, id_gtype);
|
537
546
|
}
|
538
547
|
|
539
548
|
static VALUE
|
540
|
-
|
549
|
+
rg_to_class(VALUE self)
|
541
550
|
{
|
542
551
|
return GTYPE2CLASS(rbgobj_gtype_get(self));
|
543
552
|
}
|
544
553
|
|
545
554
|
static VALUE
|
546
|
-
|
555
|
+
rg_fundamental(VALUE self)
|
547
556
|
{
|
548
557
|
return rbgobj_gtype_new(G_TYPE_FUNDAMENTAL(rbgobj_gtype_get(self)));
|
549
558
|
}
|
550
559
|
|
551
560
|
static VALUE
|
552
|
-
|
561
|
+
rg_fundamental_p(VALUE self)
|
553
562
|
{
|
554
563
|
return CBOOL2RVAL(G_TYPE_IS_FUNDAMENTAL(rbgobj_gtype_get(self)));
|
555
564
|
}
|
556
565
|
|
557
566
|
static VALUE
|
558
|
-
|
567
|
+
rg_derived_p(VALUE self)
|
559
568
|
{
|
560
569
|
return CBOOL2RVAL(G_TYPE_IS_DERIVED(rbgobj_gtype_get(self)));
|
561
570
|
}
|
562
571
|
|
563
572
|
static VALUE
|
564
|
-
|
573
|
+
rg_interface_p(VALUE self)
|
565
574
|
{
|
566
575
|
return CBOOL2RVAL(G_TYPE_IS_INTERFACE(rbgobj_gtype_get(self)));
|
567
576
|
}
|
568
577
|
|
569
578
|
static VALUE
|
570
|
-
|
579
|
+
rg_classed_p(VALUE self)
|
571
580
|
{
|
572
581
|
return CBOOL2RVAL(G_TYPE_IS_CLASSED(rbgobj_gtype_get(self)));
|
573
582
|
}
|
574
583
|
|
575
584
|
static VALUE
|
576
|
-
|
585
|
+
rg_instantiatable_p(VALUE self)
|
577
586
|
{
|
578
587
|
return CBOOL2RVAL(G_TYPE_IS_INSTANTIATABLE(rbgobj_gtype_get(self)));
|
579
588
|
}
|
580
589
|
|
581
590
|
static VALUE
|
582
|
-
|
591
|
+
rg_derivable_p(VALUE self)
|
583
592
|
{
|
584
593
|
return CBOOL2RVAL(G_TYPE_IS_DERIVABLE(rbgobj_gtype_get(self)));
|
585
594
|
}
|
586
595
|
|
587
596
|
static VALUE
|
588
|
-
|
597
|
+
rg_deep_derivable_p(VALUE self)
|
589
598
|
{
|
590
599
|
return CBOOL2RVAL(G_TYPE_IS_DEEP_DERIVABLE(rbgobj_gtype_get(self)));
|
591
600
|
}
|
592
601
|
|
593
602
|
static VALUE
|
594
|
-
|
603
|
+
rg_abstract_p(VALUE self)
|
595
604
|
{
|
596
605
|
return CBOOL2RVAL(G_TYPE_IS_ABSTRACT(rbgobj_gtype_get(self)));
|
597
606
|
}
|
598
607
|
|
599
608
|
static VALUE
|
600
|
-
|
609
|
+
rg_value_abstract_p(VALUE self)
|
601
610
|
{
|
602
611
|
return CBOOL2RVAL(G_TYPE_IS_VALUE_ABSTRACT(rbgobj_gtype_get(self)));
|
603
612
|
}
|
604
613
|
|
605
614
|
static VALUE
|
606
|
-
|
615
|
+
rg_value_type_p(VALUE self)
|
607
616
|
{
|
608
617
|
return CBOOL2RVAL(G_TYPE_IS_VALUE_TYPE(rbgobj_gtype_get(self)));
|
609
618
|
}
|
610
619
|
|
611
620
|
static VALUE
|
612
|
-
|
621
|
+
rg_has_value_table(VALUE self)
|
613
622
|
{
|
614
623
|
return CBOOL2RVAL(G_TYPE_HAS_VALUE_TABLE(rbgobj_gtype_get(self)));
|
615
624
|
}
|
616
625
|
|
617
626
|
static VALUE
|
618
|
-
|
627
|
+
rg_name(VALUE self)
|
619
628
|
{
|
620
629
|
return rb_str_new2(g_type_name(rbgobj_gtype_get(self)));
|
621
630
|
}
|
622
631
|
|
623
632
|
static VALUE
|
624
|
-
|
633
|
+
rg_parent(VALUE self)
|
625
634
|
{
|
626
635
|
GType parent = g_type_parent(rbgobj_gtype_get(self));
|
627
636
|
return parent ? rbgobj_gtype_new(parent) : Qnil;
|
628
637
|
}
|
629
638
|
|
630
639
|
static VALUE
|
631
|
-
|
640
|
+
rg_depth(VALUE self)
|
632
641
|
{
|
633
642
|
return UINT2NUM(g_type_depth(rbgobj_gtype_get(self)));
|
634
643
|
}
|
635
644
|
|
636
645
|
static VALUE
|
637
|
-
|
646
|
+
rg_next_base(VALUE leaf_type, VALUE root_type)
|
638
647
|
{
|
639
648
|
GType ret = g_type_next_base(rbgobj_gtype_get(leaf_type),
|
640
649
|
rbgobj_gtype_get(root_type));
|
@@ -642,7 +651,7 @@ type_next_base(VALUE leaf_type, VALUE root_type)
|
|
642
651
|
}
|
643
652
|
|
644
653
|
static VALUE
|
645
|
-
|
654
|
+
rg_type_is_a_p(VALUE self, VALUE is_a_type)
|
646
655
|
{
|
647
656
|
return CBOOL2RVAL(g_type_is_a(rbgobj_gtype_get(self), rbgobj_gtype_get(is_a_type)));
|
648
657
|
}
|
@@ -653,12 +662,12 @@ gpointer g_type_class_peek (GType type);
|
|
653
662
|
void g_type_class_unref (gpointer g_class);
|
654
663
|
gpointer g_type_class_peek_parent (gpointer g_class);
|
655
664
|
gpointer g_type_interface_peek (gpointer instance_class,
|
656
|
-
|
665
|
+
GType iface_type);
|
657
666
|
gpointer g_type_interface_peek_parent (gpointer g_iface);
|
658
667
|
#endif
|
659
668
|
|
660
669
|
static VALUE
|
661
|
-
|
670
|
+
rg_children(VALUE self)
|
662
671
|
{
|
663
672
|
guint n_children;
|
664
673
|
GType* types;
|
@@ -675,7 +684,7 @@ type_children(VALUE self)
|
|
675
684
|
}
|
676
685
|
|
677
686
|
static VALUE
|
678
|
-
|
687
|
+
rg_interfaces(VALUE self)
|
679
688
|
{
|
680
689
|
guint n_interfaces;
|
681
690
|
GType* types;
|
@@ -692,7 +701,7 @@ type_interfaces(VALUE self)
|
|
692
701
|
}
|
693
702
|
|
694
703
|
static VALUE
|
695
|
-
|
704
|
+
rg_class_size(VALUE self)
|
696
705
|
{
|
697
706
|
GTypeQuery query;
|
698
707
|
g_type_query(rbgobj_gtype_get(self), &query);
|
@@ -700,25 +709,30 @@ type_class_size(VALUE self)
|
|
700
709
|
}
|
701
710
|
|
702
711
|
static VALUE
|
703
|
-
|
712
|
+
rg_instance_size(VALUE self)
|
704
713
|
{
|
705
714
|
GTypeQuery query;
|
706
715
|
g_type_query(rbgobj_gtype_get(self), &query);
|
707
716
|
return UINT2NUM(query.instance_size);
|
708
717
|
}
|
709
718
|
|
710
|
-
|
711
719
|
static inline void
|
712
720
|
_def_fundamental_type(VALUE ary, GType gtype, const char* name)
|
713
721
|
{
|
714
722
|
VALUE c = rbgobj_gtype_new(gtype);
|
715
|
-
rb_define_const(
|
723
|
+
rb_define_const(RG_TARGET_NAMESPACE, name, c);
|
716
724
|
rb_ary_push(ary, c);
|
717
725
|
}
|
718
726
|
|
719
|
-
|
720
|
-
|
727
|
+
/**********************************************************************/
|
728
|
+
|
729
|
+
void
|
730
|
+
Init_gobject_gtype(void)
|
721
731
|
{
|
732
|
+
g_type_init();
|
733
|
+
init_typemap();
|
734
|
+
|
735
|
+
/* type */
|
722
736
|
rb_cMutex = rb_const_get(rb_cObject, rb_intern("Mutex"));
|
723
737
|
id_lock = rb_intern("lock");
|
724
738
|
id_unlock = rb_intern("unlock");
|
@@ -728,50 +742,50 @@ Init_type()
|
|
728
742
|
dynamic_gtype_list = g_hash_table_new(g_str_hash, g_str_equal);
|
729
743
|
id_gtype = rb_intern("__gobject_gtype__");
|
730
744
|
|
731
|
-
|
732
|
-
|
733
|
-
rb_define_alias(CLASS_OF(
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
745
|
+
RG_TARGET_NAMESPACE = rb_define_class_under(mGLib, "Type", rb_cObject);
|
746
|
+
|
747
|
+
rb_define_alias(CLASS_OF(RG_TARGET_NAMESPACE), "[]", "new");
|
748
|
+
RG_DEF_METHOD(initialize, 1);
|
749
|
+
RG_DEF_METHOD(inspect, 0);
|
750
|
+
RG_DEF_METHOD_OPERATOR("<=>", type_compare, 1);
|
751
|
+
RG_DEF_METHOD_OPERATOR("==", type_eq, 1);
|
752
|
+
RG_DEF_METHOD_OPERATOR("<=", type_lt_eq, 1);
|
753
|
+
RG_DEF_METHOD_OPERATOR(">=", type_gt_eq, 1);
|
754
|
+
RG_DEF_METHOD_OPERATOR("<", type_lt, 1);
|
755
|
+
RG_DEF_METHOD_OPERATOR(">", type_gt, 1);
|
756
|
+
RG_DEF_ALIAS("eql?", "==");
|
757
|
+
RG_DEF_METHOD(hash, 0);
|
758
|
+
RG_DEF_ALIAS("to_i", "hash");
|
759
|
+
RG_DEF_ALIAS("to_int", "hash");
|
760
|
+
RG_DEF_METHOD(to_class, 0);
|
761
|
+
|
762
|
+
RG_DEF_METHOD(fundamental, 0);
|
763
|
+
RG_DEF_METHOD_P(fundamental, 0);
|
764
|
+
RG_DEF_METHOD_P(derived, 0);
|
765
|
+
RG_DEF_METHOD_P(interface, 0);
|
766
|
+
RG_DEF_METHOD_P(classed, 0);
|
767
|
+
RG_DEF_METHOD_P(instantiatable, 0);
|
768
|
+
RG_DEF_METHOD_P(derivable, 0);
|
769
|
+
RG_DEF_METHOD_P(deep_derivable, 0);
|
770
|
+
RG_DEF_METHOD_P(abstract, 0);
|
771
|
+
RG_DEF_METHOD_P(value_abstract, 0);
|
772
|
+
RG_DEF_METHOD_P(value_type, 0);
|
773
|
+
RG_DEF_METHOD(has_value_table, 0);
|
774
|
+
|
775
|
+
RG_DEF_METHOD(name, 0);
|
776
|
+
RG_DEF_ALIAS("to_s", "name");
|
777
|
+
RG_DEF_METHOD(parent, 0);
|
778
|
+
RG_DEF_METHOD(depth, 0);
|
779
|
+
RG_DEF_METHOD(next_base, 1);
|
780
|
+
RG_DEF_METHOD_P(type_is_a, 1);
|
781
|
+
RG_DEF_METHOD(children, 0);
|
782
|
+
RG_DEF_METHOD(interfaces, 0);
|
783
|
+
RG_DEF_METHOD(class_size, 0);
|
784
|
+
RG_DEF_METHOD(instance_size, 0);
|
771
785
|
|
772
786
|
{
|
773
787
|
VALUE ary = rb_ary_new();
|
774
|
-
rb_define_const(
|
788
|
+
rb_define_const(RG_TARGET_NAMESPACE, "FUNDAMENTAL_MAX", INT2FIX(G_TYPE_FUNDAMENTAL_MAX));
|
775
789
|
_def_fundamental_type(ary, G_TYPE_NONE, "NONE");
|
776
790
|
_def_fundamental_type(ary, G_TYPE_INTERFACE, "INTERFACE");
|
777
791
|
_def_fundamental_type(ary, G_TYPE_CHAR, "CHAR");
|
@@ -792,16 +806,6 @@ Init_type()
|
|
792
806
|
_def_fundamental_type(ary, G_TYPE_BOXED, "BOXED");
|
793
807
|
_def_fundamental_type(ary, G_TYPE_PARAM, "PARAM");
|
794
808
|
_def_fundamental_type(ary, G_TYPE_OBJECT, "OBJECT");
|
795
|
-
rb_define_const(
|
809
|
+
rb_define_const(RG_TARGET_NAMESPACE, "FUNDAMENTAL_TYPES", ary); /* FIXME: better name */
|
796
810
|
}
|
797
811
|
}
|
798
|
-
|
799
|
-
/**********************************************************************/
|
800
|
-
|
801
|
-
void
|
802
|
-
Init_gobject_gtype()
|
803
|
-
{
|
804
|
-
g_type_init();
|
805
|
-
Init_typemap();
|
806
|
-
Init_type();
|
807
|
-
}
|