アプリケーションはユーザから文字入力を受け付けても、そのために TextField ウィジェットや Text ウィジェットを使用しない場合があります。たとえば、DrawingArea ウィジェットを使用するアプリケーションでは、ユーザは直接 DrawingArea にテキストを入力できます。この場合、アプリケーションは、後の節で説明するように Xlib XIM 関数を使用できます。または、代わりにアプリケーションは Motif 1.2 の XmIm 関数を使用できます。XmIm 関数により、アプリケーションは最小限のコードで入力メソッドに接続および対話できます。さらに、XmIm 関数によって Motif VendorShell ウィジェットがアプリケーションに代わって入力メソッドのジオメトリ管理を実行できます。
XmIm 関数は Motif 1.2 のすべての処理系に含まれて出荷されますが、XmIm 関数は Motif 1.2 のドキュメントには記載されていません。OSF は、Motif 2.0 のために XmIm 関数を増やしてドキュメント化する意向を明らかにしています。ここで説明する関数は Motif 1.2 の XmIm 関数です。
Motif 1.2 の XmIm 関数は、プリエディット・コールバック形式やステータス・コールバック形式の入力メソッドをサポートしません。Xlib API によりプリエディット・コールバックが使用できます。詳細は、「XIM 管理」を参照してください。
Motif 1.2 ベースのアプリケーションで安全に使用できる XmIm 関数を次に示します。パラメータと型の正式な説明は xm.h ヘッダ・ファイルにあります。
関数名 |
説明 |
---|---|
XmImRegister() |
XOpenIM() を実行し、サポートされている形式の入力メソッドを照会します。 |
XmImSetValues() |
プリエディットおよびステータスの形式を調整および選択します。 |
XmImSetFocusValues() |
XIC がなければ作成します。入力メソッドにウィジェットがフォーカスを獲得したことを通知します。XIC に渡される値を設定します。
|
XmImUnsetFocus() |
入力メソッドにウィジェットがフォーカスを失ったことを通知します。 |
XmImMbLookupString() |
XmbLookupString() と等価の Xm の関数で、1 つ以上のキー・イベントを文字に変換します。戻り値は XmbLookupString() と等価です。
|
XmImUnregister() |
入力メソッドとウィジェットを切り離し、新しい入力メソッドへの接続を可能にします。必ずしも入力メソッドを閉じるわけではありません (処理系によります)。 |
XmImSetValues() 関数と XmImSetFocusValues() 関数により、アプリケーションは入力メソッドが必要とする情報を渡すことができます。すべての値が必要ではない場合でも、(それぞれの値はプリエディットおよびステータスの形式をサポートするので) アプリケーションがすべての値を渡すことが重要です。これは、ユーザまたは VendorShell ウィジェットによってどの形式が選択されたかをアプリケーションは認識できないからです。次に、XmImSet[Focus]Values() 関数への呼び出しで渡されるべき各値の引き数とデータ型を示します。
引き数名 |
データ型 |
---|---|
XmNbackground |
Pixel |
XmNforeground |
Pixel |
XmNbackgroundPixma |
Pixmap |
XmNspotLocation |
XPoint |
XmNfontList |
Motif fontlist |
XmNlineSpace |
int (連続ベースライン間のピクセルの高さ) |
XmIm 関数は次のように使用されます。
ツールキットを初期化する前に、アプリケーションはロケールを初期化するために XtSetLanguageProc(NULL, NULL, NULL) を呼び出します。
文字入力をしたい箇所でウィジェットを作成した後、アプリケーションは入力メソッドを開いて接続を確立するために XmImRegister(widget) を呼び出します。
入力メソッドへの接続を確立した後、アプリケーションは XmImSetValues() を呼び出してリストされているすべての値を渡すことにより、初期 XIC 値を入力メソッドに渡します。この関数は引き数 arg_list と number_args を取ります。arglist は XtSetArg() を呼び出すことで設定されます。
XtAddEventHandler() 関数を介して、入力メソッドから入力を獲得するウィジェットのマネージャ・ウィジェットに対してイベント・ハンドラを追加します。イベント・ハンドラは FocusChangeMask マスク用です。このハンドラは、フォーカスを獲得したときに XmImSetFocusValues() を呼び出し、フォーカスを失ったときに XmImUnsetFocus() を呼び出します。入力メソッドのためのフォーカス設定するとき、上記にリストされた値の完全なセットを渡します。
入力メソッドから入力を獲得するウィジェットに対して DestroyCallback を追加します。デストロイ・コールバックでは、ウィジェットと入力メソッドの間の接続を切り離していることを入力メソッドに通知するために、XmImUnregister() を呼び出します。
上記にリストされた 1 つ以上の入力メソッド値に変更があった時 (たとえば spotLocation) に入力メソッドに通知するため、XmImSetValues() を使用します。