XOpenDevice(3X11)

名前
XOpenDevice, XCloseDevice - 拡張入力デバイスのオープン、クローズ

書式
XDevice *XOpenDevice(display, device_id)
      Display *display;
      XID device_id;
XCloseDevice(display, device)
      Display *display;
      XDevice *device;

引き数

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

device_id
    オープンするデバイスのIDを指定。

device
    クローズするデバイスを指定。

説明
XOpenDevice リクエストは入力拡張プロトコルリクエストを通してクライアントが入力デバ イスにアクセスできるようにする。成功した場合、関数は XDevice 構 造体へのポインタを返す。

XCloseDevice リクエストは、入力拡張プロトコルを通してクライアン トが入力デバイスにアクセスできないようにする。入力拡張を通して入力デバ イスをオープンしたクライアントは、終了する前には CloseDevice を 通じてこれをクローズしなければならない。

クライアントが XCloseDevice リクエストを発行すると、クライアント がデバイス上に持っているアクティブなグラブは全て解放される。クライアン トが持っている全てのイベントセレクションとパッシブなグラブは削除される。 リクエストを出したクライアントがそのデバイスにアクセスしている最後のク ライアントであれば、X サーバは X によるそのデバイスへのアクセスを全て 無効にするかもしれない。

XOpenDevice と XCloseDevice は BadDevice エラーを起 こすことがある。

構造体
The XOpenDevice が返す XDevice 構造体の内容を示す。
typedef struct {
	XID device_id;
	int num_classes;
	XInputClassInfo *classes;
} XDevice;

classes フィールドは XInputClassInfo 構造体の配列へのポインタである。 この配列の各要素は、指定したデバイスがサポートしている入力のクラスに対 するイベント型ベースを持つ。 num_class フィールドは配列 classes の要素数を示す。

XInputClassInfo 構造体の内容を以下に示す。

typedef struct {
	unsigned char input_class;
	unsigned char event_type_base;
} XInputClassInfo;

input_class フィールドではデバイスがサポートする入力のクラスを1つ識別 する。定義されている型は KeyClass, ButtonClass, ValuatorClass, ProximityClass, FeedbackClass, FocusClass, OtherClass を含む。 event_type_base はそのクラスの最初のイベントのイベント型を識別する。

XInputClassInfo 構造体に含まれている情報は、クライアントが 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 イベントに対するイベントクラスを返す。

これ以降、この eventclass はこのデバイスからの DeviceKeyPress イベントを送るようサーバに求める XSelectExtensionEvent リクエストで用いられる。 選択されたイベントは XNextEvent を経由して受け取られ、type はイベントの型との比較で使うことができる。

返り値

BadDevice
    不正なデバイスが指定された。指定したデバイスが存在しないか、指定したデ バイスが X のキーボードか X のポインタである。指定したデバイスが他のク ライアントの XChangeKeyboardDevice リクエストや XChangePointerDevice リクエストによって X のキーボードや X のポ インタにされた場合にもこのエラーは発生する。

関連項目
Programming with Xlib