イベント関数

XSelectInputイベントマスクを設定
XFlush出力バッファをフラッシュ
XSync全てのリクエストが処理されるまで待機
XEventsQueuedイベントキューの数を取得
XPendingイベントキューの数を取得 (フラッシュあり)
イベント読み込み
XNextEvent次のイベントを取得してキューから削除 (ブロックあり)
XPeekEventキューから削除せずにイベントを取得 (ブロックあり)
XIfEvent一致するイベントを取得して、キューから削除 (ブロックあり)
XCheckIfEvent一致するイベントを取得して、キューから削除 (ブロックなし)
XPeekIfEvent一致するイベントを取得 (削除しない/ブロックあり)
XWindowEvent指定ウィンドウとイベントマスクに一致するものを取得 (削除あり/ブロックあり)
XCheckWindowEvent指定ウィンドウとイベントマスクに一致するものを取得 (削除あり/ブロックなし)
XMaskEvent指定イベントマスクに一致するものを取得 (削除あり/ブロックあり)
XCheckMaskEvent指定イベントマスクに一致するものを取得 (削除あり/ブロックなし)
XCheckTypedEvent指定イベントタイプに一致するものを取得 (削除あり/ブロックなし)
XCheckTypedWindowEvent指定ウィンドウとイベントタイプに一致するものを取得 (削除あり/ブロックなし)
ほか
XPutBackEventイベントをキューの先頭に置く
XSendEventイベントをクライアントに送信する
XDisplayMotionBufferSizeモーションバッファのサイズを取得
XGetMotionEventsモーションバッファからイベント取得
XSelectInput(Display *display, Window w, long event_mask);
指定されたイベントマスクに関連付けられたイベントを報告するように要求します。
ウィンドウがポインタ・キーボードイベントに関心がない場合、do_not_propagate マスクで禁止されていない限り、通常は関心のある最も近い祖先ウィンドウに伝播します。

ウィンドウのイベントマスク属性を設定すると、同じウィンドウに対する以前の呼び出しはすべて上書きされますが、他のクライアントが設定したイベントマスクは上書きされません。
複数のクライアントが、同じウィンドウに対して、同じイベントを選択できますが、次の制限があります。

  • 複数のクライアントが同じウィンドウでイベントを選択できます。
    X サーバーがイベントを生成すると、関係するすべてのクライアントにそれを報告します。
  • イベントマスク SubStructureRedirectMask に関連付けられている CirculateRequest、ConfigureRequest、MapRequest イベントを選択できるのは、一度に 1 つのクライアントだけです。
  • イベントマスク ResizeRedirectMask に関連付けられている ResizeRequest イベントを選択できるのは、一度に 1 つのクライアントだけです。
  • イベントマスク ButtonPressMask に関連付けられている ButtonPress イベントを選択できるのは、一度に 1 つのクライアントだけです。

サーバーは、関係するすべてのクライアントに対して、イベントを報告します。
XFlush(Display *display);
出力バッファ (クライアントからサーバーへの要求) をフラッシュします。

出力バッファは、XPending、XNextEvent、XWindowEvent によって、必要に応じて自動的にフラッシュされるため、ほとんどのクライアントアプリケーションではこの関数を使用する必要はありません。
サーバーによって生成されたイベントが、ライブラリのイベントキューに入れられる場合があります。
XSync(Display *display, Bool discard);
出力バッファをフラッシュし、すべてのリクエストが X サーバーによって受信および処理されるまで、待機します。

生成されたエラーはすべて、エラーハンドラによって処理する必要があります。
Xlib が受信した各プロトコルエラーに対して、XSync はクライアントアプリケーションのエラー処理ルーチンを呼び出します。

サーバーによって生成されたイベントは、すべて、ライブラリのイベントキューに入れられます。
discard
False の場合、現在キュー内にあるイベントを破棄しません。
True の場合、XSync が呼び出される前にキューにあったイベントも含めて、キュー内のすべてのイベントを破棄します。
int XEventsQueued(Display *display, int mode);
キューにあるイベント数を取得する。
すでにキューにイベントがある場合、入出力なしですぐに戻ります。

