From 02308decabf4601e3c49e12b5732d5d5378b8750 Mon Sep 17 00:00:00 2001 From: arutonee Date: Sun, 9 Mar 2025 16:18:06 -0400 Subject: [PATCH 1/6] Fixed momentary mode of mouse keys resetting speed when it should not #5691 --- quantum/mousekey.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 9649943a0d4..67475860aff 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -618,11 +618,11 @@ void mousekey_off(uint8_t code) { else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons &= ~(1 << (code - QK_MOUSE_BUTTON_1)); # ifdef MK_MOMENTARY_ACCEL - else if (code == QK_MOUSE_ACCELERATION_0) + else if (code == QK_MOUSE_ACCELERATION_0 && old_speed == mkspd_0) mk_speed = mkspd_DEFAULT; - else if (code == QK_MOUSE_ACCELERATION_1) + else if (code == QK_MOUSE_ACCELERATION_1 && old_speed == mkspd_1) mk_speed = mkspd_DEFAULT; - else if (code == QK_MOUSE_ACCELERATION_2) + else if (code == QK_MOUSE_ACCELERATION_2 && old_speed == mkspd_2) mk_speed = mkspd_DEFAULT; if (mk_speed != old_speed) adjust_speed(); # endif From f327095c1bbfef4e126eed94a1267f06374184a5 Mon Sep 17 00:00:00 2001 From: arutonee Date: Sun, 9 Mar 2025 16:43:51 -0400 Subject: [PATCH 2/6] Created speed mask to emulate stack when multiple acceleration keys pressed --- quantum/mousekey.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 67475860aff..9f2e0d05002 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -501,10 +501,11 @@ void mousekey_off(uint8_t code) { enum { mkspd_unmod, mkspd_0, mkspd_1, mkspd_2, mkspd_COUNT }; # ifndef MK_MOMENTARY_ACCEL -static uint8_t mk_speed = mkspd_1; +static uint8_t mk_speed = mkspd_1; # else static uint8_t mk_speed = mkspd_unmod; static uint8_t mkspd_DEFAULT = mkspd_unmod; +static uint8_t mk_speed_mask = 0; # endif static uint16_t last_timer_c = 0; static uint16_t last_timer_w = 0; @@ -564,6 +565,17 @@ void adjust_speed(void) { } } +void update_mk_speed(void) { + if (mk_speed_mask & 0b100) + mk_speed = mkspd_2; + else if (mk_speed_mask & 0b010) + mk_speed = mkspd_1; + else if (mk_speed_mask & 0b001) + mk_speed = mkspd_0; + else + mk_speed = mkspd_DEFAULT; +} + void mousekey_on(uint8_t code) { uint16_t const c_offset = c_offsets[mk_speed]; uint16_t const w_offset = w_offsets[mk_speed]; @@ -587,11 +599,14 @@ void mousekey_on(uint8_t code) { else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons |= 1 << (code - QK_MOUSE_BUTTON_1); else if (code == QK_MOUSE_ACCELERATION_0) - mk_speed = mkspd_0; + mk_speed_mask |= 0b001; else if (code == QK_MOUSE_ACCELERATION_1) - mk_speed = mkspd_1; + mk_speed_mask |= 0b010; else if (code == QK_MOUSE_ACCELERATION_2) - mk_speed = mkspd_2; + mk_speed_mask |= 0b100; + + update_mk_speed(); + if (mk_speed != old_speed) adjust_speed(); } @@ -618,12 +633,13 @@ void mousekey_off(uint8_t code) { else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons &= ~(1 << (code - QK_MOUSE_BUTTON_1)); # ifdef MK_MOMENTARY_ACCEL - else if (code == QK_MOUSE_ACCELERATION_0 && old_speed == mkspd_0) - mk_speed = mkspd_DEFAULT; - else if (code == QK_MOUSE_ACCELERATION_1 && old_speed == mkspd_1) - mk_speed = mkspd_DEFAULT; - else if (code == QK_MOUSE_ACCELERATION_2 && old_speed == mkspd_2) - mk_speed = mkspd_DEFAULT; + else if (code == QK_MOUSE_ACCELERATION_0) + mk_speed_mask &= 0b110; + else if (code == QK_MOUSE_ACCELERATION_1) + mk_speed_mask &= 0b101; + else if (code == QK_MOUSE_ACCELERATION_2) + mk_speed_mask &= 0b011; + update_mk_speed(); if (mk_speed != old_speed) adjust_speed(); # endif } From 2bba02a1a8bfc3395c097910c9606819acf410b0 Mon Sep 17 00:00:00 2001 From: arutonee Date: Sun, 9 Mar 2025 19:05:59 -0400 Subject: [PATCH 3/6] Added fallback for non-momentary accel --- quantum/mousekey.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 9f2e0d05002..4ab2ff3aca0 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -565,6 +565,7 @@ void adjust_speed(void) { } } +# ifdef MK_MOMENTARY_ACCEL void update_mk_speed(void) { if (mk_speed_mask & 0b100) mk_speed = mkspd_2; @@ -575,6 +576,7 @@ void update_mk_speed(void) { else mk_speed = mkspd_DEFAULT; } +# endif void mousekey_on(uint8_t code) { uint16_t const c_offset = c_offsets[mk_speed]; @@ -598,6 +600,14 @@ void mousekey_on(uint8_t code) { mouse_report.h = w_offset; else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons |= 1 << (code - QK_MOUSE_BUTTON_1); +# ifndef MK_MOMENTARY_ACCEL + else if (code == QK_MOUSE_ACCELERATION_0) + mk_speed = mkspd_0; + else if (code == QK_MOUSE_ACCELERATION_1) + mk_speed = mkspd_1; + else if (code == QK_MOUSE_ACCELERATION_2) + mk_speed = mkspd_2; +# else else if (code == QK_MOUSE_ACCELERATION_0) mk_speed_mask |= 0b001; else if (code == QK_MOUSE_ACCELERATION_1) @@ -606,6 +616,7 @@ void mousekey_on(uint8_t code) { mk_speed_mask |= 0b100; update_mk_speed(); +# endif if (mk_speed != old_speed) adjust_speed(); } From 177731d8c5903cc13f4fdd5f1f29a7c4e71f4aad Mon Sep 17 00:00:00 2001 From: arutonee Date: Sun, 9 Mar 2025 21:12:50 -0400 Subject: [PATCH 4/6] Applied mask to cursor movement as well --- quantum/mousekey.c | 139 +++++++++++++++++++++++++++------------------ 1 file changed, 84 insertions(+), 55 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 4ab2ff3aca0..51ec514221b 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -42,6 +42,9 @@ static void mousekey_debug(void); static uint8_t mousekey_accel = 0; static uint8_t mousekey_repeat = 0; static uint8_t mousekey_wheel_repeat = 0; + +// WU, WD, WL, WR, U, D, L, R +static int16_t mousekeys_pressed = 0; #ifdef MOUSEKEY_INERTIA static uint8_t mousekey_frame = 0; // track whether gesture is inactive, first frame, or repeating static int8_t mousekey_x_dir = 0; // -1 / 0 / 1 = left / neutral / right @@ -384,6 +387,15 @@ void mousekey_task(void) { memcpy(&mouse_report, &tmpmr, sizeof(tmpmr)); } +void update_mouse_report(void) { + uint8_t mu = move_unit(); + uint8_t wu = wheel_unit(); + mouse_report.x = mu * ((mousekeys_pressed & (1 << 0) ? 1 : 0) - (mousekeys_pressed & (1 << 1) ? 1 : 0)); + mouse_report.y = mu * ((mousekeys_pressed & (1 << 2) ? 1 : 0) - (mousekeys_pressed & (1 << 3) ? 1 : 0)); + mouse_report.v = wu * ((mousekeys_pressed & (1 << 7) ? 1 : 0) - (mousekeys_pressed & (1 << 6) ? 1 : 0)); + mouse_report.h = wu * ((mousekeys_pressed & (1 << 4) ? 1 : 0) - (mousekeys_pressed & (1 << 5) ? 1 : 0)); +} + void mousekey_on(uint8_t code) { # ifdef MK_KINETIC_SPEED if (mouse_timer == 0) { @@ -418,32 +430,34 @@ void mousekey_on(uint8_t code) { # else // no inertia if (code == QK_MOUSE_CURSOR_UP) - mouse_report.y = move_unit() * -1; + mousekeys_pressed |= 1 << 3; else if (code == QK_MOUSE_CURSOR_DOWN) - mouse_report.y = move_unit(); + mousekeys_pressed |= 1 << 2; else if (code == QK_MOUSE_CURSOR_LEFT) - mouse_report.x = move_unit() * -1; + mousekeys_pressed |= 1 << 1; else if (code == QK_MOUSE_CURSOR_RIGHT) - mouse_report.x = move_unit(); + mousekeys_pressed |= 1 << 0; # endif // inertia or not else if (code == QK_MOUSE_WHEEL_UP) - mouse_report.v = wheel_unit(); + mousekeys_pressed |= 1 << 7; else if (code == QK_MOUSE_WHEEL_DOWN) - mouse_report.v = wheel_unit() * -1; + mousekeys_pressed |= 1 << 6; else if (code == QK_MOUSE_WHEEL_LEFT) - mouse_report.h = wheel_unit() * -1; + mousekeys_pressed |= 1 << 5; else if (code == QK_MOUSE_WHEEL_RIGHT) - mouse_report.h = wheel_unit(); + mousekeys_pressed |= 1 << 4; else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons |= 1 << (code - QK_MOUSE_BUTTON_1); else if (code == QK_MOUSE_ACCELERATION_0) - mousekey_accel |= (1 << 0); + mousekey_accel |= 1 << 0; else if (code == QK_MOUSE_ACCELERATION_1) - mousekey_accel |= (1 << 1); + mousekey_accel |= 1 << 1; else if (code == QK_MOUSE_ACCELERATION_2) - mousekey_accel |= (1 << 2); + mousekey_accel |= 1 << 2; + + update_mouse_report(); } void mousekey_off(uint8_t code) { @@ -462,24 +476,24 @@ void mousekey_off(uint8_t code) { # else // no inertia if (code == QK_MOUSE_CURSOR_UP && mouse_report.y < 0) - mouse_report.y = 0; + mousekeys_pressed &= ~(1 << 3); else if (code == QK_MOUSE_CURSOR_DOWN && mouse_report.y > 0) - mouse_report.y = 0; + mousekeys_pressed &= ~(1 << 2); else if (code == QK_MOUSE_CURSOR_LEFT && mouse_report.x < 0) - mouse_report.x = 0; + mousekeys_pressed &= ~(1 << 1); else if (code == QK_MOUSE_CURSOR_RIGHT && mouse_report.x > 0) - mouse_report.x = 0; + mousekeys_pressed &= ~(1 << 0); # endif // inertia or not else if (code == QK_MOUSE_WHEEL_UP && mouse_report.v > 0) - mouse_report.v = 0; + mousekeys_pressed &= ~(1 << 7); else if (code == QK_MOUSE_WHEEL_DOWN && mouse_report.v < 0) - mouse_report.v = 0; + mousekeys_pressed &= ~(1 << 6); else if (code == QK_MOUSE_WHEEL_LEFT && mouse_report.h < 0) - mouse_report.h = 0; + mousekeys_pressed &= ~(1 << 5); else if (code == QK_MOUSE_WHEEL_RIGHT && mouse_report.h > 0) - mouse_report.h = 0; + mousekeys_pressed &= ~(1 << 4); else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons &= ~(1 << (code - QK_MOUSE_BUTTON_1)); else if (code == QK_MOUSE_ACCELERATION_0) @@ -488,6 +502,9 @@ void mousekey_off(uint8_t code) { mousekey_accel &= ~(1 << 1); else if (code == QK_MOUSE_ACCELERATION_2) mousekey_accel &= ~(1 << 2); + + update_mouse_report(); + if (mouse_report.x == 0 && mouse_report.y == 0) { mousekey_repeat = 0; # ifdef MK_KINETIC_SPEED @@ -565,39 +582,47 @@ void adjust_speed(void) { } } +void update_mouse_report(void) { + uint16_t const c_offset = c_offsets[mk_speed]; + uint16_t const w_offset = w_offsets[mk_speed]; + mouse_report.x = c_offset * ((mousekeys_pressed & (1 << 0) ? 1 : 0) - (mousekeys_pressed & (1 << 1) ? 1 : 0)); + mouse_report.y = c_offset * ((mousekeys_pressed & (1 << 2) ? 1 : 0) - (mousekeys_pressed & (1 << 3) ? 1 : 0)); + mouse_report.v = w_offset * ((mousekeys_pressed & (1 << 7) ? 1 : 0) - (mousekeys_pressed & (1 << 6) ? 1 : 0)); + mouse_report.h = w_offset * ((mousekeys_pressed & (1 << 4) ? 1 : 0) - (mousekeys_pressed & (1 << 5) ? 1 : 0)); +} + # ifdef MK_MOMENTARY_ACCEL void update_mk_speed(void) { - if (mk_speed_mask & 0b100) + if (mk_speed_mask & (1 << 2)) mk_speed = mkspd_2; - else if (mk_speed_mask & 0b010) + else if (mk_speed_mask & (1 << 1)) mk_speed = mkspd_1; - else if (mk_speed_mask & 0b001) + else if (mk_speed_mask & (1 << 0)) mk_speed = mkspd_0; else mk_speed = mkspd_DEFAULT; + update_mouse_report(); } # endif void mousekey_on(uint8_t code) { - uint16_t const c_offset = c_offsets[mk_speed]; - uint16_t const w_offset = w_offsets[mk_speed]; - uint8_t const old_speed = mk_speed; + uint8_t const old_speed = mk_speed; if (code == QK_MOUSE_CURSOR_UP) - mouse_report.y = c_offset * -1; + mousekeys_pressed |= 1 << 3; else if (code == QK_MOUSE_CURSOR_DOWN) - mouse_report.y = c_offset; + mousekeys_pressed |= 1 << 2; else if (code == QK_MOUSE_CURSOR_LEFT) - mouse_report.x = c_offset * -1; + mousekeys_pressed |= 1 << 1; else if (code == QK_MOUSE_CURSOR_RIGHT) - mouse_report.x = c_offset; + mousekeys_pressed |= 1 << 0; else if (code == QK_MOUSE_WHEEL_UP) - mouse_report.v = w_offset; + mousekeys_pressed |= 1 << 7; else if (code == QK_MOUSE_WHEEL_DOWN) - mouse_report.v = w_offset * -1; + mousekeys_pressed |= 1 << 6; else if (code == QK_MOUSE_WHEEL_LEFT) - mouse_report.h = w_offset * -1; + mousekeys_pressed |= 1 << 5; else if (code == QK_MOUSE_WHEEL_RIGHT) - mouse_report.h = w_offset; + mousekeys_pressed |= 1 << 4; else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons |= 1 << (code - QK_MOUSE_BUTTON_1); # ifndef MK_MOMENTARY_ACCEL @@ -609,15 +634,17 @@ void mousekey_on(uint8_t code) { mk_speed = mkspd_2; # else else if (code == QK_MOUSE_ACCELERATION_0) - mk_speed_mask |= 0b001; + mk_speed_mask |= 1 << 0; else if (code == QK_MOUSE_ACCELERATION_1) - mk_speed_mask |= 0b010; + mk_speed_mask |= 1 << 1; else if (code == QK_MOUSE_ACCELERATION_2) - mk_speed_mask |= 0b100; + mk_speed_mask |= 1 << 2; update_mk_speed(); # endif + update_mouse_report(); + if (mk_speed != old_speed) adjust_speed(); } @@ -625,34 +652,36 @@ void mousekey_off(uint8_t code) { # ifdef MK_MOMENTARY_ACCEL uint8_t const old_speed = mk_speed; # endif - if (code == QK_MOUSE_CURSOR_UP && mouse_report.y < 0) - mouse_report.y = 0; - else if (code == QK_MOUSE_CURSOR_DOWN && mouse_report.y > 0) - mouse_report.y = 0; - else if (code == QK_MOUSE_CURSOR_LEFT && mouse_report.x < 0) - mouse_report.x = 0; - else if (code == QK_MOUSE_CURSOR_RIGHT && mouse_report.x > 0) - mouse_report.x = 0; - else if (code == QK_MOUSE_WHEEL_UP && mouse_report.v > 0) - mouse_report.v = 0; - else if (code == QK_MOUSE_WHEEL_DOWN && mouse_report.v < 0) - mouse_report.v = 0; - else if (code == QK_MOUSE_WHEEL_LEFT && mouse_report.h < 0) - mouse_report.h = 0; - else if (code == QK_MOUSE_WHEEL_RIGHT && mouse_report.h > 0) - mouse_report.h = 0; + if (code == QK_MOUSE_CURSOR_UP) + mousekeys_pressed &= ~(1 << 3); + else if (code == QK_MOUSE_CURSOR_DOWN) + mousekeys_pressed &= ~(1 << 2); + else if (code == QK_MOUSE_CURSOR_LEFT) + mousekeys_pressed &= ~(1 << 1); + else if (code == QK_MOUSE_CURSOR_RIGHT) + mousekeys_pressed &= ~(1 << 0); + else if (code == QK_MOUSE_WHEEL_UP) + mousekeys_pressed &= ~(1 << 7); + else if (code == QK_MOUSE_WHEEL_DOWN) + mousekeys_pressed &= ~(1 << 6); + else if (code == QK_MOUSE_WHEEL_LEFT) + mousekeys_pressed &= ~(1 << 5); + else if (code == QK_MOUSE_WHEEL_RIGHT) + mousekeys_pressed &= ~(1 << 4); else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons &= ~(1 << (code - QK_MOUSE_BUTTON_1)); # ifdef MK_MOMENTARY_ACCEL else if (code == QK_MOUSE_ACCELERATION_0) - mk_speed_mask &= 0b110; + mk_speed_mask &= ~(1 << 0); else if (code == QK_MOUSE_ACCELERATION_1) - mk_speed_mask &= 0b101; + mk_speed_mask &= ~(1 << 1); else if (code == QK_MOUSE_ACCELERATION_2) - mk_speed_mask &= 0b011; + mk_speed_mask &= ~(1 << 2); update_mk_speed(); if (mk_speed != old_speed) adjust_speed(); # endif + + update_mouse_report(); } #endif /* #ifndef MK_3_SPEED */ From 0c91a02ae1d51e2ac25dcaac56ea193e8269c1f3 Mon Sep 17 00:00:00 2001 From: arutonee Date: Mon, 10 Mar 2025 18:30:46 -0400 Subject: [PATCH 5/6] Cleaned up code and removed change from non-constant keys --- quantum/mousekey.c | 115 ++++++++++++++------------------------------- 1 file changed, 35 insertions(+), 80 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 51ec514221b..2ca7c3f1d8c 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -19,6 +19,7 @@ #include #include "keycode.h" #include "host.h" +#include "keycodes.h" #include "timer.h" #include "print.h" #include "debug.h" @@ -42,9 +43,6 @@ static void mousekey_debug(void); static uint8_t mousekey_accel = 0; static uint8_t mousekey_repeat = 0; static uint8_t mousekey_wheel_repeat = 0; - -// WU, WD, WL, WR, U, D, L, R -static int16_t mousekeys_pressed = 0; #ifdef MOUSEKEY_INERTIA static uint8_t mousekey_frame = 0; // track whether gesture is inactive, first frame, or repeating static int8_t mousekey_x_dir = 0; // -1 / 0 / 1 = left / neutral / right @@ -387,15 +385,6 @@ void mousekey_task(void) { memcpy(&mouse_report, &tmpmr, sizeof(tmpmr)); } -void update_mouse_report(void) { - uint8_t mu = move_unit(); - uint8_t wu = wheel_unit(); - mouse_report.x = mu * ((mousekeys_pressed & (1 << 0) ? 1 : 0) - (mousekeys_pressed & (1 << 1) ? 1 : 0)); - mouse_report.y = mu * ((mousekeys_pressed & (1 << 2) ? 1 : 0) - (mousekeys_pressed & (1 << 3) ? 1 : 0)); - mouse_report.v = wu * ((mousekeys_pressed & (1 << 7) ? 1 : 0) - (mousekeys_pressed & (1 << 6) ? 1 : 0)); - mouse_report.h = wu * ((mousekeys_pressed & (1 << 4) ? 1 : 0) - (mousekeys_pressed & (1 << 5) ? 1 : 0)); -} - void mousekey_on(uint8_t code) { # ifdef MK_KINETIC_SPEED if (mouse_timer == 0) { @@ -430,34 +419,32 @@ void mousekey_on(uint8_t code) { # else // no inertia if (code == QK_MOUSE_CURSOR_UP) - mousekeys_pressed |= 1 << 3; + mouse_report.y = move_unit() * -1; else if (code == QK_MOUSE_CURSOR_DOWN) - mousekeys_pressed |= 1 << 2; + mouse_report.y = move_unit(); else if (code == QK_MOUSE_CURSOR_LEFT) - mousekeys_pressed |= 1 << 1; + mouse_report.x = move_unit() * -1; else if (code == QK_MOUSE_CURSOR_RIGHT) - mousekeys_pressed |= 1 << 0; + mouse_report.x = move_unit(); # endif // inertia or not else if (code == QK_MOUSE_WHEEL_UP) - mousekeys_pressed |= 1 << 7; + mouse_report.v = wheel_unit(); else if (code == QK_MOUSE_WHEEL_DOWN) - mousekeys_pressed |= 1 << 6; + mouse_report.v = wheel_unit() * -1; else if (code == QK_MOUSE_WHEEL_LEFT) - mousekeys_pressed |= 1 << 5; + mouse_report.h = wheel_unit() * -1; else if (code == QK_MOUSE_WHEEL_RIGHT) - mousekeys_pressed |= 1 << 4; + mouse_report.h = wheel_unit(); else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons |= 1 << (code - QK_MOUSE_BUTTON_1); else if (code == QK_MOUSE_ACCELERATION_0) - mousekey_accel |= 1 << 0; + mousekey_accel |= (1 << 0); else if (code == QK_MOUSE_ACCELERATION_1) - mousekey_accel |= 1 << 1; + mousekey_accel |= (1 << 1); else if (code == QK_MOUSE_ACCELERATION_2) - mousekey_accel |= 1 << 2; - - update_mouse_report(); + mousekey_accel |= (1 << 2); } void mousekey_off(uint8_t code) { @@ -476,24 +463,24 @@ void mousekey_off(uint8_t code) { # else // no inertia if (code == QK_MOUSE_CURSOR_UP && mouse_report.y < 0) - mousekeys_pressed &= ~(1 << 3); + mouse_report.y = 0; else if (code == QK_MOUSE_CURSOR_DOWN && mouse_report.y > 0) - mousekeys_pressed &= ~(1 << 2); + mouse_report.y = 0; else if (code == QK_MOUSE_CURSOR_LEFT && mouse_report.x < 0) - mousekeys_pressed &= ~(1 << 1); + mouse_report.x = 0; else if (code == QK_MOUSE_CURSOR_RIGHT && mouse_report.x > 0) - mousekeys_pressed &= ~(1 << 0); + mouse_report.x = 0; # endif // inertia or not else if (code == QK_MOUSE_WHEEL_UP && mouse_report.v > 0) - mousekeys_pressed &= ~(1 << 7); + mouse_report.v = 0; else if (code == QK_MOUSE_WHEEL_DOWN && mouse_report.v < 0) - mousekeys_pressed &= ~(1 << 6); + mouse_report.v = 0; else if (code == QK_MOUSE_WHEEL_LEFT && mouse_report.h < 0) - mousekeys_pressed &= ~(1 << 5); + mouse_report.h = 0; else if (code == QK_MOUSE_WHEEL_RIGHT && mouse_report.h > 0) - mousekeys_pressed &= ~(1 << 4); + mouse_report.h = 0; else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons &= ~(1 << (code - QK_MOUSE_BUTTON_1)); else if (code == QK_MOUSE_ACCELERATION_0) @@ -502,9 +489,6 @@ void mousekey_off(uint8_t code) { mousekey_accel &= ~(1 << 1); else if (code == QK_MOUSE_ACCELERATION_2) mousekey_accel &= ~(1 << 2); - - update_mouse_report(); - if (mouse_report.x == 0 && mouse_report.y == 0) { mousekey_repeat = 0; # ifdef MK_KINETIC_SPEED @@ -524,6 +508,9 @@ static uint8_t mk_speed = mkspd_unmod; static uint8_t mkspd_DEFAULT = mkspd_unmod; static uint8_t mk_speed_mask = 0; # endif + +// WU, WD, WL, WR, U, D, L, R +static uint8_t mousekeys_pressed = 0; static uint16_t last_timer_c = 0; static uint16_t last_timer_w = 0; uint16_t c_offsets[mkspd_COUNT] = {MK_C_OFFSET_UNMOD, MK_C_OFFSET_0, MK_C_OFFSET_1, MK_C_OFFSET_2}; @@ -607,22 +594,10 @@ void update_mk_speed(void) { void mousekey_on(uint8_t code) { uint8_t const old_speed = mk_speed; - if (code == QK_MOUSE_CURSOR_UP) - mousekeys_pressed |= 1 << 3; - else if (code == QK_MOUSE_CURSOR_DOWN) - mousekeys_pressed |= 1 << 2; - else if (code == QK_MOUSE_CURSOR_LEFT) - mousekeys_pressed |= 1 << 1; - else if (code == QK_MOUSE_CURSOR_RIGHT) - mousekeys_pressed |= 1 << 0; - else if (code == QK_MOUSE_WHEEL_UP) - mousekeys_pressed |= 1 << 7; - else if (code == QK_MOUSE_WHEEL_DOWN) - mousekeys_pressed |= 1 << 6; - else if (code == QK_MOUSE_WHEEL_LEFT) - mousekeys_pressed |= 1 << 5; - else if (code == QK_MOUSE_WHEEL_RIGHT) - mousekeys_pressed |= 1 << 4; + if (code >= QK_MOUSE_CURSOR_UP && code <= QK_MOUSE_CURSOR_RIGHT) + mousekeys_pressed |= 1 << (QK_MOUSE_CURSOR_RIGHT - code); + else if (code >= QK_MOUSE_WHEEL_UP && code <= QK_MOUSE_WHEEL_RIGHT) + mousekeys_pressed |= 1 << (QK_MOUSE_WHEEL_RIGHT - code + 4); else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons |= 1 << (code - QK_MOUSE_BUTTON_1); # ifndef MK_MOMENTARY_ACCEL @@ -633,12 +608,8 @@ void mousekey_on(uint8_t code) { else if (code == QK_MOUSE_ACCELERATION_2) mk_speed = mkspd_2; # else - else if (code == QK_MOUSE_ACCELERATION_0) - mk_speed_mask |= 1 << 0; - else if (code == QK_MOUSE_ACCELERATION_1) - mk_speed_mask |= 1 << 1; - else if (code == QK_MOUSE_ACCELERATION_2) - mk_speed_mask |= 1 << 2; + else if (code >= QK_MOUSE_ACCELERATION_0 && code <= QK_MOUSE_ACCELERATION_2) + mk_speed_mask |= 1 << (code - QK_MOUSE_ACCELERATION_0); update_mk_speed(); # endif @@ -652,31 +623,15 @@ void mousekey_off(uint8_t code) { # ifdef MK_MOMENTARY_ACCEL uint8_t const old_speed = mk_speed; # endif - if (code == QK_MOUSE_CURSOR_UP) - mousekeys_pressed &= ~(1 << 3); - else if (code == QK_MOUSE_CURSOR_DOWN) - mousekeys_pressed &= ~(1 << 2); - else if (code == QK_MOUSE_CURSOR_LEFT) - mousekeys_pressed &= ~(1 << 1); - else if (code == QK_MOUSE_CURSOR_RIGHT) - mousekeys_pressed &= ~(1 << 0); - else if (code == QK_MOUSE_WHEEL_UP) - mousekeys_pressed &= ~(1 << 7); - else if (code == QK_MOUSE_WHEEL_DOWN) - mousekeys_pressed &= ~(1 << 6); - else if (code == QK_MOUSE_WHEEL_LEFT) - mousekeys_pressed &= ~(1 << 5); - else if (code == QK_MOUSE_WHEEL_RIGHT) - mousekeys_pressed &= ~(1 << 4); + if (code >= QK_MOUSE_CURSOR_UP && code <= QK_MOUSE_CURSOR_RIGHT) + mousekeys_pressed &= ~(1 << (QK_MOUSE_CURSOR_RIGHT - code)); + else if (code >= QK_MOUSE_WHEEL_UP && code <= QK_MOUSE_WHEEL_RIGHT) + mousekeys_pressed &= ~(1 << (QK_MOUSE_WHEEL_RIGHT - code + 4)); else if (IS_MOUSEKEY_BUTTON(code)) mouse_report.buttons &= ~(1 << (code - QK_MOUSE_BUTTON_1)); # ifdef MK_MOMENTARY_ACCEL - else if (code == QK_MOUSE_ACCELERATION_0) - mk_speed_mask &= ~(1 << 0); - else if (code == QK_MOUSE_ACCELERATION_1) - mk_speed_mask &= ~(1 << 1); - else if (code == QK_MOUSE_ACCELERATION_2) - mk_speed_mask &= ~(1 << 2); + else if (code >= QK_MOUSE_ACCELERATION_0 && code <= QK_MOUSE_ACCELERATION_2) + mk_speed_mask &= ~(1 << (code - QK_MOUSE_ACCELERATION_0)); update_mk_speed(); if (mk_speed != old_speed) adjust_speed(); # endif From 7ca6839b132aad0c12acdfe3b4e7678890f6085b Mon Sep 17 00:00:00 2001 From: arutonee1 <137639243+arutonee1@users.noreply.github.com> Date: Wed, 12 Mar 2025 17:42:11 -0400 Subject: [PATCH 6/6] Removed unneeded #include Co-authored-by: Drashna Jaelre --- quantum/mousekey.c | 1 - 1 file changed, 1 deletion(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 2ca7c3f1d8c..c25f8946d82 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -19,7 +19,6 @@ #include #include "keycode.h" #include "host.h" -#include "keycodes.h" #include "timer.h" #include "print.h" #include "debug.h"