Ejemplo n.º 1
0
action_t layer_switch_get_action(keypos_t key)
{
    action_t action;
    action.code = ACTION_TRANSPARENT;
#ifndef NO_ACTION_LAYER
    uint32_t layers = layer_state | default_layer_state;
    /* check top layer first */
    for (int8_t i = 31; i >= 0; i--) {
        if (layers & (1UL<<i)) {
            action = action_for_key(i, key);
            if (action.code != ACTION_TRANSPARENT) {
                return action;
            }
        }
    }
    /* fall back to layer 0 */
    action = action_for_key(0, key);
    return action;
#else
    action = action_for_key(biton32(default_layer_state), key);
    return action;
#endif
}
Ejemplo n.º 2
0
/** \brief Store or get action (FIXME: Needs better summary)
 *
 * Make sure the action triggered when the key is released is the same
 * one as the one triggered on press. It's important for the mod keys
 * when the layer is switched after the down event but before the up
 * event as they may get stuck otherwise.
 */
action_t store_or_get_action(bool pressed, keypos_t key)
{
#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
    if (disable_action_cache) {
        return layer_switch_get_action(key);
    }

    uint8_t layer;

    if (pressed) {
        layer = layer_switch_get_layer(key);
        update_source_layers_cache(key, layer);
    }
    else {
        layer = read_source_layers_cache(key);
    }
    return action_for_key(layer, key);
#else
    return layer_switch_get_action(key);
#endif
}
Ejemplo n.º 3
0
/** \brief Layer switch get layer
 *
 * FIXME: Needs docs
 */
action_t layer_switch_get_action(keypos_t key)
{
    return action_for_key(layer_switch_get_layer(key), key);
}