void DonghaiConverter::leaveDonghaiMode() { if (!m_donghai_mode) { return; } // release all the special key if (IS_LOGIC_KEY_DOWN(BIT_LEFT)) { doKeyEvent(KEY_LEFT, 0); } if (IS_LOGIC_KEY_DOWN(BIT_DOWN)) { doKeyEvent(KEY_DOWN, 0); } if (IS_LOGIC_KEY_DOWN(BIT_UP)) { doKeyEvent(KEY_UP, 0); } if (IS_LOGIC_KEY_DOWN(BIT_RIGHT)) { doKeyEvent(KEY_RIGHT, 0); } if (IS_LOGIC_KEY_DOWN(BIT_ESC)) { doKeyEvent(KEY_ESC, 0); } if (IS_LOGIC_KEY_DOWN(BIT_INSERT)) { doKeyEvent(KEY_INSERT, 0); } if (IS_LOGIC_KEY_DOWN(BIT_LEFTSHIFT)) { doKeyEvent(KEY_LEFTSHIFT, 0); } if (!IS_LOGIC_KEY_DOWN(BIT_LEFTCTRL)) { doKeyEvent(KEY_LEFTCTRL, 1); } m_donghai_mode = false; }
void DonghaiConverter::normalKeyOutPut(struct input_event *key_event, int32_t bit) { if (IS_LOGIC_KEY_DOWN(bit)) { if (key_event->value == 1) { return; } doKeyEvent(key_event->code, key_event->value, true, false); m_send_syn_event = true; } else { if (key_event->value == 1) { doKeyEvent(key_event->code, key_event->value, true, false); m_send_syn_event = true; } } return; }
void DonghaiConverter::handleMapKey(struct input_event *key_event, uint16_t map_key_code, int32_t original_bit, int32_t map_bit) { enterDonghaiMode(key_event); if (!m_donghai_mode) { normalKeyOutPut(key_event, original_bit); return; } if (IS_LOGIC_KEY_DOWN(map_bit)) { if (key_event->value == 1) { return; } doKeyEvent(map_key_code, key_event->value); } else { if (key_event->value == 1) { doKeyEvent(map_key_code, key_event->value); } } }
void DonghaiConverter::handleCapsLock(struct input_event *key_event) { if (key_event->value == 0) { leaveDonghaiMode(); } if (IS_LOGIC_KEY_DOWN(BIT_LEFTCTRL)) { if (key_event->value == 1) { return; } doKeyEvent(KEY_LEFTCTRL, key_event->value, true, false); m_send_syn_event = true; return; } else { if (key_event->value == 1) { doKeyEvent(KEY_LEFTCTRL, 1, true, false); m_send_syn_event = true; } } }
void DonghaiConverter::enterDonghaiMode(struct input_event *key_event) { if (ONLY_CAPSLOCK_DOWN() && key_event->value == 1) { if (m_donghai_mode) { return; } if (IS_LOGIC_KEY_DOWN(BIT_LEFTCTRL)) { doKeyEvent(KEY_LEFTCTRL, 0); } m_donghai_mode = true; } }
void DonghaiConverter::handleInsertKey(struct input_event *key_event) { enterDonghaiMode(key_event); if (!m_donghai_mode) { normalKeyOutPut(key_event, BIT_I); return; } if (key_event->value == 1 || key_event->value == 2) { if (!IS_LOGIC_KEY_DOWN(BIT_LEFTSHIFT)) { doKeyEvent(KEY_LEFTSHIFT, 1); } if (!IS_LOGIC_KEY_DOWN(BIT_INSERT)) { doKeyEvent(KEY_INSERT, 1); if (key_event->value == 2) { doKeyEvent(KEY_INSERT, 2); } } else { if (key_event->value == 2) { doKeyEvent(KEY_INSERT, 2); } } } else if (key_event->value == 0) { if (IS_LOGIC_KEY_DOWN(BIT_INSERT)) { doKeyEvent(KEY_INSERT, 0); } if (IS_LOGIC_KEY_DOWN(BIT_LEFTSHIFT)) { doKeyEvent(KEY_LEFTSHIFT, 0); } } }
bool KeyHandler::executeInteraction(TargetData data) { QWidget* target = data.target; TasCommand& command = *data.command; QString commandName = command.name(); bool wasConsumed = false; if (commandName == "KeyPress") { doKeyEvent(target, QEvent::KeyPress, (Qt::Key)command.text().toUInt()); wasConsumed = true; } else if (commandName == "KeyRelease") { doKeyEvent(target, QEvent::KeyRelease, (Qt::Key)command.text().toUInt()); wasConsumed = true; } else if (commandName == "KeyClick") { QPointer<QWidget> ptr(target); doKeyEvent(target, QEvent::KeyPress, (Qt::Key)command.text().toUInt()); //make sure that the target is still valid (e.g. close button for dialog..) if(ptr){ doKeyEvent(target, QEvent::KeyRelease, (Qt::Key)command.text().toUInt()); } wasConsumed = true; } else if (commandName == "TypeText") { QTestEventList events; QString keys = command.text(); events.addKeyClicks(keys); events.simulate(target); wasConsumed = true; } return wasConsumed; }