diff options
| author | Jack Humbert <jack.humb@gmail.com> | 2017-01-08 21:12:02 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-08 21:12:02 -0500 | 
| commit | 176b93d08eb5cc0c65a6d571fc2c1fec5f575854 (patch) | |
| tree | e4445b1869a5e7a28913f50dd50306112e2c1510 /quantum/process_keycode/process_unicode.c | |
| parent | 18d013b25b3b6604b943bb0d889642ad18e49cc3 (diff) | |
| parent | 30b80a23f3cafd846937b37b249f2df4411e1f5a (diff) | |
| download | firmware-176b93d08eb5cc0c65a6d571fc2c1fec5f575854.tar.gz firmware-176b93d08eb5cc0c65a6d571fc2c1fec5f575854.tar.bz2 firmware-176b93d08eb5cc0c65a6d571fc2c1fec5f575854.zip | |
Merge pull request #994 from priyadi/unicode_mods_fix
Unregister all mods before inputting Unicode, and reregister afterwards
Diffstat (limited to 'quantum/process_keycode/process_unicode.c')
| -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 cd3a610b4..a30e93ae3 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) { | 
