Merge remote-tracking branch 'qmk/master' into merge-2023-09-08

This commit is contained in:
Ilya Zhuravlev
2023-09-08 20:53:27 -06:00
6126 changed files with 113768 additions and 45875 deletions

View File

@ -475,3 +475,28 @@ __attribute__((weak)) void oneshot_layer_changed_kb(uint8_t layer) {
uint8_t has_anymod(void) {
return bitpop(real_mods);
}
#ifdef DUMMY_MOD_NEUTRALIZER_KEYCODE
/** \brief Send a dummy keycode in between the register and unregister event of a modifier key, to neutralize the "flashing modifiers" phenomenon.
*
* \param active_mods 8-bit packed bit-array describing the currently active modifiers (in the format GASCGASC).
*
* Certain QMK features like key overrides or retro tap must unregister a previously
* registered modifier before sending another keycode but this can trigger undesired
* keyboard shortcuts if the clean tap of a single modifier key is bound to an action
* on the host OS, as is for example the case for the left GUI key on Windows, which
* opens the Start Menu when tapped.
*/
void neutralize_flashing_modifiers(uint8_t active_mods) {
// In most scenarios, the flashing modifiers phenomenon is a problem
// only for a subset of modifier masks.
const static uint8_t mods_to_neutralize[] = MODS_TO_NEUTRALIZE;
const static uint8_t n_mods = ARRAY_SIZE(mods_to_neutralize);
for (uint8_t i = 0; i < n_mods; ++i) {
if (active_mods == mods_to_neutralize[i]) {
tap_code(DUMMY_MOD_NEUTRALIZER_KEYCODE);
break;
}
}
}
#endif