---
name: "XkbSAActionSetCtrls"
section: "3"
platform: "linux"
package: "libx11-doc"
version: "2:1.8.4-2+deb12u2"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/XkbSAActionSetCtrls"
---

# XkbSAActionSetCtrls(3)

Sets the ctrls0 through ctrls3 fields of act from ctrls

## NAME

XkbSAActionSetCtrls - Sets the  *ctrls0* through  *ctrls3* fields of  *act* from  *ctrls*

## SYNOPSIS

**void XkbSAActionSetCtrls** **(XkbCtrlsAction** *act***,** **unsigned int** *ctrls***);**

## ARGUMENTS

- *act*

  action in which to set ctrls0-ctrls3

- *ctrls*

  value to set in ctrls0-ctrls3

## DESCRIPTION

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 | 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. |
| XkbSA\_LockControls | 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. |

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 | If set, and the action type is XkbSA\_LockControls, the server only disables controls. |
| XkbSA\_LockNoUnlock | If set, and the action type is XkbSA\_LockControls, the server only enables controls. |

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.*

## STRUCTURES

```
    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;
```
