typedef struct { int type; /* ButtonPress あるいは ButtonRelease */ 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; /* ルートウィンドウに対する相対座標 */ unsigned int state; /* キーあるいはボタンのマスク */ unsigned int button; /* 詳細情報 */ Bool same_screen; /* 同じスクリーンかどうか示すフラグ */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent;
typedef struct { int type; /* KeyPress あるいは KeyRelease */ 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; /* ルートウィンドウに対する相対座標 */ unsigned int state; /* キーあるいはボタンのマスク */ unsigned int keycode; /* 詳細情報 */ Bool same_screen; /* 同じスクリーンかどうか示すフラグ */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent;
typedef struct { int type; /* MotionNotify */ 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; /* ルートウィンドウに対する相対座標 */ unsigned int state; /* キーあるいはボタンのマスク */ char is_hint; /* 詳細情報 */ Bool same_screen; /* 同じスクリーンかどうか示すフラグ */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent;
このイベントを受け取ったとき、構造体のメンバは以下のように設定されてい る。
type メンバはイベントの型を一意に識別する定数の名前である。 例えば、X サーバがクライアントアプリケーションに GraphicsExpose イベントを通知するとき、X サーバは type メンバに GraphicsExpose を設定した XGraphicsExposeEvent 構造体を送る。 display メンバはイベントが読み出されたディスプレイへのポインタである。 send_event メンバには、このイベントが SendEvent プロトコルリクエストから送られてきた場合に True が設定される。 serial メンバはプロトコルで通知されるシリアル番号を基に設定される。 ただし、最少桁の16ビットから完全な32ビットの値に拡張される。 window メンバには、ツールキットのディスパッチャにとって最も便利な ウィンドウが設定される。
これらの構造体は次の共通のメンバを持つ。 window, root, subwindow, time, x, y, x_root, y_root, state, same_screen. window メンバにはイベントが生成されたウィンドウが設定され、これはイ ベントウィンドウとして参照される。 先に議論した条件が満たされている限り、これは X サーバがイベントの通知 に使うウィンドウである。 root メンバには、元のウィンドウのルートウィンドウが設定される。 x_root, y_root メンバには、イベント時刻におけるポインタの座標が設定 される。 これはルートウィンドウの原点に対する相対座標で表される。
same_screen メンバはイベントウィンドウとルートウィンドウが同じスクリー ン上にあるかどうかを示すもので、 True か False が設定される。 True の場合は、イベントウィンドウとルートウィンドウは同じスクリーン上にある。 False の場合は、イベントウィンドウとルートウィンドウは異なるスクリーン上にあ る。
元のウィンドウがイベントウィンドウの下位ウィンドウであれば、構造体の subwindow メンバには、元のウィンドウであるイベントウィンドウの子ウィン ドウあるいは元のウィンドウの祖先であるイベントウィンドウの子ウィンドウ が設定される。 そうでない場合には、X サーバは subwindow メンバに None を設定する。 time メンバには、イベントが発生した時刻が設定される。この時刻はミリ 秒単位で表される。
イベントウィンドウがルートウィンドウと同じスクリーン上にある場合、x, y メンバにはイベントウィンドウの原点からの相対座標が設定される。 そうでない場合には、x, y には 0 が設定される。
state メンバは、イベント直前のポインタのボタンやモディファイアキーの論 理的状態を示す。 これはボタンやモディファイアキーの1つ以上のマスク値のビットごとの論理 和を取ったものである。 マスク値には以下のものがある。 Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask.
構造体のそれぞれには、詳細な情報を示すためのメンバがある。 XKeyPressedEvent 構造体と XKeyReleasedEvent 構造体の場合は、これは keycode メンバである。 このメンバには、キーボードの物理キーを表す数値が設定される。 このキーコードはキーボード上のどれかのキーに対する任意の表現である。 (12.7 章と 16.1 章を参照のこと)
XButtonPressedEvent 構造体と XButtonReleasedEvent 構造体の場合は、これは button メンバである。 これは状態が変化したボタンを表すもので、 Button1, Button2, Button3, Button4, Button5 のいずれかの値を取る。 XPointerMovedEvent 構造体の場合は、これは is_hint メンバである。 このメンバには NotifyNormal あるいは NotifyHint が設定される。