~ruther/qmk_firmware

20dd9c032616722a54174d53b0f8824f639b5263 — Wojciech Siewierski 9 years ago 8d55a12
process_action may be called either with key cache or without it

If one wants to temporarily disable the key cache (for example because
it interferes with a macro), `disable_action_cache` must be set to
`true`. `process_action_nocache` is a simple wrapper doing just that for
a single call.
2 files changed, 19 insertions(+), 0 deletions(-)

M tmk_core/common/action.c
M tmk_core/common/action.h
M tmk_core/common/action.c => tmk_core/common/action.c +15 -0
@@ 53,6 53,17 @@ void action_exec(keyevent_t event)
#endif
}

#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
bool disable_action_cache = false;

void process_action_nocache(keyrecord_t *record)
{
    disable_action_cache = true;
    process_action(record);
    disable_action_cache = false;
}
#endif

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


@@ 64,6 75,10 @@ action_t store_or_get_action(bool pressed, keypos_t key)
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
    static action_t pressed_actions[MATRIX_ROWS][MATRIX_COLS];

    if (disable_action_cache) {
        return layer_switch_get_action(key);
    }

    if (pressed) {
        pressed_actions[key.row][key.col] = layer_switch_get_action(key);
    }

M tmk_core/common/action.h => tmk_core/common/action.h +4 -0
@@ 59,6 59,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt);

/* Utilities for actions.  */
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
extern bool disable_action_cache;
void process_action_nocache(keyrecord_t *record);
#endif
void process_action(keyrecord_t *record);
void register_code(uint8_t code);
void unregister_code(uint8_t code);