XGetDeviceModifierMapping(3XI) — NEWS-OS Programmer’s Manual
名称
XGetDeviceModifierMapping, XSetDeviceModifierMapping − デバイスモディファイアマッピングを要求または変更する
形式
XSetDeviceModifierMapping(display, device, modmap)
Display ∗display;
XDevice ∗device;
XModifierKeymap ∗modmap;
XModifierKeymap ∗XGetDeviceModifierMapping(display, device)
Display ∗display;
XDevice ∗device;
引数
display X サーバとの接続を指定する。
device 要求または変更するモディファイアマッピングの デバイスを指定する。
modmap XModifierKeymap 構造体へのポインタを指定する。
解説
XSetDeviceModifierMapping リクエストは指定デバイスの モディファイアとして使用するキー(もしあれば) の KeyCode を指定します。 成功した場合、X サーバは DeviceMappingNotify イベントを生成し、 XSetDeviceModifierMapping は MappingSuccess を返します。 X は最大 8 個のモディファイアキーを認めています。 XModifierKeymap 構造体に 9 個以上指定した場合、 BadLength エラーとなります。
XModifierKeymap 構造体のmodifiermapメンバは、 各モディファイアにつき max_keypermod 個の KeyCode を 8 セット 保持いています。 この8個のモディファイアの順番は以下に示す通りです。 Shift、 Lock、 Control、 Mod1、 Mod2、 Mod3、 Mod4 および Mod5。 ゼロ以外の KeyCode のみセット毎に意味を持ち、 ゼロの KeyCode は無視されます。 さらに、 ゼロ以外の全ての KeyCode は XListInputDevices が返す min_keycode および max_keycode で指定する範囲になければなりません。 そうでなければ、 BadValue エラーとなります。 マップ全体で 同じKeyCode が 2 回現われてはいけません。 現れた場合には BadValue エラーとなります。
X サーバはモディファイアをどのように 変更するかについて制限を設けることができます。 例えば、あるキーがハードウェア内に変化を起こさせない、 またはオートリピートがあるキーで不可にできない、 または複数モディファイキーをサポートしない というような制限です。 そのような制限を破ろうとした場合、 返されるステータスは MappingFailed となり、 どのモディファイアも変更されません。 あるモディファイアに指定された 新しい KeyCode が現在定義されているものと異なったり、 そのモディファイアに対する どのキー(現在または新たに指定した)が論理的には押された状態では、 XSetDeviceModifierMapping は MappingBusy を返し、 どのモディファイアも変更されません。
XSetDeviceModifierMapping は BadLengthP、 BadDevice、 BadMatch、 BadAlloc、 および BadValue エラーを返すことがあります。
XGetDeviceModifierMapping リクエストは, XModifierKeymap 構造体を新たに生成し, 現在モディファイアとして 使用されているキーを格納し, この構造体へのポインタを返します。 構造体は、 XFreeModifierMapping を呼び出すことで、使用後に開放する必要があります。 あるモディファイアのセットで, KeyCode がすべて 0 なら そのモディファイアは無効であることを示しています.
XGetDeviceModifierMapping は BadDevice および BadMatch エラーを 生成します。
構造体
XModifierKeymap 構造体を以下に示します:
typedef struct {
int max_keypermod;
KeyCode ∗modifiermap;
} XModifierKeymap;
自己診断
BadLength XModifierKeymap 構造体に 8 つ以上のキーが指定された。
BadAlloc サーバがリクエストした資源または サーバメモリの割り当てに失敗した。
BadDevice 無効デバイスが指定された。 指定デバイスが存在しない、 または XOpenInputDevice 経由にてクライアントからオープンされていない。 指定デバイスが X キーボードまたは X ポインタデバイスの場合、 このエラーが発生します。
BadMatch キーを持たないデバイスを指定することで XGetDeviceModifierMapping または XChangeDeviceModifierMapping リクエストが実行される場合、 このエラーが発生します。
BadValue いくつかの数値が、 リクエストによって認められる範囲外である。 指定範囲が引数に対してでなければ、 引数のタイプで定義した範囲全てが認められます。 二者択一のセットで定義された引数の場合、 このエラーが発生します。
関連事項
XSetDeviceButtonMapping(3XI)
Programming With Xlib
NEWS-OSRelease 4.2.1R