QueuedAfterFlush モードは、XPending と同じです。
QueuedAlready モードは、XQLength と同じです。
mode
QueuedAlready: イベントキューに既に存在するイベントの数を返します (フラッシュは行わない)。
QueuedAfterFlush: キューにイベントがない場合は、出力バッファをフラッシュし、さらにイベントを読み取ろうとして、読み取った数を返します。
QueuedAfterReading: キューにイベントがない場合は、出力バッファをフラッシュせずに、イベントを読み取ろうとして、読み取った数を返します。
int XPending(Display *display);
キュー内のイベントの数を取得する。イベントがない場合はフラッシュする。
QueuedAfterFlush モードが指定された XEventsQueued と同じです。
イベント読み込み
XNextEvent(Display *display, XEvent *event_return);
イベントキューから最初のイベントを XEvent 構造体にコピーし、それをキューから削除します。
イベントキューが空の場合、出力バッファをフラッシュし、イベントが受信されるまでブロックします。
XPeekEvent(Display *display, XEvent *event_return);
イベントキューから最初のイベントを返しますが、キューからイベントを削除しません。
キューが空の場合、出力バッファをフラッシュし、イベントが受信されるまでブロックします。
次に、イベントをイベントキューから削除せずに、クライアントが提供する XEvent 構造にコピーします。
XIfEvent(Display *display, XEvent *event_return, Bool(*predicate)(), XPointer arg);

Bool func(Display *display, XEvent *event, XPointer arg);
一致するイベントを取得して、キューから削除する。
指定されたプロシージャが True を返すまでブロックする。
追加のイベントを待機する場合、出力バッファをフラッシュします。
一致するイベントをキューから削除し、その構造を XEvent 構造にコピーします。
predicate
判定する関数
arg
関数に渡すユーザー値
Bool XCheckIfEvent(Display *display, XEvent *event_return, Bool(*predicate)(), XPointer arg);
一致したイベントを XEvent 構造にコピーし、True を返します (このイベントはキューから削除されます)。
見つからなかった場合、False を返し、出力バッファはフラッシュされます。
キューに保存されている以前のイベントはすべて破棄されません。
XPeekIfEvent(Display *display, XEvent *event_return, Bool(*predicate)(), XPointer arg);
イベントが見つかるまでブロックするが、キューから削除はしない。
XWindowEvent(Display *display, Window w, long event_mask, XEvent *event_return);
指定されたウィンドウとイベントマスクの両方に一致するイベントを、イベントキューから検索します。
一致するイベントが見つかると、そのイベントをキューから削除し、指定された XEvent 構造にコピーします。
キューに格納されている他のイベントは破棄されません。
一致するイベントがキューにない場合、出力バッファをフラッシュし、イベントが受信されるまでブロックします。
Bool XCheckWindowEvent(Display *display, Window w, long event_mask, XEvent *event_return);
イベントキューを検索し、使用可能なイベントを検索して、指定されたウィンドウとイベントマスクに一致する最初のイベントを探します。
一致するものが見つかった場合、そのイベントを削除し、指定された XEvent 構造体にコピーして、True を返します。
キューに格納されている他のイベントは破棄されません。
要求したイベントが利用できない場合、False を返し、出力バッファはフラッシュされます。
XMaskEvent(Display *display, long event_mask, XEvent *event_return);
指定されたマスクに関連付けられたイベントを、イベントキューから検索します。
一致するイベントが見つかると、XMaskEvent はそのイベントを削除し、指定された XEvent 構造にコピーします。
キューに格納されている他のイベントは破棄されません。
要求したイベントがキューにない場合、XMaskEvent は出力バッファをフラッシュし、受信するまでブロックします。
Bool XCheckMaskEvent(Display *display, long event_mask, XEvent *event_return);
イベントキューを検索し、使用可能なイベントを検索して、指定されたマスクに一致する最初のイベントを探します。
一致するものが見つかった場合、そのイベントを削除し、指定された XEvent 構造体にコピーして、True を返します。
キューに格納されている他のイベントは破棄されません。
要求したイベントが利用できない場合、False を返し、出力バッファはフラッシュされます。
Bool XCheckTypedEvent(Display *display, int event_type, XEvent *event_return);
イベントキューを検索し、使用可能なイベントを検索して、指定されたタイプに一致する最初のイベントを探します。
一致するものが見つかった場合、そのイベントを削除し、指定された XEvent 構造体にコピーして、True を返します。
キュー内の他のイベントは破棄されません。
イベントが利用できない場合、False を返し、出力バッファはフラッシュされます。
Bool XCheckTypedWindowEvent(Display *display, Window w, int event_type, XEvent *event_return);
イベントキューを検索し、使用可能なイベントを検索して、指定されたタイプとウィンドウに一致する最初のイベントを探します。
一致するものが見つかった場合、イベントをキューから削除し、指定された XEvent 構造体にコピーして、True を返します。
キュー内の他のイベントは破棄されません。
イベントが利用できない場合、False を返し、出力バッファはフラッシュされます。
ほか
XPutBackEvent(Display *display, XEvent *event);
イベントをキューにコピーすることによって、イベントをイベントキューの先頭にプッシュバックします。
これは、イベントを読んで、後で対処したいと判断した場合に役立ちます。
XPutBackEvent を連続して呼び出すことができる回数に制限はありません。
Status XSendEvent(Display *display, Window w, Bool propagate, long event_mask, XEvent *event_send);
指定されたイベントを、どのクライアントが受信するかを決定した上で、送信します。
現在のアクティブなグラブは無視されます。

