typedef struct { int type; /* FocusIn または FocusOut */ unsigned long serial; /* サーバが最後に処理したリクエストの番号 */ Bool send_event; /* SendEvent リクエストから送られてきた場合に真 */ Display *display; /* イベントが読み込まれたディスプレイ */ / Window window; /* イベントのウィンドウ */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; typedef XFocusChangeEvent XFocusOutEvent;
クライアントがこのイベントを受け取ったとき、構造体のメンバは以下のよう に設定される。
type メンバはイベントの型を一意に識別するための定数名が設定される。 例えば、X サーバがクライアントアプリケーションに GraphicsExpose イベントを通知するとき、X サーバは type メンバに GraphicsExpose を設定して XGraphicsExposeEvent 構造体を送る。 display メンバにはイベントが読み出されたディスプレイへのポインタが 設定される。 send_event メンバは、そのイベントが SendEvent プロトコルリクエストから送られてきた場合に True に設定される。 serial メンバはプロトコルで通知されたシリアル番号から設定されるが、 16ビットの最少桁ビットから完全32なビットの値に拡張される。 window メンバにはツールキットのディスパッチャが最も有効に利用できるウィ ンドウが設定される。
window メンバには FocusIn か FocusOut が生成されたウィンドウが設定される。 これは X サーバがイベントを通知するウィンドウである。 mode メンバはイベントが通常のフォーカスイベントなのか、 グラブされている間のフォーカスイベントなのか、 グラブがアクティブになったときのフォーカスイベントなのか、 あるいはグラブが非アクティブになったときのフォーカスイベントなのかを示 す。 X サーバは mode メンバを NotifyNormal, NotifyWhileGrabbed, NotifyGrab, NotifyUngrab のいずれかに設定する。
ウィンドウのアンマップによって起こる全ての FocusOut イベントは UnmapNotify イベントより後に生成される。しかし、生成された EnterNotify, LeaveNotify, VisibilityNotify, Expose イベントに対する FocusOut イベントの順序についての規定は X プロトコルにはない。
イベントモードに従って、detail メンバが通知の詳細を示すために設定さ れる。detail メンバには NotifyAncestor, NotifyVirtual, NotifyInferior, NotifyNonlinear, NotifyNonlinearVirtual, NotifyPointer, NotifyPointerRoot, NotifyDetailNone のいずれかが設定される。