diff options
| author | Priyadi Iman Nurcahyo <[email protected]> | 2017-01-09 02:59:10 +0700 | 
|---|---|---|
| committer | Priyadi Iman Nurcahyo <[email protected]> | 2017-01-09 02:59:10 +0700 | 
| commit | 30b80a23f3cafd846937b37b249f2df4411e1f5a (patch) | |
| tree | f73759ad68af7d79afdcb0d8b2616082b4499226 /quantum/process_keycode | |
| parent | e7df488a92da56cf160ac64c8cc7302ab717e145 (diff) | |
| download | qmk_firmware-30b80a23f3cafd846937b37b249f2df4411e1f5a.tar.gz qmk_firmware-30b80a23f3cafd846937b37b249f2df4411e1f5a.zip | |
Unregister all mods before inputting Unicode, and reregister afterwards
Diffstat (limited to 'quantum/process_keycode')
| -rw-r--r-- | quantum/process_keycode/process_unicode.c | 41 | 
1 files changed, 33 insertions, 8 deletions
| diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index cd3a610b4d..a30e93ae32 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -1,6 +1,8 @@  #include "process_unicode.h" +#include "action_util.h"  static uint8_t input_mode; +uint8_t mods;  __attribute__((weak))  uint16_t hex_to_keycode(uint8_t hex) @@ -25,6 +27,19 @@ uint8_t get_unicode_input_mode(void) {  __attribute__((weak))  void unicode_input_start (void) { +  // save current mods +  mods = keyboard_report->mods; + +  // unregister all mods to start from clean state +  if (mods & MOD_BIT(KC_LSFT)) unregister_code(KC_LSFT); +  if (mods & MOD_BIT(KC_RSFT)) unregister_code(KC_RSFT); +  if (mods & MOD_BIT(KC_LCTL)) unregister_code(KC_LCTL); +  if (mods & MOD_BIT(KC_RCTL)) unregister_code(KC_RCTL); +  if (mods & MOD_BIT(KC_LALT)) unregister_code(KC_LALT); +  if (mods & MOD_BIT(KC_RALT)) unregister_code(KC_RALT); +  if (mods & MOD_BIT(KC_LGUI)) unregister_code(KC_LGUI); +  if (mods & MOD_BIT(KC_RGUI)) unregister_code(KC_RGUI); +    switch(input_mode) {    case UC_OSX:      register_code(KC_LALT); @@ -54,15 +69,25 @@ void unicode_input_start (void) {  __attribute__((weak))  void unicode_input_finish (void) {    switch(input_mode) { -  case UC_OSX: -  case UC_WIN: -    unregister_code(KC_LALT); -    break; -  case UC_LNX: -    register_code(KC_SPC); -    unregister_code(KC_SPC); -    break; +    case UC_OSX: +    case UC_WIN: +      unregister_code(KC_LALT); +      break; +    case UC_LNX: +      register_code(KC_SPC); +      unregister_code(KC_SPC); +      break;    } + +  // reregister previously set mods +  if (mods & MOD_BIT(KC_LSFT)) register_code(KC_LSFT); +  if (mods & MOD_BIT(KC_RSFT)) register_code(KC_RSFT); +  if (mods & MOD_BIT(KC_LCTL)) register_code(KC_LCTL); +  if (mods & MOD_BIT(KC_RCTL)) register_code(KC_RCTL); +  if (mods & MOD_BIT(KC_LALT)) register_code(KC_LALT); +  if (mods & MOD_BIT(KC_RALT)) register_code(KC_RALT); +  if (mods & MOD_BIT(KC_LGUI)) register_code(KC_LGUI); +  if (mods & MOD_BIT(KC_RGUI)) register_code(KC_RGUI);  }  void register_hex(uint16_t hex) { | 
