もりきゅうです.

そうそう.
Ruby-Xlib はイベントコールバックできるようになったんです.

今まで

def win.config_notify(w,h)
end

と書いてた部分が

win.event 'config_notify', proc { |w,h|
}

と書けるようになりました.(どちらも使えます)


イベント定義
--
static VALUE
xlib_window_event(obj, name, proc)
    VALUE obj, name, proc;
{
    VALUE hash;
    ID id;
    
    id = rb_intern(STR2CSTR(name));
    hash = rb_iv_get(obj, "@procs");
    rb_hash_aset(hash, id, proc);
    return Qnil;
}
--

イベント実行
--
void
xlib_event(obj, id, args)
    VALUE obj, args;
    ID id;
{
    VALUE hash, act;
    
    hash = rb_iv_get(obj, "@procs");
    if ((act = rb_hash_aref(hash, id)) == RHASH(hash)->ifnone)
        rb_apply(obj, id, args);
    else
        rb_apply(act, id_call, args);
}
--

----
Kazuhiro Yoshida  moriq / ma2.seikyou.ne.jp