«前の日記(2008-06-30 [月]) 最新 次の日記(2008-07-23 [水])» 編集
RSS: href="http://endoh-namazu.tierra.ne.jp/diary/index.rdf"


半期 四半期 全カテゴリ

新・なまず日記


2008-07-05 [土]

_ [デスクトップ][カスタマイズ][xfumble] xfumble - RECORD extension



この間から、どのウイジェットにフォーカスが当たってるかを判定する、というのを取り組んでいるのだが、なかなかうまくいかなくってね。

XIMプロトコルを使って、現在のキャレット(テキストエントリに出る、棒みたいな奴)位置を対象アプリに問い合わせる、というのを検討してみた。anthyとかのかな漢エンジンのふりをする、いわばトンネルのようなアプリを作って、トンネルを通るプロトコルを盗み読みするわけ。

しかし、最近のアプリではXIMは廃れる方向らしい。その原因は、まさに、上記のような盗み読みを、外部アプリにされてセキュリティ上の問題が発生するのを防ぎたい、ということらしい。GTKでは、immoduleという共有ライブラリをアプリのプロセス内に取り込んでそいつにかな漢の候補選択をさせるから、外部アプリ(プロセス)がちょっかいを出すなんて無理だ。あきらめた。


他に方法がないかとしぶとく調べていたら、これ、ホントに、セキュリティ的にどうなのよ、という機能がX Windowシステムには装備されているのを見つけた。昔はXtrapと言ったんだけど、今では、RECORD extensionという。

こいつは、指定した任意のアプリと、Xサーバとのプロトコルのやりとりを、全部盗み読みして、報告してくれるという、「そんなことやっちゃって本当にいいわけ?」といいたくなるほど大胆でオープンな機能であります。


テストコードを書いて、いろいろ試してみた。

残念ながら、こいつを使っても、正確に、どこのウイジェットにフォーカスが当たっているかはわからない。そういうことは、GTKライブラリの内部で閉じてるんだ。でも、キャレットが出てるかどうかは、なんとなくわかる。キャレットが出てれば、そりゃ、そのウイジェットにフォーカスが当たってるに決まってるじゃん。

どんな感じでキャレットを書いているか、盗み読みして調べてみた。

GTK2(GNOMEのevince)とQt(KDEアプリのk3b)なんかは、PolySegmentというプロトコロルで、縦棒を一本書く。

OpenOfficeのimpressや、calc、それからfirefox3では、PolyFillRectangleというプロトコルで、幅2ピクセルの長方形を書く。


もちろん、これが常にキャレットであるという保証は全くないのだけれど、実用上は、結構使えるんじゃないだろうか。なにしろ、オイラの作ってるのは、fumble=「不器用な手つきでゴソゴソやる」アプリなんだから。


こいつを使ってキャレット位置を特定できたら、Windows上で書いた「なまずIME」のX Window版を書いてみたいよね。あれ、自分で言うのもなんだけど、気に入ってるんだよ。


大体、やりたいことができそうだ、という目処が立ってきたから、そろそろ、バラックコードから卒業して、ちゃんとした設計に入りましょうかね。これがまた、タマンネェんだよな。
[]