SeedとSignal

GUIアプリを作るためには、signal(WindowsではMessage xlibではeventと呼ばれている)の処理が重要なのですが、seedでsignalを扱う方法がいまいち分かっていない。
例えば、windowを開くだけのプログラム。

#!/usr/bin/env seed

const Gtk = imports.gi.Gtk;

Gtk.init(Seed.argv);

var win = new Gtk.Window();
win.signal.destroy.connect(Gtk.main_quit);
win.show_all();

Gtk.main();

今回は、Gtk.Windowのsignal.destroy.connectを使っているけど、vteのサンプルでは、Gtk.Windowのsignal.hide.connectを使っている。
書式はsignalに接続する関数(メソッド)を書くだけなのですが、どのsignalにつなげるべきかがイマイチ分からないのがひとつ。もう一つは、Gtkではsignalが継承されるので、親のsignalを調べると、GtkWidgetにはhideとdestory-eventはあるけど、destroyはGtkWidgetの親のGtkObjectになる。どちらでも動作するのですが、どちらを使うべきか、悩む必要がある。

また、今回のように親のsignalを継承して利用する場合、GtkWindowのsignalだけを追いかけても、マニュアルが見つからないというのも問題になる。

結局、Gtk+を知らないとseedも使いこなせないことがわかった。


どうでも良い話ですが、seedで検索するとガンダムネタが多すぎる。seed linuxやseed gnomeで検索するとvineネタがヒットする。日本語でseedの解説しているページを検索するには、動すべきだろう。goolge で - オプション使っても良いのだが、Linuxユーザはガンダムに興味がある人も多いんだよな〜。