XtAppNextEvent(3Xt)

名前
XtAppNextEvent, XtAppPending, XtAppPeekEvent, XtAppProcessEvent, XtDispatchEvent, XtAppMainLoop - イベント・入力の問い合わせと処理

書式
void XtAppNextEvent(app_context, event_return)
      XtAppContext app_context;
      XEvent *event_return;

Boolean XtAppPeekEvent(app_context, event_return)
      XtAppContext app_context;
      XEvent *event_return;

XtInputMask XtAppPending(app_context)
      XtAppContext app_context;

void XtAppProcessEvent(app_context, mask)
      XtAppContext app_context;
      XtInputMask mask;

Boolean XtDispatchEvent(event)
      XEvent *event;

void XtAppMainLoop(app_context)
      XtAppContext app_context;

引き数

app_context
    アプリケーションを識別するアプリケーションコンテクストを指定。

event
    イベント構造体を指定。 これは適切なイベントハンドラに配送される。

event_return
    指定したイベント構造体にイベント情報が返される。

mask
    処理するイベントのタイプを指定。 このマスクは、 の任意の組み合わせについてビットごとの論理和を取ったものである。 記述を容易にするために、X ツールキットでは全てのイベントタイプの論理和 であるシンボル名 が定義されている。

説明
X のイベントキューが空の場合、 はアプリケーションコンテキスト内で指定された各ディスプレイの出力バッファ をフラッシュし、イベントの発生を待つ。その間、他の入力のソース、タイム アウトのタイムアウト値、シグナルハンドラの状態を調べて、それらによって 引き起こされるコールバック手続きを呼び出す。この待ち時間の間にバックグ ラウンド処理が行なわれる(7.8 章を参照)。

イベントキューにイベントが存在する場合には、 event_return 情報構造体にイベントの情報を設定し、ゼロでない値を返す。キューに Xからの入力が入っていない場合には、 は出力バッファをフラッシュし、入力が可能になるまで処理をブロックする (この処理の間、タイムアウトのコールバックが呼ばれる場合がある)。 入力がイベントの場合、 はこの event 情報構造体に情報をセットし、ゼロでない値を返す。 そうでない場合、入力は他の入力ソースからのものであり、 はゼロを返す。

関数 は、まだ処理されていない X サーバからのイベント、処理されていないタイ マ処理、処理されていない他からの入力ソースがある場合にゼロでない値を返 す。 返される値は のビットごとの論理和であるビットマスク値である( を参照)。 処理されていないイベントがない場合、 は出力バッファをフラッシュしてゼロを返す。

関数 は、タイマ、代替入力、シグナルソース、X のイベントのいずれか1つを処理 する。処理する適切なタイプがない場合には、処理できるようになるまで はブロックされる。 処理できるタイプのものが複数ある場合、どれが処理されるかは未定義である。 通常はクライアントアプリケーションがこの手続きを呼ぶことはない( を参照)。 は、適切なタイマコールバックを呼んでタイマイベントを処理し、適切な他の 入力コールバックを呼んで他の入力を処理し、適切なシグナルコールバックを 呼んでシグナルソースを処理し、 を呼んで X のイベントを処理する。

X のイベントを受け取ったとき、これは に渡される。この関数は適切なイベントハンドラを呼び出し、これらに対して それぞれの手続きに登録されたウィジェット、イベント、クライアント固有の データを渡す。

訳注: このクライアント固有のデータとは、イベントハンドラに予め割り当て られているクライアントデータのことである。 イベントに対して登録されたイベントハンドラがない場合は、イベントは無視 され、ディスパッチャは単に戻ってくるだけである。 ハンドラが呼び出される順序は未定義である。

関数 は、既に配送ルーチンに登録されているイベントをイベントハンドラに送る。 は、イベントをハンドラに配送した場合には を返し、イベントを配送するハンドラが無かった場合には を返す。 の最も一般的な使い方は によって選られたイベントを各種手続きに配送することである。 なお、この関数はユーザが作成したイベントを(イベントハンドラに)配送する ためにも利用できる。 はまた、 のためのグラブのセマンティックを実現する役割も持っている。

関数 は、最初に を呼び、次にやってくる X のイベントを取得する。 そして、次に を呼び、登録されている適切な手続きにこのイベントを配送する。 これはツールキットアプリケーションのメインループを構成する。 したがって、この関数は戻ってくることはない。 アプリケーションはユーザのアクションに対する応答の中で終了する(exitす る)ことが期待されている。 に関して特別なことは何もない。 この関数は単に、 と を繰り返し呼ぶ無限ループに過ぎない。

アプリケーションでこのループを自分自身で作ることができる。 この場合には、ループ内で を繰り返して呼ぶ前に、グローバルな終了フラグを確認したり、トップレベル のウィジェットの数がゼロより多いかどうかを確認したりすることで、終了す るか呼び出しループに戻るかを決めることができる。

関連項目
X Toolkit Intrinsics - C Language Interface
Xlib - C Language X Interface