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