示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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);
        }
    }
}
示例#4
0
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;
        }
    }
}
示例#5
0
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;
    }
}
示例#6
0
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;
}