イベントタイプ | イベントタイプ(xkb_type) |
---|---|
XkbEvent | XKB イベント共用体 |
XkbAnyEvent | XKB 共通データ |
XkbStateNotifyEvent | XKB の状態変化 |
XkbIndicatorNotifyEvent | インディケータの状態/マップが変化した |
XkbBellNotifyEvent | ベルイベント |
XkbAccessXNotifyEvent | 補助的なキー操作に関する通知 |
XkbControlsNotifyEvent | コントロールの設定が変化した |
XkbMapNotifyEvent | キーマッピングの変更時 |
XkbActionMessageEvent | アクションメッセージ |
XkbCompatMapNotifyEvent | 互換性マップ通知 |
XkbNamesNotifyEvent | 名前の変更 |
XkbNewKeyboardNotifyEvent | 新しいキーボードの通知 |
XkbExtensionDeviceNotifyEvent | XInput デバイスのステータス変化 |
#define XkbNewKeyboardNotify 0 #define XkbMapNotify 1 #define XkbStateNotify 2 #define XkbControlsNotify 3 #define XkbIndicatorStateNotify 4 #define XkbIndicatorMapNotify 5 #define XkbNamesNotify 6 #define XkbCompatMapNotify 7 #define XkbBellNotify 8 #define XkbActionMessage 9 #define XkbAccessXNotify 10 #define XkbExtensionDeviceNotify 11
イベントタイプ(xkb_type)
typedef union _XkbEvent { int type; XkbAnyEvent any; XkbStateNotifyEvent state; XkbMapNotifyEvent map; XkbControlsNotifyEvent ctrls; XkbIndicatorNotifyEvent indicators; XkbBellNotifyEvent bell; XkbAccessXNotifyEvent accessx; XkbNamesNotifyEvent names; XkbCompatMapNotifyEvent compat; XkbActionMessageEvent message; XkbExtensionDeviceNotifyEvent device; XkbNewKeyboardNotifyEvent new_kbd; XEvent core; } XkbEvent;
XKB イベント共用体
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; unsigned int device; } XkbAnyEvent;
XKB 共通データ
type
event_base + XkbEventCode (0)
device
イベントが生成されたリクエストで XkbUseCoreKbd が指定されていた場合、コアキーボードを指定するために、サーバーによって割り当てられた値がセットされます。
XInput 拡張機能のデバイス ID が指定されていた場合、同じ識別子が指定されます。
XInput 拡張機能のデバイス ID が指定されていた場合、同じ識別子が指定されます。
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int changed; int group; int base_group; int latched_group; int locked_group; unsigned int mods; unsigned int base_mods; unsigned int latched_mods; unsigned int locked_mods; int compat_state; unsigned char grab_mods; unsigned char compat_grab_mods; unsigned char lookup_mods; unsigned char compat_lookup_mods; int ptr_buttons; KeyCode keycode; char event_type; char req_major; char req_minor; } XkbStateNotifyEvent;
修飾子が ON/OFF されたとき、現在のグループが変更されたとき、またはポインタボタンが押されたときや離されたときなど、キーボードの状態が変化した時に来ます。
XkbStateNotify イベントは、現在のキーボード入力フォーカスまたはグラブ状態に関係なく、関係するすべてのクライアントに報告されます。
※(クライアント外のウィンドウを含む) どのウィンドウ上で状態が変化しても、常に、イベントを選択しているすべてのクライアントに送られます。
XkbStateNotify イベントは、現在のキーボード入力フォーカスまたはグラブ状態に関係なく、関係するすべてのクライアントに報告されます。
※(クライアント外のウィンドウを含む) どのウィンドウ上で状態が変化しても、常に、イベントを選択しているすべてのクライアントに送られます。
xkb_type
XkbStateNotify
device
デバイス ID (XkbUseCoreKbd ではない)
changed
何が変更されたかを示すフラグ。
#define XkbModifierStateMask (1L << 0) #define XkbModifierBaseMask (1L << 1) #define XkbModifierLatchMask (1L << 2) #define XkbModifierLockMask (1L << 3) #define XkbGroupStateMask (1L << 4) #define XkbGroupBaseMask (1L << 5) #define XkbGroupLatchMask (1L << 6) #define XkbGroupLockMask (1L << 7) #define XkbCompatStateMask (1L << 8) #define XkbGrabModsMask (1L << 9) #define XkbCompatGrabModsMask (1L << 10) #define XkbLookupModsMask (1L << 11) #define XkbCompatLookupModsMask (1L << 12) #define XkbPointerButtonMask (1L << 13) #define XkbAllStateComponentsMask (0x3fff)
group
effective グループのグループインデックス
base_group
base グループのグループインデックス
latched_group
latched グループのグループインデックス
locked_group
locked グループのグループインデックス
mod
effective 修飾子
base_mods
base 修飾子
latched_mods
latched 修飾子
locked_mods
locked 修飾子
compat_state
計算された互換性状態
grab_mods
グラブに使用される修飾子
compat_grab_mods
互換性グラブに使用される修飾子
lookup_mods
シンボルの lookup に使用される修飾子
compat_lookup_mods
互換性の lookup に使用される MOD
ptr_buttons
ポインタボタンのマスク (Button1Mask〜)
keycode
イベントを引き起こしたキーコード。プログラムによる場合は 0
event_type
req_major または req_minor が 0 以外の場合、コアイベントタイプ。
キーイベントによる状態変化の場合、KeyPress または KeyRelease。
ボタンイベントの場合、ButtonPress or ButtonRelease。keycode は ボタン番号。
それ以外の場合は、状態変更を引き起こしたリクエストのコードが req_major,req_minor に設定される。keycode は 0。
キーイベントによる状態変化の場合、KeyPress または KeyRelease。
ボタンイベントの場合、ButtonPress or ButtonRelease。keycode は ボタン番号。
それ以外の場合は、状態変更を引き起こしたリクエストのコードが req_major,req_minor に設定される。keycode は 0。
req_major
プログラムトリガーの場合はメジャーリクエストコード、それ以外の場合は 0。
拡張機能のオペコードと同じ。
拡張機能のオペコードと同じ。
req_minor
プログラムトリガーの場合はマイナーリクエストコード、それ以外の場合は 0
typedef struct _XkbIndicatorNotify { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int changed; unsigned int state; } XkbIndicatorNotifyEvent;
インジケーターの状態が変化するたびに、サーバーは関係するすべてのクライアントに XkbIndicatorStateNotify イベントを送信します。
また、インジケーターのマップが変更されるたびに、サーバーは関係するすべてのクライアントに XkbIndicatorMapNotify イベントを送信します。
XkbIndicatorStateNotify イベントを受信するには、XkbIndicatorStateNotifyMask を含む bits_to_change パラメータと value_for_bits パラメータの両方を指定して、XkbSelectEvents を使用します。
XkbIndicatorMapNotify イベントを受信するには、XkbSelectEvents を XkbIndicatorMapNotifyMask とともに使用します。
特定のインジケーターのみのイベントを受信するには、XkbSelectEventDetails を使用します。
events_type パラメーターを XkbIndicatorStateNotify または XkbIndicatorMapNotify に設定し、bits_to_change と value_for_bits の両方の詳細パラメーターを、各ビットが 1 つのインジケーターを指定するマスクに設定し、イベントを受信するインジケーターを指定するビットをオンにします。
クライアントアプリケーションが XkbIndicatorStateNotify イベントまたは XkbIndicatorMapNotify イベントを受信すると、XkbNoteIndicatorChanges を呼び出すことで、XkbIndicatorChangesRec を取得できます。
また、インジケーターのマップが変更されるたびに、サーバーは関係するすべてのクライアントに XkbIndicatorMapNotify イベントを送信します。
XkbIndicatorStateNotify イベントを受信するには、XkbIndicatorStateNotifyMask を含む bits_to_change パラメータと value_for_bits パラメータの両方を指定して、XkbSelectEvents を使用します。
XkbIndicatorMapNotify イベントを受信するには、XkbSelectEvents を XkbIndicatorMapNotifyMask とともに使用します。
特定のインジケーターのみのイベントを受信するには、XkbSelectEventDetails を使用します。
events_type パラメーターを XkbIndicatorStateNotify または XkbIndicatorMapNotify に設定し、bits_to_change と value_for_bits の両方の詳細パラメーターを、各ビットが 1 つのインジケーターを指定するマスクに設定し、イベントを受信するインジケーターを指定するビットをオンにします。
クライアントアプリケーションが XkbIndicatorStateNotify イベントまたは XkbIndicatorMapNotify イベントを受信すると、XkbNoteIndicatorChanges を呼び出すことで、XkbIndicatorChangesRec を取得できます。
xkb_type
XkbIndicatorStateNotify or XkbIndicatorMapNotify
changed
変更されたインディケータのマスク
state
すべてのインディケータの現在の状態のマスク
typedef struct _XkbBellNotify { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; unsigned int device; int percent; int pitch; int duration; unsigned int bell_class; unsigned int bell_id; Atom name; Window window; Bool event_only; } XkbBellNotifyEvent;
Xkb は、XkbForceDeviceBell および XkbForceBell の呼び出しから生じるものを除く、すべてのベルに対して XkbBellNotify イベントを生成します。
XkbBellNotify イベントには、イベントの詳細はありません。選択されているか、選択されていないかのどちらかです。
ただし、event_type として XkbBellNotify を使用し、bits_to_change および value_for_bits で XkbAllBellEventsMask を指定して、XkbSelectEventDetails を呼び出すことができます。
XkbBellNotify イベントには、イベントの詳細はありません。選択されているか、選択されていないかのどちらかです。
ただし、event_type として XkbBellNotify を使用し、bits_to_change および value_for_bits で XkbAllBellEventsMask を指定して、XkbSelectEventDetails を呼び出すことができます。
xkb_type
XkbBellNotify
percent
要求された音量
pitch
要求されたピッチ (Hz)
duration
要求された期間 (マイクロ秒)
name
要求されたベルの名前
window
イベントに関連付けられたウィンドウ
event_only
False で、サーバーはビープ音を鳴らさなかった
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; int detail; KeyCode keycode; int slowKeysDelay; int debounceDelay; } XkbAccessXNotifyEvent;
サーバーは、一部のグローバルキーボードコントロールに対して XkbAccessXNotify イベントを生成できます。
イベント選択の詳細マスクは以下。
イベント選択の詳細マスクは以下。
XkbAXN_SKPressMask (1<<0) XkbAXN_SKAcceptMask (1<<1) XkbAXN_SKRejectMask (1<<2) XkbAXN_SKReleaseMask (1<<3) XkbAXN_BKAcceptMask (1<<4) XkbAXN_BKRejectMask (1<<5) XkbAXN_AXKWarningMask (1<<6) XkbAXN_AllEventsMask (0x7f)
xkb_type
XkbAccessXNotify
detail
XkbAXN_SKPress | スローキーが有効なときにキーが押された |
---|---|
XkbAXN_SKAccept | キーが受け入れられた (SlowKeys 遅延よりも長く保持された) |
XkbAXN_SKRelease | 受け入れられた SlowKeys キーが離された |
XkbAXN_SKReject | キーが拒否された (SlowKeys 遅延が期限切れになる前に離された) |
XkbAXN_BKAccept | キーが BounceKeys によって受け入れられた |
XkbAXN_BKReject | キーが拒否された (BounceKeys 遅延が期限切れになる前に離された) |
XkbAXN_AXKWarning | AccessXKeys が StickyKeys または BounceKeys をオン/オフにしようとしている |
keycode
イベントが発生したときのキーコード
slowKeysDelay
アクションが SlowKeys に関連している場合、現在の SlowKeys 遅延
debounceDelay
アクションが BounceKeys に関連している場合、現在のデバウンス遅延
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int changed_ctrls; unsigned int enabled_ctrls; unsigned int enabled_ctrl_changes; int num_groups; KeyCode keycode; char event_type; char req_major; char req_minor; } XkbControlsNotifyEvent;
コントロールの設定が変化した
xkb_type
XkbCompatMapNotify
changed_ctrls
変化したコントロールのマスク
enabled_ctrls
サーバーで現在有効になっているコントロール
enabled_ctrl_changes
コントロールが有効または無効になった場合のマスク
num_groups
最も多くのグループに属するキーにバインドされているグループの数を報告し、キーボードマッピングが変更されると自動的に更新されます。
keycode
event_type が KeyPress、KeyRelease、DeviceKeyPress、DeviceKeyRelease の場合、変更を引き起こしたキーコード。
event_type が ButtonPress または ButtonRelease の場合、ボタン番号。
それ以外は 0。
event_type が ButtonPress または ButtonRelease の場合、ボタン番号。
それ以外は 0。
event_type
変更を引き起こしたイベントのタイプ。
(KeyPress、KeyRelease、DeviceKeyPress、DeviceKeyRelease、ButtonPress、ButtonRelease のいずれか)
クライアントからのリクエストによる場合、0。
(KeyPress、KeyRelease、DeviceKeyPress、DeviceKeyRelease、ButtonPress、ButtonRelease のいずれか)
クライアントからのリクエストによる場合、0。
req_major,req_minor
イベントを引き起こしたリクエスト。
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int changed; unsigned int resized; int first_type; int num_types; KeyCode min_key_code; KeyCode max_key_code; KeyCode first_key_sym; KeyCode first_key_act; KeyCode first_key_behavior; KeyCode first_key_explicit; KeyCode first_modmap_key; KeyCode first_vmodmap_key; int num_key_syms; int num_key_acts; int num_key_behaviors; int num_key_explicit; int num_modmap_keys; int num_vmodmap_keys; unsigned int vmods; } XkbMapNotifyEvent;
キーマッピングの変更時
xkb_type
XkbMapNotify
changed
変更されたデータのマスク
resized
予約
typedef struct _XkbActionMessage { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; KeyCode keycode; Bool press; Bool key_event_follows; char message[XkbActionMessageLength+1]; } XkbActionMessageEvent;
アクションメッセージ
xkb_type
XkbActionMessage
press
True でキーが押された。False で離された。
key_event_follows
KeyPress (press が True の場合) または KeyRelease (press が False の場合) イベントも、クライアントに送信されるかどうかを指定します。
他のすべての Xkb イベントと同様に、現在のキーボードフォーカスに関係なく、イベントを要求しているすべてのクライアントに配信されます。
ただし、条件付きで、XkbActionMessageEvent に続く KeyPress または KeyRelease イベントは、現在のキーボードフォーカスによって選択されているクライアントにのみ送信されます。
次の KeyPress または KeyRelease イベントが、実際に送信されるクライアントに対してのみ、True が設定されます。
他のすべての Xkb イベントと同様に、現在のキーボードフォーカスに関係なく、イベントを要求しているすべてのクライアントに配信されます。
ただし、条件付きで、XkbActionMessageEvent に続く KeyPress または KeyRelease イベントは、現在のキーボードフォーカスによって選択されているクライアントにのみ送信されます。
次の KeyPress または KeyRelease イベントが、実際に送信されるクライアントに対してのみ、True が設定されます。
message
メッセージアクションで指定された値。NULL で終わることが保証される。
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int changed_groups; int first_si; int num_si; int num_total_si; } XkbCompatMapNotifyEvent;
キーボードマッピングが変更されると、サーバーは MappingNotify イベントを自動的に生成します。
互換性マップへの変更の通知を受け取りたい場合は、XkbCompatMapNotify イベントを選択する必要があります。
XkbMapNotify イベントを選択すると、自動生成された MappingNotify イベントを受信しなくなります。
その後、XkbMapNotifyEvent 配信の選択を解除すると、再び MappingNotify イベントを受信します。
自分自身が行った変更だけでなく、他のクライアントが行った変更も通知されることに注意してください。
互換性マップへの変更の通知を受け取りたい場合は、XkbCompatMapNotify イベントを選択する必要があります。
XkbMapNotify イベントを選択すると、自動生成された MappingNotify イベントを受信しなくなります。
その後、XkbMapNotifyEvent 配信の選択を解除すると、再び MappingNotify イベントを受信します。
自分自身が行った変更だけでなく、他のクライアントが行った変更も通知されることに注意してください。
xkb_type
XkbCompatMapNotify
changed_groups
変更されたグループ互換性マップの数。
互換性マップの対応するコピーを維持している場合、または XkbGetCompatMap を使用してサーバーから新しいコピーを取得している場合、changed_groups は XkbCompatMapRec 構造内のグループ [0..Changed_groups - 1] を参照します。
互換性マップの対応するコピーを維持している場合、または XkbGetCompatMap を使用してサーバーから新しいコピーを取得している場合、changed_groups は XkbCompatMapRec 構造内のグループ [0..Changed_groups - 1] を参照します。
first_si
最初に変更されたシンボル解釈のインデックス
num_si
変更されたシンボル解釈の数
num_total_si
有効なシンボル解釈の総数です
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int changed; int first_type; int num_types; int first_lvl; int num_lvls; int num_aliases; int num_radio_groups; unsigned int changed_vmods; unsigned int changed_groups; unsigned int changed_indicators; int first_key; int num_keys; } XkbNamesNotifyEvent;
名前の変更
xkb_type
XkbNamesNotify
typedef struct _XkbNewKeyboardNotify { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; int old_device; int min_key_code; int max_key_code; int old_min_key_code; int old_max_key_code; unsigned int changed; char req_major; char req_minor; } XkbNewKeyboardNotifyEvent;
新しいキーボードの通知
xkb_type
XkbNewKeyboardNotify
changed
XkbNKN_KeycodesMask | キーコード範囲 |
---|---|
XkbNKN_GeometryMask | ジオメトリ |
XkbNKN_DeviceIDMask | デバイスID |
XkbAllNewKeyboardEventsMask | 上記すべて |
req_major,req_minor
req_major と req_minor がゼロの場合、デバイスの変更はサーバーへのソフトウェア要求によって引き起こされたものではなく、新しいデバイスのホットプラグなどの自発的な変更が発生しました。
この場合、device は新しい現在の X キーボード デバイスのデバイス識別子ですが、old_device に関して実装に依存しない保証はありません。
old_device は device と同一である場合があります (デバイスが変更された場合、実装者はデバイス指定子を再利用できます)。または異なる場合があります。
req_major と req_minor がゼロであっても、必ずしも物理キーボードデバイスが変更されたことを意味するわけではないことに注意してください。
むしろ、ソフトウェア制御の外での自発的な変化を意味するだけです (一部のシステムには、キーを押すと人格を変更できるキーボードが搭載されています)。
キーボードの変更が XInput ChangeKeyboardDevice リクエストの結果である場合、req_major には XInput メジャーオペコードが含まれ、req_minor には X_ChangeKeyboardDevice のリクエスト番号が含まれます。
この場合、device と old_device は異なり、device は新しい現在の X キーボードデバイスの識別子であり、old_device は以前のデバイスの識別子です。
キーボードの変更が、XkbGetKeyboardByName 関数呼び出しの結果である場合、req_major には Xkb 拡張ベース イベント コードが含まれ、req_minor には Xkb 拡張リクエスト X_kbGetKbdByName のイベントコードが含まれます。
device には新しいデバイスのデバイス識別子が含まれていますが、old_device については決定的なことは何も言えません。
実装に応じて、デバイスと同じである場合もあれば、異なる場合もあります。
この場合、device は新しい現在の X キーボード デバイスのデバイス識別子ですが、old_device に関して実装に依存しない保証はありません。
old_device は device と同一である場合があります (デバイスが変更された場合、実装者はデバイス指定子を再利用できます)。または異なる場合があります。
req_major と req_minor がゼロであっても、必ずしも物理キーボードデバイスが変更されたことを意味するわけではないことに注意してください。
むしろ、ソフトウェア制御の外での自発的な変化を意味するだけです (一部のシステムには、キーを押すと人格を変更できるキーボードが搭載されています)。
キーボードの変更が XInput ChangeKeyboardDevice リクエストの結果である場合、req_major には XInput メジャーオペコードが含まれ、req_minor には X_ChangeKeyboardDevice のリクエスト番号が含まれます。
この場合、device と old_device は異なり、device は新しい現在の X キーボードデバイスの識別子であり、old_device は以前のデバイスの識別子です。
キーボードの変更が、XkbGetKeyboardByName 関数呼び出しの結果である場合、req_major には Xkb 拡張ベース イベント コードが含まれ、req_minor には Xkb 拡張リクエスト X_kbGetKbdByName のイベントコードが含まれます。
device には新しいデバイスのデバイス識別子が含まれていますが、old_device については決定的なことは何も言えません。
実装に応じて、デバイスと同じである場合もあれば、異なる場合もあります。
typedef struct { int type; unsigned long serial; Bool send_event; Display * display; Time time; int xkb_type; int device; unsigned int reason; unsigned int supported; unsigned int unsupported; int first_btn; /* first button that changed */ int num_btns; /* number of buttons that changed */ unsigned int leds_defined; /* indicators with names or maps */ unsigned int led_state; /* current state of the indicators */ int led_class; /* feedback class for LED changes */ int led_id; /* feedback ID for LED changes */ } XkbExtensionDeviceNotifyEvent;
XInput デバイスのステータスが変化したとき、または、特定のデバイスで、サポートされていない Xkb 機能を使用しようとしたときに、XkbExtensionDeviceNotify イベントを生成します。
xkb_type
XkbExtensionDeviceNotifyEvent