Actions associated with the XkbCtrlsAction structure change the state of the boolean controls.
The type field can have any one of the values shown in Table 1.
Table 1 Controls Action Types |
Type Effect |
XkbSA_SetControls T{ |
A key press enables any boolean controls specified in the ctrls fields that were |
not already enabled at |
the time of the key press. |
A key release disables any controls enabled by the key press. |
This action can cause XkbControlsNotify events. |
T} |
XkbSA_LockControls T{ |
If the XkbSA_LockNoLock bit is not set in the flags field, a key press enables |
any controls specified in |
the ctrls fields that were not already enabled at the time of the key press. |
If the XkbSA_LockNoUnlock bit is not set in the flags field, a key release |
disables any controls |
specified in the ctrls fields that were not already disabled at the time of the |
key press. |
This action can cause XkbControlsNotify events. |
T} |
The flags field is composed of the bitwise inclusive OR of the masks shown in Table 2.
Table 2 Control Action Flags |
Flag Meaning |
XkbSA_LockNoLock T{ |
If set, and the action type is XkbSA_LockControls, the server only disables |
controls. |
T} |
XkbSA_LockNoUnlock T{ |
If set, and the action type is XkbSA_LockControls, the server only enables |
controls. |
T} |
The XkbSA_SetControls action implements a key that enables a boolean control when pressed and disables it when released. The XkbSA_LockControls action is used to implement a key that toggles the state of a boolean control each time it is pressed and released. The XkbSA_LockNoLock and XkbSA_LockNoUnlock flags allow modifying the toggling behavior to only unlock or only lock the boolean control.
The ctrls0, ctrls1, ctrls2, and ctrls3 fields represent the boolean controls in the enabled_ctrls field of the controls structure. Xkb macros, to convert between the two formats.
XkbSAActionSetCtrls sets the ctrls0 through ctrls3 fields of act from ctrls.
typedef struct _XkbCtrlsAction { unsigned char type; /* XkbSA_SetControls, XkbSA_LockControls */ unsigned char flags; /* with type, controls enabling and disabling of controls */ unsigned char ctrls3; /* ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls2; /* ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls1; /* ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls0; /* ctrls0 through ctrls3 represent the boolean controls */ } XkbCtrlsAction;