Qtopia Shell Bridge Dialog その17 続・フォーカス処理


 ばたばたと忙しくしてる間に、0.6.1、0.6.2と立て続けにリリースされました〜。
 いや、実際合間を縫って 0.6.1のリリース直後に新機能だけでも試してみようかと思ったんですが・・・こんな状態だったんで、早々に諦め(^^;)。


 で、結論から言うと、問題なくフォーカス当たるようになりました。
 メッセージビューの描画処理に関わらず、ちゃんと focus(QString) で指定したコントロールにフォーカス当たってます(^^)。

 ちなみに、フォーカスのデフォルト位置には、一応優先順位があるようで、基本的には、


  インプット > セレクト > メッセージ > リプライボタン

の順になっています。

 特にフォーカスを指定しない場合や、或いは画面に表示されていないコントロールを指定した場合は、優先順位の高いコントロールにフォーカスが当たります。表示されていないコントロールを指定したからと言って、未フォーカスの状態になる訳ではありません。


 なお、フォーカスを指定出来るようになったことで、注意点が一つ。

 前回のサンプル等のように Replyボタンと Defaultボタン、さらにインプットボックスを同時に表示させ、 Replyにフォーカスが当たっている状態で、画面の OKボタンをペンで押すと・・・、


 インプットボックスの内容が入力されるのではなく、フォーカスの当たっている Replyボタンを押した格好になります(笑)。


 これは、基本的に qshdlgに於ける OKボタンがフォーカスの当たってる内容を渡すためのボタンであるからです。

 画面上では同様の Look&Feelで表示されているため、ついつい Replyボタンと OK/Cancelボタンを同列に扱いがちですが、画面上の OKボタンは、(少なくとも私が検証した範囲内では)キーボードの OKキーと等価のものであり、 Replyボタンとイコールではありません。

 Replyボタンはあくまでも予め設定された値を入力パイプに引き渡すためのボタンであり、機能としてはむしろインプットボックスと同じものだと言えます。

 まぁ、上記の状況は、スクリプト側で意図的に Replyボタンにフォーカスを当てるか、キーボードのtabキーでフォーカスを合わせた上で、わざわざペンを取り出して OKボタンを押さない限り発生し得ないんですけどね(^^;)。

 そういう意味では、ユーザーレベルではそこまで厳密に意識する必要も無いことなのかもしれませんが、スクリプトを組む側としてはこれらの動作の違いについて十分に留意しておく必要があるでしょう。