XEvent のイベントは、X サーバーが必要に応じて内容を正しくバイトスワップできるように、コアイベント、または、拡張機能によって定義されたイベントである必要があります (そうでなければ、BadValue エラーとなる)。
それ以外の場合、値は X サーバーによってチェックされません。

XEvent の send_event は常に True になり、serial も正しく設定され、display は XSendEvent によって上書きされます。
w
送信先のウィンドウ。以下の値も可能。
PointerWindow の場合、現在ポインタを含んでいるウィンドウ。
InputFocus で、フォーカスウィンドウ内にポインタが含まれている場合、そのウィンドウ。
propagate
False の場合、event_mask のいずれかを選択している、全てのクライアントに送信される。

True の場合、送信先ウィンドウを作成したクライアントに送られる。
送信先ウィンドウが event_mask のいずれも選択していない場合は、(do_not_propagate_mask でマスクが選択されていない) 送信先の最も近い祖先に送られる。
そのようなウィンドウがない、または、ウィンドウがフォーカスウィンドウの祖先で、w に InputFocus が指定されていた場合は、イベントは送信されない。
event_mask
0 の場合、イベントは送信先ウィンドウを作成したクライアントに送られる。ウィンドウが存在しない場合は、送信されない。
戻り値
失敗した場合は 0 を返し、それ以外の場合は 0 以外を返します。
unsigned long XDisplayMotionBufferSize(Display *display);
モーションバッファのサイズを取得。

一部の X サーバー実装では、イベント通知で報告されるよりも完全なポインターの動きの履歴が維持されます。
各ポインタハードウェア割り込みでのポインタ位置は、後で取得できるようにバッファに保存できます。
このバッファはモーション履歴バッファと呼ばれます。たとえば、ペイントプログラムなどのいくつかのアプリケーションは、ポインタが移動した場所の正確な履歴を必要とします。
ただし、この履歴情報は、ほとんどのアプリケーションにとって非常に過剰です。
XTimeCoord *XGetMotionEvents(Display *display, Window w, Time start, Time stop, int *nevents_return);

typedef struct {
 Time time;
 short x, y;
} XTimeCoord;
モーション履歴バッファ内の、指定された開始時刻と停止時刻の間 (両端の値を含む) に該当し、現在の配置で指定されたウィンドウ (境界を含む) 内にある座標を持つ、すべてのイベントを返します。

サーバーがモーション履歴をサポートしていない場合、開始時刻が停止時刻より遅い場合、または開始時刻が将来の場合、イベントは返されず、NULL を返します。
停止時刻が将来の場合、CurrentTime を指定するのと同じです。
start
開始時刻 (ミリ秒単位)。
stop
終了時刻。CurrentTime で現在時刻。
nevents_return
イベントの数が入る
戻り値
確保された配列。XFree() で解放する。
NULL でなし。
x,y はポインタ座標で、ウィンドウ原点からの相対位置。