| 2 | #include "ParseSnippet.h" |
| 3 | |
| 4 | void WorkerImplement::ProcessKeyMsg(const Message_KeyType& keyData) |
| 5 | { |
| 6 | TKeyCode vkCode = keyData.vkCode; |
| 7 | auto scan_ext = keyData.scan_ext; |
| 8 | |
| 9 | const auto& cur_hotkey = keyData.cur_hotKey; |
| 10 | |
| 11 | LOG_ANY("ProcessKeyMsg {} curState={}", CHotKey::ToString(vkCode), cur_hotkey.ToString()); |
| 12 | |
| 13 | m_is_last_caps = keyData.is_caps; // сохраним последнее известное значение. Нажатие caps по идее должно нам привести сюда. |
| 14 | |
| 15 | if (CHotKey::IsKnownMods(vkCode)) { |
| 16 | return; // не очищаем текущий буфер нажатых клавиш так как они могут быть частью наших хот-кеев |
| 17 | } |
| 18 | |
| 19 | //if (keyData.hk != hk_NULL) { // это событие down для нашей hot key up. |
| 20 | // if (!IsNeedSavedWords(keyData.hk)) { |
| 21 | // ClearAllWords(); |
| 22 | // } |
| 23 | // return; // пропуск. |
| 24 | //} |
| 25 | |
| 26 | TKeyBaseInfo key { |
| 27 | .vk_code = vkCode, |
| 28 | .scan_code = scan_ext, |
| 29 | .is_shift = cur_hotkey.HasMod(VK_SHIFT), |
| 30 | .is_caps = keyData.is_caps, |
| 31 | }; |
| 32 | auto get_lay = [this] { |
| 33 | CheckCurLay(); // попробуем добавить получение текущей раскладки на каждое нажатие для более точного определения символа (ради capslock handle). |
| 34 | return topWndInfo2.lay; |
| 35 | }; |
| 36 | key.type = AnalizeTyped(cur_hotkey, vkCode, scan_ext, get_lay, key); |
| 37 | |
| 38 | switch (key.type) { |
| 39 | |
| 40 | case KEYTYPE_BACKSPACE: |
| 41 | { |
| 42 | m_cycleList.DeleteLastSymbol(); |
| 43 | break; |
| 44 | } |
| 45 | default: |
| 46 | { |
| 47 | bool is_shift = cur_hotkey.HasMod(VK_SHIFT); |
| 48 | |
| 49 | // todo: так это не работает. Нужно добавлять Shift только буквам (сложно) или временно включать/отключать capslock. |
| 50 | //if (keyData.is_caps) is_shift = !is_shift; |
| 51 | |
| 52 | m_cycleList.AddKeyToList(key); |
| 53 | break; |
| 54 | } |
| 55 | case KEYTYPE_COMMAND_NO_CLEAR: |
| 56 | break; |
| 57 | case KEYTYPE_NONE: |
| 58 | case KEYTYPE_COMMAND_CLEAR: { |
| 59 | ClearAllWords(); |
| 60 | break; |
| 61 | } |
no test coverage detected