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