XKeyEvent(3) KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify イベント構造体

Other Alias

XButtonEvent, XMotionEvent

構造体

KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify イベントに対する構造体の内容を示す。

typedef struct {
     int type;                
     unsigned long serial;    
     Bool send_event;         
     Display *display;        
     Window window;           
     Window root;             
     Window subwindow;        
     Time time;               
     int 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;                
     unsigned long serial;    
     Bool send_event;         
     Display *display;        
     Window window;           
     Window root;             
     Window subwindow;        
     Time time;               
     int 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;                
     unsigned long serial;    
     Bool send_event;         
     Display *display;        
     Window window;           
     Window root;             
     Window subwindow;        
     Time time;               
     int 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 メンバはイベントウィンドウとルートウィンドウが同じスクリー ン上にあるかどうかを示すもので、 TrueFalse が設定される。 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 が設定される。