typedef struct { int type; /* Expose */ unsigned long serial; /* 最後にサーバに処理されたリクエストの番号 */ Bool send_event; /* SendEvent リクエストから送られてきた場合に真 */ Display *display; /* イベントが読み出されたディスプレイ */ Window window; int x, y; int width, height; int count; /* 0 でなければ、少なくともこれ以上の Expose イベントが続く */ } XExposeEvent;
このイベントを受け取ったとき、構造体の内容は以下のように設定されている。
type メンバには、イベントの型を一意に識別する定数名が設定される。 例えば、X サーバがクライアントアプリケーションに GraphicsExpose イベントを通知するとき、X サーバは type メンバに GraphicsExpose を設定した XGraphicsExposeEvent 構造体を送る。 display メンバには、イベントが読み出されたディスプレイへのポインタが 設定される。 send_event メンバは、このイベント自身が SendEvent プロトコルリクエストから送られてきた場合に True が設定される。 serial メンバはプロトコルで通知されたシリアル番号を基に設定される。 ただし、最少桁の16ビットから完全32ビットの値に拡張される。
window メンバには、ツールキットのディスパッチャが最も便利に使えるウィ ンドウが設定される。 x, y メンバには長方形の左上の座標を示す、ウィンドウの原点からの相対座 標が設定される。 width, height メンバには、長方形のサイズ(広さ)が設定される。 count メンバには、後に続く Expose イベントの数が設定される。 count が 0 ならば、このウィンドウに対する Expose イベントは続かない。 しかし、count が 0 でなければ少なくともこの数(それ以上のこともある)の Expose イベントがこのウィンドウで起きる。 ウィンドウのサブエリアを区別して再表示を最適化するようなことをしない単 純なアプリケーションの場合は、count の値が 0 でない Expose イベントは単に無視して、count が 0 である Expose イベントに対してウィンドウ全体の再描画を実行すればよい。