summaryrefslogtreecommitdiff
path: root/ext/gtk/gtk.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/gtk/gtk.c')
-rw-r--r--ext/gtk/gtk.c40
1 files changed, 17 insertions, 23 deletions
diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c
index b72620de80..41e6874e19 100644
--- a/ext/gtk/gtk.c
+++ b/ext/gtk/gtk.c
@@ -1105,7 +1105,7 @@ signal_callback(widget, data, nparams, params)
{
VALUE self = get_value_from_gobject(GTK_OBJECT(widget));
VALUE proc = RARRAY(data)->ptr[0];
- VALUE a = RARRAY(data)->ptr[3];
+ VALUE a = RARRAY(data)->ptr[2];
ID id = NUM2INT(RARRAY(data)->ptr[1]);
VALUE result = Qnil;
VALUE args = ary_new2(nparams+1+RARRAY(a)->len);
@@ -1152,7 +1152,7 @@ gobj_smethod_added(self, id)
char *name = rb_id2name(NUM2INT(id));
if (gtk_signal_lookup(name, GTK_OBJECT_TYPE(obj))) {
- VALUE data = assoc_new(Qnil, id);
+ VALUE data = ary_new3(3, Qnil, id, ary_new2(0));
add_relative(self, data);
gtk_signal_connect_interp(obj, name,
@@ -5729,6 +5729,9 @@ static gint
idle()
{
CHECK_INTS;
+#ifdef THREAD
+ if (!thread_critical) thread_schedule();
+#endif
return TRUE;
}
@@ -5740,20 +5743,13 @@ exec_interval(proc)
}
static VALUE
-timeout_add(argc, argv, self)
- int argc;
- VALUE *argv;
- VALUE self;
+timeout_add(self, interval)
+ VALUE self, interval;
{
- VALUE interval, func;
int id;
- rb_scan_args(argc, argv, "11", &interval, &func);
- if (NIL_P(func)) {
- func = f_lambda();
- }
id = gtk_timeout_add_interp(NUM2INT(interval), exec_interval,
- (gpointer)func, 0);
+ (gpointer)f_lambda(), 0);
return INT2FIX(id);
}
@@ -5766,19 +5762,12 @@ timeout_remove(self, id)
}
static VALUE
-idle_add(argc, argv, self)
- int argc;
- VALUE *argv;
+idle_add(self)
VALUE self;
{
- VALUE func;
int id;
- rb_scan_args(argc, argv, "01", &func);
- if (NIL_P(func)) {
- func = f_lambda();
- }
- id = gtk_idle_add_interp(exec_interval, (gpointer)func, 0);
+ id = gtk_idle_add_interp(exec_interval, (gpointer)f_lambda(), 0);
return INT2FIX(id);
}
@@ -6624,9 +6613,9 @@ Init_gtk()
/* Gtk module */
rb_define_module_function(mGtk, "main", gtk_m_main, 0);
- rb_define_module_function(mGtk, "timeout_add", timeout_add, -1);
+ rb_define_module_function(mGtk, "timeout_add", timeout_add, 1);
rb_define_module_function(mGtk, "timeout_remove", timeout_remove, 1);
- rb_define_module_function(mGtk, "idle_add", idle_add, -1);
+ rb_define_module_function(mGtk, "idle_add", idle_add, 0);
rb_define_module_function(mGtk, "idle_remove", idle_remove, 1);
rb_define_module_function(mGtk, "set_warning_handler",
@@ -6839,7 +6828,12 @@ Init_gtk()
id_call = rb_intern("call");
id_gtkdata = rb_intern("gtkdata");
id_relatives = rb_intern("relatives");
+#if 0
gtk_idle_add((GtkFunction)idle, 0);
+#else
+ /* use timeout to avoid busy wait */
+ gtk_timeout_add(1, (GtkFunction)idle, 0);
+#endif
g_set_error_handler(gtkerr);
g_set_warning_handler(gtkerr);