コントロール
XkbDescRec 構造体の ctrls には、XKB の機能コントロールに関する情報があります。
#define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; unsigned char num_groups; unsigned char groups_wrap; XkbModsRec internal; XkbModsRec ignore_lock; unsigned int enabled_ctrls; unsigned short repeat_delay; unsigned short repeat_interval; unsigned short slow_keys_delay; unsigned short debounce_delay; unsigned short mk_delay; unsigned short mk_interval; unsigned short mk_time_to_max; unsigned short mk_max_speed; short mk_curve; unsigned short ax_options; unsigned short ax_timeout; unsigned short axt_opts_mask; unsigned short axt_opts_values; unsigned int axt_ctrls_mask; unsigned int axt_ctrls_values; unsigned char per_key_repeat[XkbPerKeyBitArraySize]; } XkbControlsRec, *XkbControlsPtr;
データの取得
XkbGetKeyboard 関数で XkbAllComponentsMask を指定しても、なぜか ctrls ポインタだけは NULL の状態になります。
コントロール情報は、XkbGetControls 関数で個別に取得する必要があります。
xkb->ctrls に、which マスクで指定されたデータを取得します。
ctrls->num_groups の値に関しては、いずれかのマスクが指定された場合に常にセットされます。
このキーボードにおけるキーグループの数です。
コントロール情報は、XkbGetControls 関数で個別に取得する必要があります。
Status XkbGetControls(Display *display, unsigned long which, XkbDescPtr xkb);
xkb->ctrls に、which マスクで指定されたデータを取得します。
ctrls->num_groups の値に関しては、いずれかのマスクが指定された場合に常にセットされます。
このキーボードにおけるキーグループの数です。
コントロールについて
コントロールの各機能には、それぞれ、有効/無効の状態と、それぞれの機能に関する属性値 (XkbControlsRec 内の値) が存在します。
機能によっては、有効/無効を切り替えられず、属性値だけが存在する場合があります。
また、属性値が存在せず、有効/無効状態のみ切り替えられる場合があります。
機能によっては、有効/無効を切り替えられず、属性値だけが存在する場合があります。
また、属性値が存在せず、有効/無効状態のみ切り替えられる場合があります。
各機能のマスク
XkbRepeatKeysMask | キーリピートの有効/無効。また、遅延時間も変更できる。 コア X のキーリピートと連動しているので、どちらかを有効/無効にすると、もう一方も変更される。 repeat_delay が、キーリピートを開始するまでの初期遅延 (ms)。 repeat_interval が、キーリピート開始後の間隔 (ms)。 |
---|---|
XkbSlowKeysMask | 短い時間の間に、誤って押されたキーを無効にするための機能。 有効な場合、キーが押された時に指定時間待機し、その期間内にキーが離されたときは、キーイベントを生成しない。 slow_keys_delay が、キーが押されてから、サーバーによって受け入れられるまでの遅延期間 (ms)。 |
XkbBounceKeysMask | キーを離した後すぐに、誤ってもう一度押してしまった時の動作を無効にするための機能。 有効な場合、キーが押された後、指定時間内に同じキーが押された場合は無効にする。 debounce_delay は、キーが押された後、同じキーの別の押下がサーバーによって受け入れられるまでに、キーが無効になる遅延期間 (ms)。 |
XkbStickyKeysMask | Shift キーなどの修飾キーと、他のキーを同時に押すのが難しい場合、修飾キーを1度押して離した時に、ラッチ状態にする。 次に押されたキーでは、その修飾子が ON となり、その後、修飾子は自動的に OFF になる。 修飾キーを2回続けて押すと、ロック状態の ON/OFF になる。 ax_options に、この機能用の3つのフラグがあります (他の機能と共用)。 XkbAX_TwoKeysMask : 通常通り2つのキーが同時に押された時、StickyKeys を自動的にオフにするか。 XkbAX_LatchToLockMask : 修飾キーが2回続けて押された時、修飾子のロック状態を変更するか。 |
XkbMouseKeysMask | キーボードでマウス制御を行う機能。 有効な場合、指定キーが押された時、キーイベントの代わりに、ポインタイベントを生成する。 mk_dflt_btn は、キーボードでシミュレートされたマウスボタン操作に使用する、マウスボタンの番号 (Button1〜Button5)。 |
XkbMouseKeysAccelMask | キーボードでマウス制御を行うときの、ポインタ移動の変化。 有効な場合、キーを押し続けている間、ポインタの動きが変化する。無効な場合は、一つのポインタイベントだけが生成される。 mk_delay, mk_interval, mk_time_to_max, mk_max_speed, mk_curve は、制御に関する属性値。 |
XkbAccessXKeysMask | キー操作で、各コントロールの有効/無効を切り替える。有効な場合、以下の操作が可能になる。
|
XkbAccessXTimeoutMask | 有効な場合、キーボードが指定された期間アイドル状態だった時、ブールコントロールの有効/無効状態を自動的に変更し、AccessXKeys および AccessXFeedback コントロールの属性値を変更します。 ax_timeout, axt_opts_mask, axt_opts_values, axt_ctrls_mask, axt_ctrls_values が属性値です。 |
XkbAccessXFeedbackMask | 一部のキーボードが、キーが押されたとき、またはキーが繰り返されたときに、キークリック音を生成できるのと同じように、Xkb は特別なビープ音コードを利用して、コントロールにフィードバックを提供できます。 ax_options にフラグが設定されています。 |
XkbOverlay1Mask XkbOverlay2Mask | 2つのキーボードオーバーレイを有効/無効にでき、シミュレートされた代替キーコードを生成することができる。 |
XkbAudibleBellMask | 有効にすると、プロトコルはサウンドの生成を要求し、X サーバーで実際に本物のサウンドが生成されます。 無効にすると、強制的に要求されない限り、サーバーへのサウンド生成要求は無視されます。 |
XkbIgnoreGroupLockMask | 有効にすると、パッシブグラブをアクティブにするときに、キーボードグループのロック状態を考慮しないようにします。 |
XkbGroupsWrapMask | 範囲外のグループの処理方法の指定。 groups_wrap で値が指定されます。 |
XkbInternalModsMask | internal で、サーバーによって使用され、クライアントに報告されない修飾子を指定します。 |
XkbIgnoreLockModsMask | ignore_lock で、グラブ計算から除外する修飾子を指定します。 |
XkbPerKeyRepeatMask | per_key_repeat で、各キーごとのキーリピートの有効/無効を指定します。 先頭バイトの下位ビットから順に、キーコードごとのフラグがあります。 |
XkbControlsEnabledMask | enabled_ctrls に、有効状態になっている機能のフラグ (ここで指定されているマスク) があります。 |
関数
各機能を有効/無効にしたり、各属性値を個別に変更するには、それぞれの関数を使います。
自動リセット
クライアントが終了した時(異常終了も含む)、各コントロールの有効/無効を、指定した値にリセットすることができます。
Bool XkbSetAutoResetControls(Display *dpy, unsigned int changes, unsigned int *auto_ctrls, unsigned int *auto_values);
changes | 自動リセットの変更対象のコントロールのマスク。 OFF なら、設定は変更されない。 |
---|---|
auto_ctrls | 自動リセットを行うかどうかのコントロールのマスク。 changes = ON, auto_ctrls = ON なら、自動リセットが行われる。 changes = ON, auto_ctrls = OFF なら、自動リセットは行われないように変更される。 |
auto_values | 自動リセット時に、機能を有効にするか無効にするかのマスク |