glib2 1.0.3 → 1.1.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.
- 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
|
+
}
|