void ShortcutWidget::keyEvent(QKeyEvent* event)
{
    event->accept();

    if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) {
        return;
    }

    bool release = (event->type() == QEvent::KeyRelease);

    if (m_locked && release) {
        return;
    }

    Qt::Key key = static_cast<Qt::Key>(event->key());

    if (key <= 0 || key == Qt::Key_unknown) {
        return;
    }

    Qt::KeyboardModifiers modifiers = event->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META);

    bool keyIsModifier;
    switch (key) {
    case Qt::Key_Shift:
    case Qt::Key_Control:
    case Qt::Key_Meta:
    case Qt::Key_Alt:
    case Qt::Key_AltGr:
        keyIsModifier = true;
        break;
    default:
        keyIsModifier = false;
    }

    if (!release && !keyIsModifier) {
        if (modifiers != 0) {
            setShortcut(key, modifiers);
        } else {
            resetShortcut();
            setStyleSheet("");
            displayShortcut(key, modifiers);
        }
    } else {
        if (m_locked) {
            resetShortcut();
            setStyleSheet("");
        }

        displayShortcut(static_cast<Qt::Key>(0), modifiers);
    }
}
void ShortcutWidget::keyEvent(QKeyEvent* event, bool release){
	if (release && lock)
		return;
	
	AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType);
	
	unsigned int mods = HelperX11::keyboardModifiers(QX11Info::display());
	displayShortcut(event->nativeVirtualKey(), release, mods & ControlMask,
			mods & ShiftMask, mods & autoTypeGlobal->maskAlt(),
			mods & autoTypeGlobal->maskAltGr(), mods & autoTypeGlobal->maskMeta());
}
void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
{
    m_key = key;
    m_modifiers = modifiers;
    m_locked = true;

    displayShortcut(m_key, m_modifiers);

    if (autoType()->registerGlobalShortcut(m_key, m_modifiers)) {
        setStyleSheet("");
    } else {
        setStyleSheet("background-color: #FF9696;");
    }
}
void ShortcutWidget::setShortcut(const Shortcut& s){
	lock = true;
	displayShortcut(s.key, false, s.ctrl, s.shift, s.alt, s.altgr, s.win);
}