XSelectExtensionEvent(3X11)

名前
XSelectExtensionEvent, XGetSelectedExtensionEvents - 拡張イベントの選択、現在選択されている拡張イベントのリストの取得を行なう

書式
XSelectExtensionEvent(display, w, event_list, event_count)
      Display *display;
      Window w;
      XEventClass *event_list;
      int event_count;

XGetSelectedExtensionEvents(display, w, this_client_event_count_return,
this_client_event_list_return, all_clients_event_count_return, all_clients_event_list_return)
      Display *display;
      Window w;
      int this_client_event_count_return;
      XEventClass *this_client_event_list_return;
      int all_clients_event_count_return;
      XEventClass *all_clients_event_list_return;

引き数

display
    X サーバへの接続を指定する。

w   注目するイベントが生じる ウィンドウを指定する。

event_list
    注目するイベントを記述するイベントクラスのリストを指定する。

event_count
    イベントリスト中のイベントクラスの数を指定する。

this_client_event_count_return
    このクライアントによって選択されたイベントクラスの数が返される。

this_client_event_list_return
    このクライアントによって選択されたイベントクラスのリストへのポインタが 返される。

all_clients_event_count_return
    全てのクライアントによって選択されたイベントクラスの数が返される。

all_clients_event_list_return
    全てのクライアントによって選択されたイベントクラスのリストへのポインタ が返される。

説明
XSelectExtensionEvent リクエストは、指定したイベントクラスの リストに関係するイベントを X サーバが通知するようにさせる。 初期状態では、X はこのようなイベントは一切通知しない。 イベントは、ウィンドウに関連付けられて通知される。 あるウィンドウがデバイスイベントに注目していない場合、このイベントは そのイベントに注目している最も近い祖先ウィンドウに伝播する。

以下の制限つきで、複数のクライアントが同じウィンドウの同じイベントを 選択することができる。

•   複数のクライアントが同じウィンドウ上のイベントを選択できるのは、これら のイベントマスクが互いに共通部分を持たないからである。 X サーバがイベントを生成するとき、X サーバはこれに注目している クライアント全てにレポートする。

•   同時に1つだけのクライアントが自動パッシブグラブ(automatic passive grabbing)を有効にした状態で DeviceButtonPress イベントを選択 できる。 これは、イベントクラス DeviceButtonPressGrab に関連する。 自動パッシブグラブを使わないで DeviceButtonPress イベントを受け 取るためには、イベントクラス DeviceButtonPress を使い、イベント クラス DeviceButtonPressGrab を指定してはならない。

サーバはイベントを注目している全てのクライアントに通知する。

XOpenDevice が返す XDevice 構造体に含まれる情報は、 クライアントが XSelectExtensionEvent リクエストを作る際に使う、 イベントクラスを取得するマクロに使われる。 現在定義されているマクロは DeviceKeyPress, DeviceKeyRelease, DeviceButtonPress, DeviceButtonRelese, DeviceMotionNotify, DeviceFocusIn, DeviceFocusOut, ProximityIn, ProximityOut, DeviceStateNotify, DeviceMappiingNotify, ChangeDeviceNotify, DevicePointerMotionHint, DeviceButton1Motion, DeviceButton2Motion, DeviceButton3Motion, DeviceButton4Motion, DeviceButton5Motion, DeviceButtonMotion, DeviceOwnerGrabButton, DeviceButtonPressGrab, NoExtensionEvent である。

特定デバイスの適切なイベントクラスを得るためには、そのデバイスに対する XDevice 構造体を使って上記のマクロの1つが呼び出される。 例えば、

DeviceKeyPress (*device, type, eventclass);

は イベント型 DeviceKeyPress と、このデバイスから選択している DeviceKeyPress イベントに対するイベントクラスを返す。

XSelectExtensionEvent はエラー BadWindow および BadClass を起こすことがある。 XEventClass arrays. One lists the input extension events selected by this client from the specified window. The other lists the event classes selected by all clients from the specified window. You should use XFree to free these two arrays. XGetSelectedExtensionEvents リクエストは、指定したウィンドウに対してこのクライアントおよび全ての クライアントが選択している拡張イベントを通知する。 このリクエストは2つの XEventClass の配列を返す。一方は、指定した ウィンドウからこのクライアントが選択した入力拡張イベント(input extention events)を列挙したものである。他方は指定したウィンドウから全 てのクライアントが選択したイベントクラスを列挙したものである。 これら2つの配列を解放するには、XFree を使用すること。

XGetSelectedExtensionEvents はエラー BadWindow を起こすことがある。

返り値

BadWindow
    引き数 Window の値が、定義されている Window を指していない。

BadClass
    引き数 XEventClass の値が不正である。

関連項目
Programming with Xlib