むとうです。

お手数おかけします。

yashiさんwrote: 
> loop の中で
> 
>        while Gtk.events_pending
>             printf("pending = %s\n", Gtk.get_current_event.type)
>          p Gtk.main_iteration
>        end
> 
> みたくできる様になるだけです。

ちなみに、このwhile文って、無限ループになりませんか?

昨日、yashiさんのパッチを当てた際にgtk-0.23のソース(rbgtk.c)を
ざっくり見た時に気づいたのですが

static VALUE
gtk_m_events_pending(self)
    VALUE self;
{
    return INT2FIX(gtk_events_pending());
}

と書いてあります。これってFixnum型を返すのですよね?
で、Rubyってfalseまたはnil以外の全ての値は真ですよね...
というわけで無限ループになるのではないかなぁと(違いましたっけ?(^^;))。

ちなみに、私がいつも参考にさせて頂いている
http://www.ueda.info.waseda.ac.jp/~igarashi/ruby/api-ja/Gtk.html
には、

events_pending      イベントキューにたまっているイベントの数を返す。

と書いてあります。そんなわけで、昨日の私のメールではあえて

       while(Gtk.events_pending > 0)
            printf("pending = %d\n", Gtk.events_pending)
            Gtk.main_iteration
       end

と書いてみました...。
#すみません、whileの後のdoは余計でした(^^;)。

--
昨日、メール出してからGTKも勉強しようととりあえず、GTK+ Reference Manual
を見たところ、GTK+ > General のところに

gint gtk_events_pending (void);
  :
  :
Returns :  TRUE if any events are pending, FALSE otherwise. 

って書いてありました。
それならなんでgboolean型でないんだろうとちょっと疑問に思ったり、
Ruby/GTKではtrue/falseを返して欲しいなぁなんて思ったりでちょっと混乱しています。
#やっぱりGTK+のソースも見ないとだめですね。今からダウンロードします(^^;)。


ではでは。

----
○● むとう まさお(MUTOH Masao)    
●○ E-Mail:mutoh / highway.ne.jp