Example #1
0
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;
}
Example #2
0
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;
}