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