static Status XkbInitControls(DeviceIntPtr pXDev,XkbSrvInfoPtr xkbi) { XkbDescPtr xkb; XkbControlsPtr ctrls; xkb= xkbi->desc; /* 12/31/94 (ef) -- XXX! Should check if controls loaded from file */ if (XkbAllocControls(xkb,XkbAllControlsMask)!=Success) FatalError("Couldn't allocate keyboard controls\n"); ctrls= xkb->ctrls; if (!(xkb->defined & XkmSymbolsMask)) ctrls->num_groups = 1; ctrls->groups_wrap = XkbSetGroupInfo(1,XkbWrapIntoRange,0); ctrls->internal.mask = 0; ctrls->internal.real_mods = 0; ctrls->internal.vmods = 0; ctrls->ignore_lock.mask = 0; ctrls->ignore_lock.real_mods = 0; ctrls->ignore_lock.vmods = 0; ctrls->enabled_ctrls = XkbAccessXTimeoutMask|XkbRepeatKeysMask| XkbMouseKeysAccelMask|XkbAudibleBellMask| XkbIgnoreGroupLockMask; if (XkbWantAccessX) ctrls->enabled_ctrls|= XkbAccessXKeysMask; AccessXInit(pXDev); return Success; }
static Bool DefaultApplyControls(XkbConfigRtrnPtr rtrn, XkbDescPtr xkb) { unsigned on, off; XkbControlsPtr ctrls; unsigned int mask; if (XkbAllocControls(xkb, XkbAllControlsMask) != Success) return False; ctrls = xkb->ctrls; if (rtrn->replace_initial_ctrls) ctrls->enabled_ctrls = rtrn->initial_ctrls; else ctrls->enabled_ctrls |= rtrn->initial_ctrls; ctrls->enabled_ctrls &= ~rtrn->initial_ctrls_clear; if (rtrn->internal_mods.replace) { ctrls->internal.real_mods = rtrn->internal_mods.mods; ctrls->internal.vmods = rtrn->internal_mods.vmods; } else { ctrls->internal.real_mods &= ~rtrn->internal_mods.mods_clear; ctrls->internal.vmods &= ~rtrn->internal_mods.vmods_clear; ctrls->internal.real_mods |= rtrn->internal_mods.mods; ctrls->internal.vmods |= rtrn->internal_mods.vmods; } mask = 0; (void) XkbVirtualModsToReal(xkb, ctrls->internal.vmods, &mask); ctrls->internal.mask = (ctrls->internal.real_mods | mask); if (rtrn->ignore_lock_mods.replace) { ctrls->ignore_lock.real_mods = rtrn->ignore_lock_mods.mods; ctrls->ignore_lock.vmods = rtrn->ignore_lock_mods.vmods; } else { ctrls->ignore_lock.real_mods &= ~rtrn->ignore_lock_mods.mods_clear; ctrls->ignore_lock.vmods &= ~rtrn->ignore_lock_mods.vmods_clear; ctrls->ignore_lock.real_mods |= rtrn->ignore_lock_mods.mods; ctrls->ignore_lock.vmods |= rtrn->ignore_lock_mods.vmods; } mask = 0; (void) XkbVirtualModsToReal(xkb, ctrls->ignore_lock.vmods, &mask); ctrls->ignore_lock.mask = (ctrls->ignore_lock.real_mods | mask); if (rtrn->repeat_delay > 0) ctrls->repeat_delay = rtrn->repeat_delay; if (rtrn->repeat_interval > 0) ctrls->repeat_interval = rtrn->repeat_interval; if (rtrn->slow_keys_delay > 0) ctrls->slow_keys_delay = rtrn->slow_keys_delay; if (rtrn->debounce_delay > 0) ctrls->debounce_delay = rtrn->debounce_delay; if (rtrn->mk_delay > 0) ctrls->mk_delay = rtrn->mk_delay; if (rtrn->mk_interval > 0) ctrls->mk_interval = rtrn->mk_interval; if (rtrn->mk_time_to_max > 0) ctrls->mk_time_to_max = rtrn->mk_time_to_max; if (rtrn->mk_max_speed > 0) ctrls->mk_max_speed = rtrn->mk_max_speed; if (rtrn->mk_curve > 0) ctrls->mk_curve = rtrn->mk_curve; if (rtrn->defined & XkbCF_AccessXTimeout && rtrn->ax_timeout > 0) ctrls->ax_timeout = rtrn->ax_timeout; /* any value set to both off and on is reset to ignore */ if ((off = (rtrn->axt_ctrls_on & rtrn->axt_ctrls_off)) != 0) rtrn->axt_ctrls_ignore |= off; /* ignore takes priority over on and off */ rtrn->axt_ctrls_on &= ~rtrn->axt_ctrls_ignore; rtrn->axt_ctrls_off &= ~rtrn->axt_ctrls_ignore; if (!rtrn->replace_axt_ctrls_off) { off = (ctrls->axt_ctrls_mask & (~ctrls->axt_ctrls_values)); off &= ~rtrn->axt_ctrls_on; off |= rtrn->axt_ctrls_off; } else off = rtrn->axt_ctrls_off; if (!rtrn->replace_axt_ctrls_on) { on = (ctrls->axt_ctrls_mask & ctrls->axt_ctrls_values); on &= ~rtrn->axt_ctrls_off; on |= rtrn->axt_ctrls_on; } else on = rtrn->axt_ctrls_on; ctrls->axt_ctrls_mask = (on | off) & ~rtrn->axt_ctrls_ignore; ctrls->axt_ctrls_values = on & ~rtrn->axt_ctrls_ignore; /* any value set to both off and on is reset to ignore */ if ((off = (rtrn->axt_opts_on & rtrn->axt_opts_off)) != 0) rtrn->axt_opts_ignore |= off; /* ignore takes priority over on and off */ rtrn->axt_opts_on &= ~rtrn->axt_opts_ignore; rtrn->axt_opts_off &= ~rtrn->axt_opts_ignore; if (rtrn->replace_axt_opts_off) { off = (ctrls->axt_opts_mask & (~ctrls->axt_opts_values)); off &= ~rtrn->axt_opts_on; off |= rtrn->axt_opts_off; } else off = rtrn->axt_opts_off; if (!rtrn->replace_axt_opts_on) { on = (ctrls->axt_opts_mask & ctrls->axt_opts_values); on &= ~rtrn->axt_opts_off; on |= rtrn->axt_opts_on; } else on = rtrn->axt_opts_on; ctrls->axt_opts_mask = (unsigned short) ((on | off) & ~rtrn->axt_ctrls_ignore); ctrls->axt_opts_values = (unsigned short) (on & ~rtrn->axt_ctrls_ignore); if (rtrn->defined & XkbCF_GroupsWrap) { int n; n = XkbNumGroups(ctrls->groups_wrap); rtrn->groups_wrap = XkbSetNumGroups(rtrn->groups_wrap, n); ctrls->groups_wrap = rtrn->groups_wrap; } return True; }