From: "D.Kanda" Date: 1998-12-21T20:54:16+09:00 Subject: [ruby-list:11396] Re: (gtk) signal (Re: gtk) かんだです。 Takehama Hirohisa さんの書かれた、 「[ruby-list:11395] Re: gtk 」 からの引用です。 > > > ・signal_connect の最後で、真偽値か整数値を返さないといけないようなのですが、 > > > これは何の値でしょうか? > > > > その signal の処理を続けるかやめるかを指定します。trueだとそこで止めます。 > > ある signal に複数の handler が登録されている場合はその登録順に渡されます > > が、さらに子signal方向、親widget 方向へと辿るようです。 > > 3つめの質問と関連していますが、true を返して signal の処理をやめると、 > widget のもともとのキー入力処理を横取りできないのでしょうか。試したと > ころ、 > > text.signal_connect('key_press_event') {|w, e| > true > } > > としただけでは、あいかわらずデフォルトの動作(文字が挿入されたり、カー > ソル移動したり)が行なわれます。 ちょっと見てみましたが、ruby/gtk の signal_connect が gtk の signal_connect_interp を使っているのが悪いのかなぁ…。もう少し見てみます。 > > event周りはまだほとんどできていません。ここはホントは GdkEventKey インス > > タンスを返すべきところで、GdkEventKey は keyval とかいうメソッドが定義され > > るようです。 > > # これくらいならすぐにできますが、今ちょっと忙しいので今夜にでも > > お手数ですが是非お願いします。 これもちょっと手間取りそうです(__) 話は違いますが、Gdk::Event って type というメソッドが定義されていますが、 Object::type とぶつかるのでマズいですね。event_type とかいう名前に変更した いですけれど、困る方はいますか? > > gtktext には control_key['z'-'a'+1] とかいった配列が用意されていて、これ > > に関数ポインタを埋め込んでいます。で、実際に ctrl-a とかが押されると、 > > control_key[0] の関数が呼び出される。だから、この配列に別の関数ポインタを代 > > 入すればそれでキーバインドが変更できることになりますね。ただ、gtkの関数とし > > て用意はされていないようですので、仕様から考えることになります。 > > Tk ではイベントを のように指定できますね。さらに > とか とかできます。GTK でもここまでで > きるとうれしいなと思います。 Tk は知らないんですけれど、 というイベントがあるのでしょうか? Keyイベントを受け取ってそのキーコードを判別する、というのが普通:-Pかなと思 うのですが…。 そのような書き方でいいのなら gtk でもできますね。