共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

入力メソッド

共通デスクトップ環境は、Xm Toolkit を使用する国際化対応したアプリケーションに対して、ローカライズされた入力を行う機能を提供します。特に、XmText[Field]() ウィジェットが、各ロケールで提供される入力メソッドとインタフェースすることが可能になります。さらに、dtterm() クライアントも、入力メソッドを使用することが可能になります。

デフォルトでは、libXm Toolkit を使用するそれぞれの国際化対応クライアントは、ユーザの指定したロケールに関連付けられた入力メソッドを使用します。ユーザが代替入力メソッドを自由に指定できるように、XmNinputMethod() リソースがロケール名のモディファイアとして提供されます。

入力メソッドのユーザ・インタフェースは複数の要素から構成されています。それらの領域の必要性は、使用されている入力メソッドによります。通常それらの要素は、複雑な入力処理とダイアログを要求する入力メソッドの場合に必要となります。

図 1-3 VendorShell ウィジェットと補助の例 (日本語)

Graphic

プリエディット領域

プリエディット領域は、あらかじめ編集される (プリエディット) 文字列を表示するのに使用されます。入力メソッドは、次の 4 つのプリエディット・モードをサポートしています。OffTheSpot、OverTheSpot (デフォルト)、Root、および None です。


注 -

確定した文字列は再変換できません。文字列の状態は、プリエディット領域から、ユーザが文字を入力している位置へ移動します。


OffTheSpot

入力メソッドを使用する OffTheSpot モードのプリエディットでは、プリエディットの位置は図 1-4 のようにメイン・ウィンドウ領域のすぐ下かつステータス領域の右側に固定されています。日本語の入力メソッドを例示します。

図 1-4 VendorShell ウィジェットでの OffTheSpot プリエディットの例 (日本語)

Graphic

システム環境では、入力メソッドを使用してプリエディットすると、編集されているプリエディット文字列が、入力メソッドによって何らかの形で強調表示されます。

OffTheSpot モードを使用するには、VendorShell()ウィジェットのXmNpreeditType() リソースを、XtSetValues() 関数かリソース・ファイルのどちらかで設定します。XmNpreeditType() リソースは、TopLevelShell()ApplicationShell()DialogShell() ウィジェットのリソースとしても設定できます。この 3 つのウィジェットは、VendorShell() ウィジェット・クラスのサブクラスです。

OverTheSpot (デフォルト)

OverTheSpot モードでは、プリエディット領域の位置はユーザが文字を入力しようとする場所 (たとえば現在のフォーカスを持つ Text ウィジェットの挿入カーソルの位置) に設定されています。プリエディット領域の文字は、カーソル位置にオーバレイ・ウィンドウとして表示され、入力メソッドによっては強調表示されます。

OverTheSpot モードでは 1 つのプリエディット領域が複数の行から成る場合があります。プリエディット領域は常にメイン・ウィンドウ領域の中にあり、どの方式でもはみ出すことはありません。

プリエディット中の文字列が Text ウィジェットのテキストの一部であるかのように表示されていても、プリエディットが終了するまでは、クライアントに渡されて下位の編集画面に表示されることはないので注意してください。図 1-5 を参照してください。

OverTheSpot モードを明示的に使用するには、VendorShell() ウィジェットの XmNpreeditType() リソースを、XtSetValues() 関数かリソース・ファイルのどちらかで設定します。XmNpreeditType() リソースは、TopLevelShell()ApplicationShell()、またはDialogShell() ウィジェットのリソースとしても設定できます。この 3 つのウィジェットは、VendorShell() ウィジェット・クラスのサブクラスです。

図 1-5 VendorShell ウィジェットでの OverTheSpot プリエディットの例 (日本語)

Graphic

Root

Root モードでは、プリエディット領域およびステータス領域はクライアントのウィンドウとは別になっています。Root モードの動作は OffTheSpot に似ています。図 1-6 を参照してください。

図 1-6 VendorShell ウィジェットでの Root プリエディットの例 (日本語)

Graphic

ステータス領域

ステータス領域は、入力メソッドの入力ステータスまたはキーボード・ステータスをユーザに報告します。OverTheSpot および OffTheSpot の形式では、ステータス領域は VendorShell ウィンドウの左下隅に位置します。

VendorShell() ウィジェットは、VendorShell ウィンドウがサイズ変更された場合にステータス領域が VendorShell ウィンドウの下隅に再配置できるように、ジオメトリ管理を提供しています。

補助領域

補助領域はユーザがプリエディットを行うときに役立ちます。補助領域は特定の入力メソッドにより作成できます。図 1-3 に示した日本語の入力メソッドは、次の型の補助領域を作成します。

メイン・ウィンドウ領域

メイン・ウィンドウ領域は、入力メソッドの作業対象の領域として使用されるウィジェットです。システム環境では、VendorShell() ウィジェットの子として作れるのは MainWindow ウィジェットだけです。MainWindow ウィジェットは、どんなコンテナ・ウィジェットだけにもなり得ます (RowColumn() ウィジェットなど)。ユーザはコンテナ・ウィジェットを VendorShell() ウィジェットの子として作成します。

フォーカス領域

フォーカス領域は、現在フォーカスを持っている MainWindow() ウィジェット・サブツリーの下のすべての子孫ウィジェットのうちの一つです。既存のウィジェットを使用している Motif アプリケーション・プログラマは、フォーカス領域を気にする必要はありません。重要なのは、一度に 1 つのウィジェットだけしか入力メソッドを処理できないということです。入力メソッドの処理は、現在フォーカスを持つウィンドウ (ウィジェット) に移動します。