| 594 | } |
| 595 | |
| 596 | void OSXKeyState::fakeKey(const Keystroke &keystroke) |
| 597 | { |
| 598 | switch (keystroke.m_type) { |
| 599 | case Keystroke::KeyType::Button: { |
| 600 | bool keyDown = keystroke.m_data.m_button.m_press; |
| 601 | uint32_t client = keystroke.m_data.m_button.m_client; |
| 602 | KeyButton button = keystroke.m_data.m_button.m_button; |
| 603 | CGKeyCode virtualKey = mapKeyButtonToVirtualKey(button); |
| 604 | |
| 605 | LOG_DEBUG1( |
| 606 | " button=0x%04x virtualKey=0x%04x keyDown=%s client=0x%04x", button, virtualKey, keyDown ? "down" : "up", |
| 607 | client |
| 608 | ); |
| 609 | |
| 610 | setKeyboardModifiers(virtualKey, keyDown); |
| 611 | if (postHIDVirtualKey(virtualKey, keyDown) != KERN_SUCCESS) { |
| 612 | LOG_WARN("fail to post hid event"); |
| 613 | postKeyboardKey(virtualKey, keyDown); |
| 614 | } |
| 615 | |
| 616 | break; |
| 617 | } |
| 618 | |
| 619 | case Keystroke::KeyType::Group: { |
| 620 | int32_t group = keystroke.m_data.m_group.m_group; |
| 621 | if (!keystroke.m_data.m_group.m_restore) { |
| 622 | if (keystroke.m_data.m_group.m_absolute) { |
| 623 | LOG_DEBUG1(" group %d", group); |
| 624 | setGroup(group); |
| 625 | } else { |
| 626 | LOG_DEBUG1(" group %+d", group); |
| 627 | setGroup(getEffectiveGroup(pollActiveGroup(), group)); |
| 628 | } |
| 629 | |
| 630 | if (pollActiveGroup() != group) { |
| 631 | LOG_WARN("failed to set new keyboard layout"); |
| 632 | } |
| 633 | } |
| 634 | break; |
| 635 | } |
| 636 | } |
| 637 | } |
| 638 | |
| 639 | void OSXKeyState::getKeyMapForSpecialKeys(deskflow::KeyMap &keyMap, int32_t group) const |
| 640 | { |
nothing calls this directly
no outgoing calls
no test coverage detected