人気ブログランキング | 話題のタグを見る

signal_emit

昨日と今日の二日を潰して、ボタンからキー入力イベントをソフトウェア的に発生させる事ができた。忘れてしまうのはもったいないので下にプログラムを掲載した。

ソフトウェア・キーボード実現のハードルとしては、このイベントをXサーバーを介して他のフォーカスされたウィンドウに渡すことができるかということ。キーボードをフォーカスさせないようにすることと、stay on top で最前面に張り付けることが必要だが、それはGTK+の仕事ではなくて、ウィンドウマネージャーの仕事らしい。

GNOMEのホームページをざっと眺めたが関連の記事を見つけ出せなかった。ソフトウェアキーボードのアプリは既にあるのだから、ソースを取り寄せて調べれば良いのだろうけれどそこまでの知識と時間がない。Ruby/Gtk2 のチュートリアルか何かでイベントを他のアプリケーションに送る方法を取り扱ってもらえるといいのだが。

これ以上は先へ進めそうにないので、ひとまずソフトウェアキーボードの記事はこれで終わる。カスタマイズが簡単なRuby/Gtk2 のソフトウェアーキーボードのソフトが出現するのをじっと待つことにする。

イベントを他のアプリケーションに送りたいなどという贅沢を言わなければ、Ruby/Gtk+2でのプログラム作りはとても楽だった。GUIプログラミングへの気持ちの壁がかなり低くなったような気がする。部品は最初から豊富に揃っているし、イベントに応じてコールバック関数を数行書くだけで、それらしい動作をしてくれる。Ruby の手軽さも手伝って、お気楽GUIプログラミングを楽しめた。これで、また楽しみがひとつ増えた気がする。

require 'gtk2'

event = Gdk::EventKey.new(Gdk::Event::KEY_PRESS)
event.set_keyval(?a)

window = Gtk::Window.new
window.signal_connect('destroy') {
  Gtk.main_quit
}

window.signal_connect('key-press-event'){|w,e|
  print e.keyval, ': ', e.keyval.chr, "\n"
  false
}

button = Gtk::Button.new("key-press-event")
button.signal_connect("clicked") {
  puts "clicked"
  window.signal_emit('key-press-event', event)
  false
}

window.add(button)
window.show_all
Gtk.main
by tnomura9 | 2009-12-20 17:45 | NetWalker | Comments(0)
<< Ruby/Gtk2 でウィンド... ソフトウェアーキーボード 作ってみた >>