typedef struct { int type; /* EnterNotify or LeaveNotify */ unsigned long serial; /* サーバが最後に処理したリクエストの番号 */ Bool send_event; /* SendEvent リクエストから送られてきたときに真 */ Display *display; /* イベントが読み出されたディスプレイ */ Window window; /* 関連して通知される ``イベント'' ウィンドウ */ Window root; /* イベントが発生したルートウィンドウ */ Window subwindow; /* 子ウィンドウ */ Time time; /* 単位はミリ秒 */ int x, y; /* イベントウィンドウ内のポインタの x, y 座標 */ int x_root, y_root; /* ルートウィンドウに対する相対座標 */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual */ Bool same_screen; /* 同じスクリーンかどうか示すフラグ */ Bool focus; /* フォーカスを表す真偽値 */ unsigned int state; /* キーあるいはボタンのマスク */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent;
このイベントを受け取ったとき、構造体のメンバは以下のように設定されてい る。
type メンバはイベントの型を一意に識別する定数の名前である。 例えば、X サーバがクライアントアプリケーションに GraphicsExpose イベントを通知するとき、X サーバは type メンバに GraphicsExpose を設定した XGraphicsExposeEvent 構造体を送る。 display メンバはイベントが読み出されたディスプレイへのポインタである。 send_event メンバには、このイベントが SendEvent プロトコルリクエストから送られてきたときに True が設定される。 serial メンバはプロトコルで通知されるシリアル番号を基に設定される。 ただし、最少桁の16ビットから完全な32ビットの値に拡張される。 window メンバには、ツールキットのディスパッチャにとって最も便利なウィ ンドウが設定される。
window メンバには EnterNotify や LeaveNotify イベントが発生したウィンドウが設定され、イベントウィンドウとして参照 される。 これはXサーバがイベントを通知するために使うウィンドウであり、イベント が発生したルートウィンドウと関係する。 root メンバには、イベントが発生したスクリーンのルートウィンドウが 設定される。
LeaveNotify イベントに対しては、ポインタの初期位置がイベントウィンドウの子ウィンド ウに入っていれば、subwindow メンバにはその子ウィンドウが設定される。 そうでない場合には、X サーバは subwindow メンバに None を設定する。 EnterNotify に対しては、ポインタの初期位置がイベントウィンドウの子ウィンドウに入っ ていれば、subwindow メンバにはその子ウィンドウが設定され、そうでない 場合には None が設定される。
time メンバには、イベントが発生した時刻が設定される。この時刻はミリ 秒単位で表される。 x, y メンバにはイベントウィンドウ内でのポインタ位置の座標が設定される。 この位置は常にポインタの最終位置であり、初期位置ではない。 イベントウィンドウがルートウィンドウと同じスクリーン上にある場合、x, y メンバはポインタ座標であり、イベントウィンドウの原点に対する相対座標が 設定される。 そうでない場合には、x, y には 0 が設定される。 x_root, y_root メンバには、イベント時刻におけるポインタの座標が設定 される。 これはルートウィンドウの原点に対する相対座標で表される。
same_screen メンバはイベントウィンドウとルートウィンドウが同じスクリー ン上にあるかどうかを示すもので、 True か False が設定される。 True の場合は、イベントウィンドウとルートウィンドウは同じスクリーン上にある。 False の場合は、イベントウィンドウとルートウィンドウは異なるスクリーン上にあ る。
focus メンバは、イベントウィンドウがフォーカスウィンドウやその下位ウィ ンドウであるかどうかを示す。 X サーバは、このメンバを True か False に設定する。 True の場合、イベントウィンドウはフォーカスウィンドウかその下位ウィンドウで ある。 False の場合、イベントウィンドウはフォーカスウィンドウやその下位ウィンドウで はない。
state メンバは、イベント直前のポインタのボタンやモディファイアキーの状 態を示す。 X サーバはこのメンバに、次に示すボタンマスク値やモディファイアキーマス ク値のうち1つ以上についてのビットごとの論理和を設定する: Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask.
mode メンバは、イベントが通常のイベント、 グラブが有効になった時の疑似移動(pseudo-motion)イベント、 グラブが無効になった時の疑似移動(pseudo-motion)イベントのいずれである かを示す。 X サーバはこのメンバに NotifyNormal, NotifyGrab, NotifyUngrab のいずれかを設定する。
detail メンバは通知の詳細を示すもので、 NotifyAncestor, NotifyVirtual, NotifyInferior, NotifyNonlinear, NotifyNonlinearVirtual のいずれかに設定される。