From: Mirko M. <mi...@li...> - 2005-02-26 15:49:58
|
Hi >>So, you say "all of scripts which use Thread should be changed.", right? > > Well, I'm trying to help finding an efficient and backward compatibile > way. But i'm getting ruby internals little by little. I've tried this hack: added a rb_thread_wakeup with g_idle_add. This updates the widgets. I think the widgets were not updated because no signal and no event is generated by label.label= so the select in gtk_poll waits for a fd change that does not happen. This explains why moving the mouse or pressing a key updated the interface. I think there is a better way to achieve the same result. I'm searching. Any idea? Index: gtk/src/rbgtkmain.c =================================================================== RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtkmain.c,v retrieving revision 1.28 diff -u -r1.28 rbgtkmain.c --- gtk/src/rbgtkmain.c 29 Jan 2005 11:44:14 -0000 1.28 +++ gtk/src/rbgtkmain.c 26 Feb 2005 15:38:44 -0000 @@ -143,11 +143,26 @@ return gtk_events_pending() ? Qtrue : Qfalse; } +static gint +idle_wakeup() +{ + rb_thread_wakeup(rb_thread_current()); + return TRUE; +} + +static void +idle_wakeup_remove(VALUE data) +{ + gtk_idle_remove(NUM2UINT(data)); +} + static VALUE gtk_m_main(self) VALUE self; { rb_ary_push(rbgtk_main_threads, rb_thread_current()); + rb_set_end_proc(idle_wakeup_remove, + UINT2NUM(g_idle_add((GtkFunction)idle_wakeup, 0))); gtk_main(); return Qnil; } |