いるねすのブログ

働きたくない系SEが無駄に遊んだ記録

FVWM2のFvwmTransFocusでMPlayerが透けないようにする

※すげえ雑なHackなので、他の環境では上手く動かない気がしてならない

fvwm2をつかってて、窓を透過させるのにFvwmTransFocusを使ってる。ただコイツは何でもかんでも問答無用で透過させちゃって、大変イケてない。たとえばMPlayerで動画を再生しても、その窓まで透過してしまうわけだ。正直困る。

ということで、ソースを覗いてみた。コメントで、透けさせるかどうかを制御するには ignoreWindow() を編集してね、とか親切に書いてあるのでそこを編集する。

/* Ignore apps for watching TV */
num = !strncasecmp(class.res_class, "xawtv", 5)
   || !strncasecmp(class.res_class, "tvtime", 5);

とかあるので、末尾に !strncasecmp(class.res_class, "mplayer", 5) と追加してやる。が、動かない。

なんかどうも class.res_class が正しくとれてないみたい。なんでか調べたら、その上の XQueryTree() で子ウインドウが1以上取れてるせいで return 0; しちゃってる。 どうもどのウィンドウもみんな14こくらい子窓が開いてて、 children[num-1] が本来欲しかった窓になってる模様。 なんかコメントにもそれっぽい事を書いてはあるが、よくわかんないし何でそのままにしてるのかも謎。

とにかく自分の環境では、 ignoreWindow() にきたウィンドウIDの子ウィンドウリストの末尾に XGetClassHint() してやれば上手くいくので、もう面倒だし決め打ちでロジックを書いてしまった。

それがこれ。

暇があったら他でもちゃんと動くか調べて書き直そう。