Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #156: clear weak mods on every key press #188

Merged
merged 1 commit into from
Mar 27, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions tmk_core/common/action.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ void process_action(keyrecord_t *record)
#endif
dprintln();

if (event.pressed) {
// clear the potential weak mods left by previously pressed keys
clear_weak_mods();
}
switch (action.kind.id) {
/* Key and Mods */
case ACT_LMODS:
Expand Down Expand Up @@ -500,6 +504,7 @@ void clear_keyboard(void)
void clear_keyboard_but_mods(void)
{
clear_weak_mods();
clear_macro_mods();
clear_keys();
send_keyboard_report();
#ifdef MOUSEKEY_ENABLE
Expand Down
4 changes: 2 additions & 2 deletions tmk_core/common/action_macro.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ void action_macro_play(const macro_t *macro_p)
MACRO_READ();
dprintf("KEY_DOWN(%02X)\n", macro);
if (IS_MOD(macro)) {
add_weak_mods(MOD_BIT(macro));
add_macro_mods(MOD_BIT(macro));
send_keyboard_report();
} else {
register_code(macro);
Expand All @@ -51,7 +51,7 @@ void action_macro_play(const macro_t *macro_p)
MACRO_READ();
dprintf("KEY_UP(%02X)\n", macro);
if (IS_MOD(macro)) {
del_weak_mods(MOD_BIT(macro));
del_macro_mods(MOD_BIT(macro));
send_keyboard_report();
} else {
unregister_code(macro);
Expand Down
9 changes: 9 additions & 0 deletions tmk_core/common/action_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ static inline void del_key_bit(uint8_t code);

static uint8_t real_mods = 0;
static uint8_t weak_mods = 0;
static uint8_t macro_mods = 0;

#ifdef USB_6KRO_ENABLE
#define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS)
Expand All @@ -55,6 +56,7 @@ static int16_t oneshot_time = 0;
void send_keyboard_report(void) {
keyboard_report->mods = real_mods;
keyboard_report->mods |= weak_mods;
keyboard_report->mods |= macro_mods;
#ifndef NO_ACTION_ONESHOT
if (oneshot_mods) {
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
Expand Down Expand Up @@ -118,6 +120,13 @@ void del_weak_mods(uint8_t mods) { weak_mods &= ~mods; }
void set_weak_mods(uint8_t mods) { weak_mods = mods; }
void clear_weak_mods(void) { weak_mods = 0; }

/* macro modifier */
uint8_t get_macro_mods(void) { return macro_mods; }
void add_macro_mods(uint8_t mods) { macro_mods |= mods; }
void del_macro_mods(uint8_t mods) { macro_mods &= ~mods; }
void set_macro_mods(uint8_t mods) { macro_mods = mods; }
void clear_macro_mods(void) { macro_mods = 0; }

/* Oneshot modifier */
#ifndef NO_ACTION_ONESHOT
void set_oneshot_mods(uint8_t mods)
Expand Down
7 changes: 7 additions & 0 deletions tmk_core/common/action_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ void del_weak_mods(uint8_t mods);
void set_weak_mods(uint8_t mods);
void clear_weak_mods(void);

/* macro modifier */
uint8_t get_macro_mods(void);
void add_macro_mods(uint8_t mods);
void del_macro_mods(uint8_t mods);
void set_macro_mods(uint8_t mods);
void clear_macro_mods(void);

/* oneshot modifier */
void set_oneshot_mods(uint8_t mods);
void clear_oneshot_mods(void);
Expand Down