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
@@ -1,16 +1,24 @@
|
|
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) 2004 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
|
|
data/ext/glib2/rbgobj_signal.c
CHANGED
@@ -1,20 +1,30 @@
|
|
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-2004 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
|
|
17
|
-
|
25
|
+
#define RG_TARGET_NAMESPACE cSignal
|
26
|
+
|
27
|
+
static VALUE RG_TARGET_NAMESPACE;
|
18
28
|
VALUE rbgobj_signal_wrap(guint sig_id);
|
19
29
|
|
20
30
|
#define default_handler_method_prefix "signal_do_"
|
@@ -47,10 +57,10 @@ static VALUE eNoSignalError;
|
|
47
57
|
|
48
58
|
// FIXME: use rb_protect
|
49
59
|
static gboolean
|
50
|
-
accumulator_func(GSignalInvocationHint*
|
51
|
-
GValue*
|
52
|
-
const GValue*
|
53
|
-
gpointer
|
60
|
+
accumulator_func(G_GNUC_UNUSED GSignalInvocationHint *ihint,
|
61
|
+
GValue *return_accu,
|
62
|
+
const GValue *handler_return,
|
63
|
+
gpointer data)
|
54
64
|
{
|
55
65
|
VALUE proc = (VALUE)data;
|
56
66
|
VALUE val = GVAL2RVAL(return_accu);
|
@@ -72,34 +82,97 @@ accumulator_func(GSignalInvocationHint* ihint,
|
|
72
82
|
return continue_emission;
|
73
83
|
}
|
74
84
|
|
85
|
+
struct rval2gtypes_args {
|
86
|
+
VALUE ary;
|
87
|
+
long n;
|
88
|
+
GType *result;
|
89
|
+
};
|
90
|
+
|
91
|
+
static VALUE
|
92
|
+
rbg_rval2gtypes_body(VALUE value)
|
93
|
+
{
|
94
|
+
long i;
|
95
|
+
struct rval2gtypes_args *args = (struct rval2gtypes_args *)value;
|
96
|
+
|
97
|
+
for (i = 0; i < args->n; i++)
|
98
|
+
args->result[i] = rbgobj_gtype_get(RARRAY_PTR(args->ary)[i]);
|
99
|
+
|
100
|
+
return Qnil;
|
101
|
+
}
|
102
|
+
|
103
|
+
static G_GNUC_NORETURN VALUE
|
104
|
+
rbg_rval2gtypes_rescue(VALUE value)
|
105
|
+
{
|
106
|
+
g_free(((struct rval2gtypes_args *)value)->result);
|
107
|
+
|
108
|
+
rb_exc_raise(rb_errinfo());
|
109
|
+
}
|
110
|
+
|
111
|
+
static GType *
|
112
|
+
rbg_rval2gtypes(volatile VALUE *value, long *n)
|
113
|
+
{
|
114
|
+
struct rval2gtypes_args args;
|
115
|
+
|
116
|
+
args.ary = *value = rb_ary_dup(rb_ary_to_ary(*value));
|
117
|
+
args.n = RARRAY_LEN(args.ary);
|
118
|
+
args.result = g_new(GType, args.n + 1);
|
119
|
+
|
120
|
+
rb_rescue(rbg_rval2gtypes_body, (VALUE)&args,
|
121
|
+
rbg_rval2gtypes_rescue, (VALUE)&args);
|
122
|
+
|
123
|
+
if (n != NULL)
|
124
|
+
*n = args.n;
|
125
|
+
|
126
|
+
return args.result;
|
127
|
+
}
|
128
|
+
|
129
|
+
static GType *
|
130
|
+
rbg_rval2gtypes_accept_nil(volatile VALUE *value, long *n)
|
131
|
+
{
|
132
|
+
if (!NIL_P(*value))
|
133
|
+
return rbg_rval2gtypes(value, n);
|
134
|
+
|
135
|
+
if (n != NULL)
|
136
|
+
*n = 0;
|
137
|
+
|
138
|
+
return NULL;
|
139
|
+
}
|
140
|
+
|
141
|
+
#define RVAL2GTYPES(value, n) rbg_rval2gtypes(&(value), &(n))
|
142
|
+
#define RVAL2GTYPES_ACCEPT_NIL(value, n) rbg_rval2gtypes_accept_nil(&(value), &(n))
|
143
|
+
|
75
144
|
static VALUE
|
76
145
|
gobj_s_signal_new(int argc, VALUE* argv, VALUE self)
|
77
146
|
{
|
78
|
-
const RGObjClassInfo*
|
79
|
-
VALUE
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
147
|
+
const RGObjClassInfo *cinfo = rbgobj_lookup_class(self);
|
148
|
+
VALUE rbsignal_name, rbsignal_flags, accumulator, rbreturn_type, params;
|
149
|
+
const gchar *signal_name;
|
150
|
+
GSignalFlags signal_flags;
|
151
|
+
GClosure *class_closure;
|
152
|
+
GType return_type;
|
153
|
+
GType *param_types;
|
154
|
+
long n_params;
|
155
|
+
guint signal;
|
84
156
|
|
85
|
-
rb_scan_args(argc, argv, "4*",
|
86
|
-
&accumulator, &
|
157
|
+
rb_scan_args(argc, argv, "4*",
|
158
|
+
&rbsignal_name, &rbsignal_flags, &accumulator, &rbreturn_type, ¶ms);
|
87
159
|
|
88
160
|
if (cinfo->klass != self)
|
89
|
-
rb_raise(rb_eTypeError, "
|
161
|
+
rb_raise(rb_eTypeError, "not a registered class: %s",
|
90
162
|
rb_class2name(self));
|
91
163
|
|
92
|
-
if (SYMBOL_P(
|
93
|
-
|
94
|
-
|
95
|
-
|
164
|
+
if (SYMBOL_P(rbsignal_name))
|
165
|
+
rbsignal_name = rb_str_new2(rb_id2name(SYM2ID(rbsignal_name)));
|
166
|
+
signal_name = RVAL2CSTR(rbsignal_name);
|
167
|
+
|
168
|
+
signal_flags = NUM2INT(rbsignal_flags);
|
96
169
|
|
97
170
|
{
|
98
171
|
VALUE factory;
|
99
172
|
VALUE proc;
|
100
173
|
ID method_id;
|
101
174
|
|
102
|
-
method_id = rb_to_id(rb_str_concat(rb_str_new2(default_handler_method_prefix),
|
175
|
+
method_id = rb_to_id(rb_str_concat(rb_str_new2(default_handler_method_prefix), rbsignal_name));
|
103
176
|
|
104
177
|
factory = rb_eval_string(
|
105
178
|
"lambda{|klass, id|\n"
|
@@ -110,37 +183,33 @@ gobj_s_signal_new(int argc, VALUE* argv, VALUE self)
|
|
110
183
|
proc = rb_funcall(factory, rb_intern("call"), 2, self, ID2SYM(method_id));
|
111
184
|
|
112
185
|
class_closure = g_rclosure_new(proc, Qnil, NULL);
|
186
|
+
/* TODO: Should this be done even if something below it fails? */
|
113
187
|
g_rclosure_attach(class_closure, self);
|
114
188
|
}
|
115
189
|
|
116
|
-
|
117
|
-
|
118
|
-
param_types = NULL;
|
119
|
-
} else {
|
120
|
-
n_params = RARRAY_LEN(params);
|
121
|
-
param_types = ALLOCA_N(GType, n_params);
|
122
|
-
for (i = 0; i < n_params; i++)
|
123
|
-
param_types[i] = rbgobj_gtype_get(RARRAY_PTR(params)[i]);
|
124
|
-
}
|
190
|
+
return_type = rbgobj_gtype_get(rbreturn_type);
|
191
|
+
param_types = RVAL2GTYPES_ACCEPT_NIL(params, n_params);
|
125
192
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
193
|
+
signal = g_signal_newv(signal_name,
|
194
|
+
cinfo->gtype,
|
195
|
+
signal_flags,
|
196
|
+
class_closure,
|
197
|
+
NIL_P(accumulator) ? NULL : accumulator_func,
|
198
|
+
NIL_P(accumulator) ? NULL : (gpointer)accumulator,
|
199
|
+
NULL, /* c_marshaller */
|
200
|
+
return_type,
|
201
|
+
n_params,
|
202
|
+
param_types);
|
203
|
+
|
204
|
+
g_free(param_types);
|
205
|
+
|
206
|
+
if (!signal)
|
138
207
|
rb_raise(rb_eRuntimeError, "g_signal_newv failed");
|
139
208
|
|
140
209
|
if (!NIL_P(accumulator))
|
141
210
|
G_RELATIVE(self, accumulator); /* FIXME */
|
142
211
|
|
143
|
-
return rbgobj_signal_wrap(
|
212
|
+
return rbgobj_signal_wrap(signal);
|
144
213
|
}
|
145
214
|
|
146
215
|
static void
|
@@ -190,7 +259,7 @@ gobj_s_signal(VALUE self, VALUE name)
|
|
190
259
|
sig_name = rb_id2name(SYM2ID(name));
|
191
260
|
else
|
192
261
|
sig_name = StringValuePtr(name);
|
193
|
-
|
262
|
+
|
194
263
|
sig_id = g_signal_lookup(sig_name, CLASS2GTYPE(self));
|
195
264
|
if (!sig_id)
|
196
265
|
rb_raise(eNoSignalError, "no such signal: %s", sig_name);
|
@@ -298,7 +367,7 @@ struct emit_arg {
|
|
298
367
|
static VALUE
|
299
368
|
emit_body(struct emit_arg* arg)
|
300
369
|
{
|
301
|
-
GValue param =
|
370
|
+
GValue param = G_VALUE_INIT;
|
302
371
|
|
303
372
|
g_value_init(¶m, G_TYPE_FROM_INSTANCE(RVAL2GOBJ(arg->self)));
|
304
373
|
rbgobj_rvalue_to_gvalue(arg->self, ¶m);
|
@@ -320,7 +389,7 @@ emit_body(struct emit_arg* arg)
|
|
320
389
|
|
321
390
|
{
|
322
391
|
gboolean use_ret = (arg->query.return_type != G_TYPE_NONE);
|
323
|
-
GValue return_value =
|
392
|
+
GValue return_value = G_VALUE_INIT;
|
324
393
|
|
325
394
|
if (use_ret)
|
326
395
|
g_value_init(&return_value,
|
@@ -376,7 +445,7 @@ gobj_sig_emit(int argc, VALUE *argv, VALUE self)
|
|
376
445
|
|
377
446
|
arg.self = self;
|
378
447
|
arg.instance_and_params = g_value_array_new(1 + arg.query.n_params);
|
379
|
-
|
448
|
+
|
380
449
|
return rb_ensure(emit_body, (VALUE)&arg, emit_ensure, (VALUE)&arg);
|
381
450
|
}
|
382
451
|
|
@@ -444,34 +513,34 @@ gobj_sig_handler_is_connected(VALUE self, VALUE id)
|
|
444
513
|
}
|
445
514
|
|
446
515
|
#if 0
|
447
|
-
gulong
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
guint
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
guint
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
guint
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
516
|
+
gulong g_signal_handler_find (gpointer instance,
|
517
|
+
GSignalMatchType mask,
|
518
|
+
guint signal_id,
|
519
|
+
GQuark detail,
|
520
|
+
GClosure *closure,
|
521
|
+
gpointer func,
|
522
|
+
gpointer data);
|
523
|
+
guint g_signal_handlers_block_matched (gpointer instance,
|
524
|
+
GSignalMatchType mask,
|
525
|
+
guint signal_id,
|
526
|
+
GQuark detail,
|
527
|
+
GClosure *closure,
|
528
|
+
gpointer func,
|
529
|
+
gpointer data);
|
530
|
+
guint g_signal_handlers_unblock_matched (gpointer instance,
|
531
|
+
GSignalMatchType mask,
|
532
|
+
guint signal_id,
|
533
|
+
GQuark detail,
|
534
|
+
GClosure *closure,
|
535
|
+
gpointer func,
|
536
|
+
gpointer data);
|
537
|
+
guint g_signal_handlers_disconnect_matched (gpointer instance,
|
538
|
+
GSignalMatchType mask,
|
539
|
+
guint signal_id,
|
540
|
+
GQuark detail,
|
541
|
+
GClosure *closure,
|
542
|
+
gpointer func,
|
543
|
+
gpointer data);
|
475
544
|
#endif
|
476
545
|
|
477
546
|
static VALUE
|
@@ -493,7 +562,7 @@ chain_from_overridden_body(struct emit_arg* arg)
|
|
493
562
|
|
494
563
|
{
|
495
564
|
gboolean use_ret = (arg->query.return_type != G_TYPE_NONE);
|
496
|
-
GValue return_value =
|
565
|
+
GValue return_value = G_VALUE_INIT;
|
497
566
|
|
498
567
|
if (use_ret)
|
499
568
|
g_value_init(&return_value,
|
@@ -581,45 +650,6 @@ gobj_s_method_added(VALUE klass, VALUE id)
|
|
581
650
|
return Qnil;
|
582
651
|
}
|
583
652
|
|
584
|
-
static void
|
585
|
-
Init_signal_misc()
|
586
|
-
{
|
587
|
-
signal_func_table = rb_hash_new();
|
588
|
-
rb_global_variable(&signal_func_table);
|
589
|
-
|
590
|
-
rb_define_method(mMetaInterface, "signal_new", gobj_s_signal_new, -1);
|
591
|
-
rb_define_method(mMetaInterface, "signals", gobj_s_signals, -1);
|
592
|
-
rb_define_method(mMetaInterface, "signal", gobj_s_signal, 1);
|
593
|
-
|
594
|
-
rb_define_method(cInstantiatable, "signal_has_handler_pending?",
|
595
|
-
gobj_sig_has_handler_pending, -1);
|
596
|
-
rb_define_method(cInstantiatable, "signal_connect", gobj_sig_connect, -1);
|
597
|
-
rb_define_method(cInstantiatable, "signal_connect_after",
|
598
|
-
gobj_sig_connect_after, -1);
|
599
|
-
|
600
|
-
#if 0
|
601
|
-
rb_define_method(cInstantiatable, "signal_invocation_hint",
|
602
|
-
gobj_sig_get_invocation_hint, 0);
|
603
|
-
#endif
|
604
|
-
|
605
|
-
rb_define_method(cInstantiatable, "signal_emit",
|
606
|
-
gobj_sig_emit, -1);
|
607
|
-
rb_define_method(cInstantiatable, "signal_emit_stop",
|
608
|
-
gobj_sig_emit_stop, 1);
|
609
|
-
rb_define_method(cInstantiatable, "signal_handler_block",
|
610
|
-
gobj_sig_handler_block, 1);
|
611
|
-
rb_define_method(cInstantiatable, "signal_handler_unblock",
|
612
|
-
gobj_sig_handler_unblock, 1);
|
613
|
-
rb_define_method(cInstantiatable, "signal_handler_disconnect",
|
614
|
-
gobj_sig_handler_disconnect, 1);
|
615
|
-
|
616
|
-
rb_define_method(cInstantiatable, "signal_handler_is_connected?",
|
617
|
-
gobj_sig_handler_is_connected, 1);
|
618
|
-
|
619
|
-
rb_define_singleton_method(cInstantiatable, "method_added",
|
620
|
-
gobj_s_method_added, 1);
|
621
|
-
}
|
622
|
-
|
623
653
|
/**********************************************************************/
|
624
654
|
|
625
655
|
VALUE
|
@@ -628,13 +658,13 @@ rbgobj_signal_wrap(guint sig_id)
|
|
628
658
|
VALUE result;
|
629
659
|
GSignalQuery* query;
|
630
660
|
|
631
|
-
result = Data_Make_Struct(
|
661
|
+
result = Data_Make_Struct(RG_TARGET_NAMESPACE, GSignalQuery, NULL, free, query);
|
632
662
|
g_signal_query(sig_id, query);
|
633
663
|
return result;
|
634
664
|
}
|
635
665
|
|
636
666
|
static VALUE
|
637
|
-
|
667
|
+
rg_id(VALUE self)
|
638
668
|
{
|
639
669
|
GSignalQuery* query;
|
640
670
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -642,7 +672,7 @@ query_signal_id(VALUE self)
|
|
642
672
|
}
|
643
673
|
|
644
674
|
static VALUE
|
645
|
-
|
675
|
+
rg_name(VALUE self)
|
646
676
|
{
|
647
677
|
GSignalQuery* query;
|
648
678
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -650,7 +680,7 @@ query_signal_name(VALUE self)
|
|
650
680
|
}
|
651
681
|
|
652
682
|
static VALUE
|
653
|
-
|
683
|
+
rg_itype(VALUE self)
|
654
684
|
{
|
655
685
|
GSignalQuery* query;
|
656
686
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -658,7 +688,7 @@ query_itype(VALUE self)
|
|
658
688
|
}
|
659
689
|
|
660
690
|
static VALUE
|
661
|
-
|
691
|
+
rg_owner(VALUE self)
|
662
692
|
{
|
663
693
|
GSignalQuery* query;
|
664
694
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -666,7 +696,7 @@ query_owner(VALUE self)
|
|
666
696
|
}
|
667
697
|
|
668
698
|
static VALUE
|
669
|
-
|
699
|
+
rg_return_type(VALUE self)
|
670
700
|
{
|
671
701
|
GSignalQuery* query;
|
672
702
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -674,7 +704,7 @@ query_return_type(VALUE self)
|
|
674
704
|
}
|
675
705
|
|
676
706
|
static VALUE
|
677
|
-
|
707
|
+
rg_flags(VALUE self)
|
678
708
|
{
|
679
709
|
GSignalQuery* query;
|
680
710
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -682,7 +712,7 @@ query_signal_flags(VALUE self)
|
|
682
712
|
}
|
683
713
|
|
684
714
|
static VALUE
|
685
|
-
|
715
|
+
rg_param_types(VALUE self)
|
686
716
|
{
|
687
717
|
GSignalQuery* query;
|
688
718
|
VALUE result;
|
@@ -697,7 +727,7 @@ query_param_types(VALUE self)
|
|
697
727
|
}
|
698
728
|
|
699
729
|
static VALUE
|
700
|
-
|
730
|
+
rg_inspect(VALUE self)
|
701
731
|
{
|
702
732
|
GSignalQuery* query;
|
703
733
|
gchar* s;
|
@@ -734,7 +764,6 @@ query_is_flag(G_SIGNAL_DETAILED)
|
|
734
764
|
query_is_flag(G_SIGNAL_ACTION)
|
735
765
|
query_is_flag(G_SIGNAL_NO_HOOKS)
|
736
766
|
|
737
|
-
|
738
767
|
static gboolean
|
739
768
|
hook_func(GSignalInvocationHint* ihint,
|
740
769
|
guint n_param_values,
|
@@ -742,7 +771,7 @@ hook_func(GSignalInvocationHint* ihint,
|
|
742
771
|
gpointer data)
|
743
772
|
{
|
744
773
|
GClosure* closure = data;
|
745
|
-
GValue ret_val =
|
774
|
+
GValue ret_val =G_VALUE_INIT;
|
746
775
|
gboolean ret;
|
747
776
|
|
748
777
|
g_value_init(&ret_val, G_TYPE_BOOLEAN);
|
@@ -768,7 +797,7 @@ g_signal_add_emission_hook_closure (guint signal_id,
|
|
768
797
|
}
|
769
798
|
|
770
799
|
static VALUE
|
771
|
-
|
800
|
+
rg_add_emission_hook(int argc, VALUE* argv, VALUE self)
|
772
801
|
{
|
773
802
|
GSignalQuery* query;
|
774
803
|
VALUE proc;
|
@@ -798,7 +827,7 @@ signal_add_emission_hook(int argc, VALUE* argv, VALUE self)
|
|
798
827
|
}
|
799
828
|
|
800
829
|
static VALUE
|
801
|
-
|
830
|
+
rg_remove_emission_hook(VALUE self, VALUE hook_id)
|
802
831
|
{
|
803
832
|
GSignalQuery* query;
|
804
833
|
Data_Get_Struct(self, GSignalQuery, query);
|
@@ -806,56 +835,6 @@ signal_remove_emission_hook(VALUE self, VALUE hook_id)
|
|
806
835
|
return Qnil;
|
807
836
|
}
|
808
837
|
|
809
|
-
static void
|
810
|
-
Init_signal_class()
|
811
|
-
{
|
812
|
-
VALUE cSignalFlags, cSignalMatchType;
|
813
|
-
|
814
|
-
cSignal = rb_define_class_under(mGLib, "Signal", rb_cData);
|
815
|
-
|
816
|
-
rb_define_method(cSignal, "id", query_signal_id, 0);
|
817
|
-
rb_define_method(cSignal, "name", query_signal_name, 0);
|
818
|
-
rb_define_method(cSignal, "flags", query_signal_flags, 0);
|
819
|
-
rb_define_method(cSignal, "itype", query_itype, 0);
|
820
|
-
rb_define_method(cSignal, "owner", query_owner, 0);
|
821
|
-
rb_define_method(cSignal, "return_type", query_return_type, 0);
|
822
|
-
rb_define_method(cSignal, "param_types", query_param_types, 0);
|
823
|
-
rb_define_method(cSignal, "inspect", query_inspect, 0);
|
824
|
-
|
825
|
-
rb_define_method(cSignal, "add_emission_hook", signal_add_emission_hook, -1);
|
826
|
-
rb_define_method(cSignal, "remove_emission_hook", signal_remove_emission_hook, 1);
|
827
|
-
|
828
|
-
/* GSignalFlags */
|
829
|
-
cSignalFlags = G_DEF_CLASS(G_TYPE_SIGNAL_FLAGS, "SignalFlags", mGLib);
|
830
|
-
G_DEF_CONSTANTS(cSignal, G_TYPE_SIGNAL_FLAGS, "G_SIGNAL_");
|
831
|
-
rb_define_const(cSignalFlags, "MASK", INT2NUM(G_SIGNAL_FLAGS_MASK));
|
832
|
-
rb_define_const(cSignal, "FLAGS_MASK", INT2NUM(G_SIGNAL_FLAGS_MASK));
|
833
|
-
|
834
|
-
rb_define_method(cSignal, "run_first?", query_is_G_SIGNAL_RUN_FIRST, 0);
|
835
|
-
rb_define_method(cSignal, "run_last?", query_is_G_SIGNAL_RUN_LAST, 0);
|
836
|
-
rb_define_method(cSignal, "run_cleanup?", query_is_G_SIGNAL_RUN_CLEANUP, 0);
|
837
|
-
rb_define_method(cSignal, "no_recurse?", query_is_G_SIGNAL_NO_RECURSE, 0);
|
838
|
-
rb_define_method(cSignal, "detailed?", query_is_G_SIGNAL_DETAILED, 0);
|
839
|
-
rb_define_method(cSignal, "action?", query_is_G_SIGNAL_ACTION, 0);
|
840
|
-
rb_define_method(cSignal, "no_hooks?", query_is_G_SIGNAL_NO_HOOKS, 0);
|
841
|
-
|
842
|
-
|
843
|
-
/* GConnectFlags */
|
844
|
-
G_DEF_CLASS(G_TYPE_CONNECT_FLAGS, "ConnectFlags", mGLib);
|
845
|
-
G_DEF_CONSTANTS(cSignal, G_TYPE_CONNECT_FLAGS, "G_");
|
846
|
-
|
847
|
-
/* GSignalMatchType */
|
848
|
-
cSignalMatchType = G_DEF_CLASS(G_TYPE_SIGNAL_MATCH_TYPE,
|
849
|
-
"SignalMatchType", mGLib);
|
850
|
-
G_DEF_CONSTANTS(cSignal, G_TYPE_SIGNAL_MATCH_TYPE, "G_SIGNAL_");
|
851
|
-
rb_define_const(cSignalMatchType, "MASK", INT2NUM(G_SIGNAL_MATCH_MASK));
|
852
|
-
rb_define_const(cSignal, "MATCH_MASK", INT2NUM(G_SIGNAL_MATCH_MASK));
|
853
|
-
|
854
|
-
rb_define_const(cSignal, "TYPE_STATIC_SCOPE", INT2FIX(G_SIGNAL_TYPE_STATIC_SCOPE));
|
855
|
-
|
856
|
-
eNoSignalError = rb_define_class_under(mGLib, "NoSignalError", rb_eNameError);
|
857
|
-
}
|
858
|
-
|
859
838
|
/**********************************************************************/
|
860
839
|
|
861
840
|
void
|
@@ -897,7 +876,7 @@ rbgobj_define_action_methods(VALUE klass)
|
|
897
876
|
source,
|
898
877
|
"def %s(%s)\n signal_emit('%s'%s)\nend\n",
|
899
878
|
method_name,
|
900
|
-
(query.n_params > 0) ? args->str + 1 : "", //
|
879
|
+
(query.n_params > 0) ? args->str + 1 : "", // Skip initial ','
|
901
880
|
query.signal_name,
|
902
881
|
args->str);
|
903
882
|
|
@@ -914,9 +893,85 @@ rbgobj_define_action_methods(VALUE klass)
|
|
914
893
|
/**********************************************************************/
|
915
894
|
|
916
895
|
void
|
917
|
-
Init_gobject_gsignal()
|
896
|
+
Init_gobject_gsignal(void)
|
918
897
|
{
|
919
|
-
|
920
|
-
|
921
|
-
|
898
|
+
VALUE cSignalFlags, cSignalMatchType;
|
899
|
+
|
900
|
+
RG_TARGET_NAMESPACE = rb_define_class_under(mGLib, "Signal", rb_cData);
|
901
|
+
|
902
|
+
RG_DEF_METHOD(id, 0);
|
903
|
+
RG_DEF_METHOD(name, 0);
|
904
|
+
RG_DEF_METHOD(flags, 0);
|
905
|
+
RG_DEF_METHOD(itype, 0);
|
906
|
+
RG_DEF_METHOD(owner, 0);
|
907
|
+
RG_DEF_METHOD(return_type, 0);
|
908
|
+
RG_DEF_METHOD(param_types, 0);
|
909
|
+
RG_DEF_METHOD(inspect, 0);
|
910
|
+
|
911
|
+
RG_DEF_METHOD(add_emission_hook, -1);
|
912
|
+
RG_DEF_METHOD(remove_emission_hook, 1);
|
913
|
+
|
914
|
+
/* GSignalFlags */
|
915
|
+
cSignalFlags = G_DEF_CLASS(G_TYPE_SIGNAL_FLAGS, "SignalFlags", mGLib);
|
916
|
+
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_SIGNAL_FLAGS, "G_SIGNAL_");
|
917
|
+
rb_define_const(cSignalFlags, "MASK", INT2NUM(G_SIGNAL_FLAGS_MASK));
|
918
|
+
rb_define_const(RG_TARGET_NAMESPACE, "FLAGS_MASK", INT2NUM(G_SIGNAL_FLAGS_MASK));
|
919
|
+
|
920
|
+
rb_define_method(RG_TARGET_NAMESPACE, "run_first?", query_is_G_SIGNAL_RUN_FIRST, 0);
|
921
|
+
rb_define_method(RG_TARGET_NAMESPACE, "run_last?", query_is_G_SIGNAL_RUN_LAST, 0);
|
922
|
+
rb_define_method(RG_TARGET_NAMESPACE, "run_cleanup?", query_is_G_SIGNAL_RUN_CLEANUP, 0);
|
923
|
+
rb_define_method(RG_TARGET_NAMESPACE, "no_recurse?", query_is_G_SIGNAL_NO_RECURSE, 0);
|
924
|
+
rb_define_method(RG_TARGET_NAMESPACE, "detailed?", query_is_G_SIGNAL_DETAILED, 0);
|
925
|
+
rb_define_method(RG_TARGET_NAMESPACE, "action?", query_is_G_SIGNAL_ACTION, 0);
|
926
|
+
rb_define_method(RG_TARGET_NAMESPACE, "no_hooks?", query_is_G_SIGNAL_NO_HOOKS, 0);
|
927
|
+
|
928
|
+
/* GConnectFlags */
|
929
|
+
G_DEF_CLASS(G_TYPE_CONNECT_FLAGS, "ConnectFlags", mGLib);
|
930
|
+
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_CONNECT_FLAGS, "G_");
|
931
|
+
|
932
|
+
/* GSignalMatchType */
|
933
|
+
cSignalMatchType = G_DEF_CLASS(G_TYPE_SIGNAL_MATCH_TYPE,
|
934
|
+
"SignalMatchType", mGLib);
|
935
|
+
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_SIGNAL_MATCH_TYPE, "G_SIGNAL_");
|
936
|
+
rb_define_const(cSignalMatchType, "MASK", INT2NUM(G_SIGNAL_MATCH_MASK));
|
937
|
+
rb_define_const(RG_TARGET_NAMESPACE, "MATCH_MASK", INT2NUM(G_SIGNAL_MATCH_MASK));
|
938
|
+
|
939
|
+
rb_define_const(RG_TARGET_NAMESPACE, "TYPE_STATIC_SCOPE", INT2FIX(G_SIGNAL_TYPE_STATIC_SCOPE));
|
940
|
+
|
941
|
+
eNoSignalError = rb_define_class_under(mGLib, "NoSignalError", rb_eNameError);
|
942
|
+
|
943
|
+
signal_func_table = rb_hash_new();
|
944
|
+
rb_global_variable(&signal_func_table);
|
945
|
+
|
946
|
+
rb_define_method(mMetaInterface, "signal_new", gobj_s_signal_new, -1);
|
947
|
+
rb_define_method(mMetaInterface, "signals", gobj_s_signals, -1);
|
948
|
+
rb_define_method(mMetaInterface, "signal", gobj_s_signal, 1);
|
949
|
+
|
950
|
+
rb_define_method(cInstantiatable, "signal_has_handler_pending?",
|
951
|
+
gobj_sig_has_handler_pending, -1);
|
952
|
+
rb_define_method(cInstantiatable, "signal_connect", gobj_sig_connect, -1);
|
953
|
+
rb_define_method(cInstantiatable, "signal_connect_after",
|
954
|
+
gobj_sig_connect_after, -1);
|
922
955
|
|
956
|
+
#if 0
|
957
|
+
rb_define_method(cInstantiatable, "signal_invocation_hint",
|
958
|
+
gobj_sig_get_invocation_hint, 0);
|
959
|
+
#endif
|
960
|
+
|
961
|
+
rb_define_method(cInstantiatable, "signal_emit",
|
962
|
+
gobj_sig_emit, -1);
|
963
|
+
rb_define_method(cInstantiatable, "signal_emit_stop",
|
964
|
+
gobj_sig_emit_stop, 1);
|
965
|
+
rb_define_method(cInstantiatable, "signal_handler_block",
|
966
|
+
gobj_sig_handler_block, 1);
|
967
|
+
rb_define_method(cInstantiatable, "signal_handler_unblock",
|
968
|
+
gobj_sig_handler_unblock, 1);
|
969
|
+
rb_define_method(cInstantiatable, "signal_handler_disconnect",
|
970
|
+
gobj_sig_handler_disconnect, 1);
|
971
|
+
|
972
|
+
rb_define_method(cInstantiatable, "signal_handler_is_connected?",
|
973
|
+
gobj_sig_handler_is_connected, 1);
|
974
|
+
|
975
|
+
rb_define_singleton_method(cInstantiatable, "method_added",
|
976
|
+
gobj_s_method_added, 1);
|
977
|
+
}
|