XSendExtensionEvent(3) 拡張入力イベントをクライアントに送る

書式

Status XSendExtensionEvent(display, device, destination, propagate, event_count, event_list, event_send)

      Display *display;

      XDevice *device;

      Window destination;

      Bool propagate;

      int event_count;

      XEventClass *event_list;

      XEvent *event_send;

引き数

display
X サーバへの接続を指定する。
device
イベントが送られてくるデバイスを指定する。
destination
イベントが送られるウィンドウを指定する。 ウィンドウID, PointerWindow, InputFocus のいずれかを指定する。
propagate
True か Flase の真偽値を指定する。
event_count
event_list 内の XEventClass の数を指定する。
event_list
使用するイベントセレクションのリストを指定する。
event_send
送られるイベントへのポインタを指定する。

説明

XSendExtensionEvent リクエストは、対象のウィンドウを識別し、指定したイベントをどのクライア ントが受け取るのかを決定し、全てのアクティブなグラブを無視する。 このリクエストにはイベントクラスのリストを渡す必要がある。 正しいイベントクラス名については、XOpenDevice(3X11) を参照するこ と。 このリクエストは引き数 w を使い、以下に示すように対象ウィンドウを識別す る。
  • w が PointerWindow ならば、 対象ウィンドウはポインタを含むウィンドウである。
  • w が InputFocus であり、フォーカスウィンドウがポインタを含む場合、対象ウィンドウはポイ ンタを含むウィンドウである。 そうでない場合は、対象ウィンドウはフォーカスウィンドウである。

どのクライアントが指定したイベントを受け取るか決めるため、 XSendExtensionEvent は引き数 propagete を以下のように利用する。

  • evnet_list が空リストの場合、イベントは対象ウィンドウを作ったクライア ントに送られる。 このクライアントが既に存在しなくなった場合には、イベントはどこにも送ら れない。
  • propagete が False ならば、イベントは event_list 配列で指定されるイベント型のいずれか を対象ウィンドウ上で選択している全てのクライアントに送られる。
  • propagete が True であり、event_list 配列で指定されるイベントのいずれかを対象ウィンドウ 上で選択しているクライアントがない場合には、対象ウィンドウは 次の条件を満たすウィンドウに置き換えられる。その条件とは、対象ウィンド ウにできるだけ近い祖先ウィンドウであり、対象ウィンドウとのそのウィンド ウの間のウィンドウがこのイベント型の伝播を止めるようなマスクを持っ ていないことである。 そのようなウィンドウが存在しない場合や、そのウィンドウがフォーカスウィ ンドウの祖先ウィンドウであり、元々 InputFocus が対象ウィンドウとして指定されている場合、このイベントはいかなるクライ アントにも送られない。 そうでない場合、イベントは最終的な対象ウィンドウ上で event_list 配列で 指定されているイベントのいずれかを選択しているウィンドウ全てに通知され る。

X サーバが必要に応じて構造体の内容のバイト交換を正しく行えるよう、 XEvent 構造体が持つイベントは、入力機能拡張で定義されているイベントでなくてはなら ない(そうでない場合には、エラー BadValue となる)。 そうでない場合、X サーバがイベントの内容の変更やチェックは行わない。 例外は、転送されるイベントの send_event メンバが True にされることと、イベントのシリアル番号が正しく設定されることである。

XSendExtensionEvent は通信プロトコルフォーマットへの変換が失敗した場合には 0 を返し、そう でない場合には 0 でない値を返す。 XSendExtensionEvent はエラー BadClass, BadDevice, BadValue, BadWindow を起こすことがある。

返り値

BadDevice
不正なデバイスが指定された。指定したデバイスが存在しないか、クライアン トの XOpenInputDevice によってオープンされていない。このエラーは 指定されたデバイスが X のキーボードデバイスか X のポインタデバイスであ る場合にも起こる。
BadValue
数値の中にリクエストの許容範囲を越えるものがある。引き数に対して特定の範 囲が指定されない限り、引き数の型の全ての範囲が許される。選択肢として定義 された引き数は、このエラーを起こすことがある。
BadWindow
引き数 Window の値が、定義されている Window を指していない。