The XkbControlsChangesRec structure allows applications to track modifications to an XkbControlsRec structure and thereby reduce the amount of traffic sent to the server. The same XkbControlsChangesRec structure may be used in several successive modifications to the same XkbControlsRec structure, then subsequently used to cause all of the changes, and only the changes, to be propagated to the server.

The changed_ctrls field is a mask specifying which logical sets of data in the controls structure have been modified. In this context, modified means set, that is, if a value is set to the same value it previously contained, it has still been modified, and is noted as changed. Valid values for changed_ctrls are any combination of the masks listed in Table 1 that have "ok" in the changed_ctrls column. Setting a bit implies the corresponding data fields from the "Relevant XkbControlsRec Data Fields" column in Table 1 have been modified. The enabled_ctrls_changes field specifies which bits in the enabled_ctrls field have changed. If the number of keyboard groups has changed, the num_groups_changed field is set to True.

Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled.

Table 1 Xkb Controls

Control

Control

Selection

Relevant

Mask

XkbControlsRec

Boolean Control

(which parameter)

DataFields

enabled_ctrls bit

Section

AccessXFeedback

XkbAccessXFeedbackMask

ax_options:

XkbAccessXFeedbackMask

10.6.3

XkbAX_*FBMask

AccessXKeys

XkbAccessXKeysMask

10.6.1

AccessXTimeout

XkbAccessXTimeoutMask

ax_timeout

XkbAccessXTimeoutMask

10.6.2

axt_opts_mask

axt_opts_values

axt_ctrls_mask

axt_ctrls_values

AudibleBell

XkbAudibleBellMask

9.2

AutoReset

10.1.2

BounceKeys

XkbBounceKeysMask

debounce_delay

XkbBounceKeysMask

10.6.7

Detectable-

10.3.3

Autorepeat

EnabledControls

XkbControlsEnabledMask

enabled_ctrls

Non-Boolean Control

10.1.1

GroupsWrap

XkbGroupsWrapMask

groups_wrap

Non-Boolean Control

10.7.1

IgnoreGroupLock

XkbIgnoreGroupLockMask

10.7.3

IgnoreLockMods

XkbIgnoreLockModsMask

ignore_lock

Non-Boolean Control

5.1

InternalMods

XkbInternalModsMask

internal

Non-Boolean Control

5.1

MouseKeys

XkbMouseKeysMask

mk_dflt_btn

XkbMouseKeysMask

10.5.1

MouseKeysAccel

XkbMouseKeysAccelMask

mk_delay

XkbMouseKeysAccelMask

10.5.2

mk_interval

mk_time_to_max

mk_max_speed

mk_curve

Overlay1

XkbOverlay1Mask

10.4

Overlay2

XkbOverlay2Mask

10.4

PerKeyRepeat

XkbPerKeyRepeatMask

per_key_repeat

Non-Boolean Control

10.3.1

RepeatKeys

XkbRepeatKeysMask

repeat_delay

XkbRepeatKeysMask

10.3

repeat_interval

SlowKeys

XkbSlowKeysMask

slow_keys_delay

XkbSlowKeysMask

10.6.6

StickyKeys

XkbStickyKeysMask

ax_options:

XkbStickyKeysMask

10.6.8

XkbAX_TwoKeysMask

XkbAX_LatchToLockMask

Table 2 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled.

Table 2 Controls Mask Bits

Mask Bit

which or

enabled

Value

changed_ctrls

_ctrls

XkbRepeatKeysMask

ok

ok

(1L<<0)

XkbSlowKeysMask

ok

ok

(1L<<1)

XkbBounceKeysMask

ok

ok

(1L<<2)

XkbStickyKeysMask

ok

ok

(1L<<3)

XkbMouseKeysMask

ok

ok

(1L<<4)

XkbMouseKeysAccelMask

ok

ok

(1L<<5)

XkbAccessXKeysMask

ok

ok

(1L<<6)

XkbAccessXTimeoutMask

ok

ok

(1L<<7)

XkbAccessXFeedbackMask

ok

ok

(1L<<8)

XkbAudibleBellMask

ok

(1L<<9)

XkbOverlay1Mask

ok

(1L<<10)

XkbOverlay2Mask

ok

(1L<<11)

XkbIgnoreGroupLockMask

ok

(1L<<12)

XkbGroupsWrapMask

ok

(1L<<27)

XkbInternalModsMask

ok

(1L<<28)

XkbIgnoreLockModsMask

ok

(1L<<29)

XkbPerKeyRepeatMask

ok

(1L<<30)

XkbControlsEnabledMask

ok

(1L<<31)

XkbAccessXOptionsMask

ok

ok

(XkbStickyKeysMask |

XkbAccessXFeedbackMask)

XkbAllBooleanCtrlsMask

ok

(0x00001FFF)

XkbAllControlsMask

ok

(0xF8001FFF)

If you have an Xkb description with controls that have been modified and an XkbControlsChangesRec that describes the changes that have been made, the XkbChangeControls function provides a flexible method for updating the controls in a server to match those in the changed keyboard description.

XkbChangeControls copies any controls fields specified by changes from the keyboard description controls structure, xkb->ctrls, to the server specified by dpy.