Exemplo n.º 1
0
static QKeySequence actionShortcut(QKeySequence shortcut, QKeySequence fallBack, QKeySequence shortcutRTL = QKeySequence(), QKeySequence fallbackRTL = QKeySequence())
{
    if (QApplication::isRightToLeft() && (!shortcutRTL.isEmpty() || !fallbackRTL.isEmpty())) {
        return (shortcutRTL.isEmpty() ? fallbackRTL : shortcutRTL);
    }
    else {
        return (shortcut.isEmpty() ? fallBack : shortcut);
    }
}
Exemplo n.º 2
0
bool ShortcutManager::registerShortcut(QKeySequence shortcut)
{
    Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
    Qt::Key key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]);
    Qt::KeyboardModifiers mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(0) : Qt::KeyboardModifiers(shortcut[0] & allMods);
    this->nativeKey = nativeKeycode(key);
    this->nativeMods = nativeModifiers(mods);
    return RegisterHotKey(0, nativeMods ^ nativeKey, nativeMods, nativeKey);
}
Exemplo n.º 3
0
bool QtGlobalShortcutPrivate::setShortcut(const QKeySequence& shortcut)
{
    Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
    key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]);
    mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(0) : Qt::KeyboardModifiers(shortcut[0] & allMods);
    const quint32 nativeKey = nativeKeycode(key);
    const quint32 nativeMods = nativeModifiers(mods);
    const bool res = registerShortcut(nativeKey, nativeMods);
    shortcuts.insert(qMakePair(nativeKey, nativeMods), &qxt_p());
    if (!res)
        qWarning() << "QtGlobalShortcut failed to register:" << QKeySequence(key + mods).toString();
    return res;
}
Exemplo n.º 4
0
void ShortcutDialog::keySequenceChanged(const QKeySequence &seq)
{
    activateWindow(); // where is the kbd focus lost? cause of popup state?
    if (_shortcut == seq)
        return; // don't try to update the same

    if (seq.isEmpty()) { // clear
        _shortcut = seq;
        return;
    }

    // Check if the key sequence is used currently
    QString sc = seq.toString();
    // NOTICE - seq.toString() & the entries in "conflicting" randomly get invalidated after the next call (if no sc has been set & conflicting isn't empty?!)
    QList<KGlobalShortcutInfo> conflicting = KGlobalAccel::getGlobalShortcutsByKey(seq);
    if (!conflicting.isEmpty()) {
        const KGlobalShortcutInfo &conflict = conflicting.at(0);
        warning->setText(i18nc("'%1' is a keyboard shortcut like 'ctrl+w'",
        "<b>%1</b> is already in use", sc));
        warning->setToolTip(i18nc("keyboard shortcut '%1' is used by action '%2' in application '%3'",
        "<b>%1</b> is used by %2 in %3", sc, conflict.friendlyName(), conflict.componentFriendlyName()));
        warning->show();
        widget->setKeySequence(shortcut());
    } else if (seq != _shortcut) {
        warning->hide();
        if (KPushButton *ok = button(KDialog::Ok))
            ok->setFocus();
    }

    _shortcut = seq;
}
Exemplo n.º 5
0
void ShortcutButton::addShortcut(QPushButton *shortcutButton)
{
    QWidget *parent = this;
    // Destroy shortcut dialog, if its shortcut button is deleted.
    if (shortcutButton != NULL)
        parent = shortcutButton;

    ShortcutDialog *dialog = new ShortcutDialog(parent);
    dialog->setExpectModifier(m_expectModifier);

    if (dialog->exec() == QDialog::Accepted) {
        const QKeySequence shortcut = dialog->shortcut();
        const QString text = shortcut.toString(QKeySequence::NativeText);
        if ( shortcut.isEmpty() || shortcuts().contains(shortcut) ) {
            if (shortcutButton == NULL || shortcutButton->text() != text ) {
                if (shortcutButton != NULL)
                    emit shortcutRemoved(shortcutButton->text());
                delete shortcutButton;
            }
        } else {
            if (shortcutButton != NULL) {
                if ( shortcutButton->text() != text ) {
                    emit shortcutRemoved(shortcutButton->text());
                    shortcutButton->setText(text);
                    emit shortcutAdded(text);
                }
            } else {
                addShortcut(text);
            }
        }
    }
}
Exemplo n.º 6
0
void NAction::setGlobalShortcut(const QKeySequence &shortcut)
{
	QList<QKeySequence> list;
	if (!shortcut.isEmpty())
		list << shortcut;
	setGlobalShortcuts(list);
}
Exemplo n.º 7
0
void KeyboardShortcutDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
	const ShortcutWidget *widget(qobject_cast<ShortcutWidget*>(editor));

	if (widget)
	{
		const QKeySequence shortcut(widget->keySequence());
		const KeyboardProfileDialog::ValidationResult result(m_dialog->validateShortcut(shortcut, index));
		const QModelIndex statusIndex(index.sibling(index.row(), 0));

		if (result.text.isEmpty())
		{
			model->setData(statusIndex, {}, Qt::DecorationRole);
			model->setData(statusIndex, {}, Qt::ToolTipRole);
			model->setData(statusIndex, KeyboardProfileDialog::NormalStatus, KeyboardProfileDialog::StatusRole);
		}
		else
		{
			model->setData(statusIndex, result.icon, Qt::DecorationRole);
			model->setData(statusIndex, result.text, Qt::ToolTipRole);
			model->setData(statusIndex, (result.isError ? KeyboardProfileDialog::ErrorStatus : KeyboardProfileDialog::WarningStatus), KeyboardProfileDialog::StatusRole);
		}

		model->setData(index, (shortcut.isEmpty() ? QVariant() : QVariant(shortcut.toString())));
	}
}
Exemplo n.º 8
0
QString QAccessibleMenuItem::text(QAccessible::Text t) const
{
    QString str;
    switch (t) {
    case QAccessible::Name:
        str = m_action->text();
        str = qt_accStripAmp(str);
        break;
    case QAccessible::Accelerator: {
#ifndef QT_NO_SHORTCUT
        QKeySequence key = m_action->shortcut();
        if (!key.isEmpty()) {
            str = key.toString();
        } else
#endif
        {
            str = qt_accHotKey(m_action->text());
        }
        break;
    }
    default:
        break;
    }
    return str;
}
bool KeyboardTranslatorReader::parseAsKeyCode(const QString& item , int& keyCode)
{
    QKeySequence sequence = QKeySequence::fromString(item);
    if ( !sequence.isEmpty() && sequence[0] != Qt::Key_unknown )
    {
        keyCode = sequence[0];

        if ( sequence.count() > 1 )
        {
            qDebug() << "Unhandled key codes in sequence: " << item;
        }
    }
    // additional cases implemented for backwards compatibility with KDE 3
    else if ( item == "prior" )
        keyCode = Qt::Key_PageUp;
    else if ( item == "next" )
        keyCode = Qt::Key_PageDown;
    else if ( item == "question" )
        keyCode = Qt::Key_Question;
    else if ( item == "at" )
        keyCode = Qt::Key_At;
    else if ( item == "bracketleft" )
        keyCode = Qt::Key_BracketLeft;
    else if ( item == "backslash" )
        keyCode = Qt::Key_Backslash;
    else if ( item == "bracketright" )
        keyCode = Qt::Key_BracketRight;
    else if ( item == "asciicircum" )
        keyCode = Qt::Key_AsciiCircum;
    else
        return false;

    return true;
}
Exemplo n.º 10
0
bool QxtGlobalShortcutPrivate::setShortcut(const QKeySequence &shortcut)
{
    Q_Q(QxtGlobalShortcut);
    Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
    key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]);
    mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(Qt::NoModifier) : Qt::KeyboardModifiers(shortcut[0] & allMods);
    const quint32 nativeKey = nativeKeycode(key);
    const quint32 nativeMods = nativeModifiers(mods);
    const bool res = registerShortcut(nativeKey, nativeMods);
    if (res)
        shortcuts.insert({nativeKey, nativeMods}, q);
    else
        qWarning("QxtGlobalShortcut failed to register: %s", qPrintable(QKeySequence(key + mods).toString()));

    return res;
}
Exemplo n.º 11
0
bool KShortcut::conflictsWith(const QKeySequence &needle) const
{
    if (needle.isEmpty())
        return false;

    bool primaryConflicts = false;
    bool alternateConflicts = false;

    if (!d->primary.isEmpty()) {
        primaryConflicts =
            (    d->primary.matches(needle) == QKeySequence::NoMatch
              && needle.matches(d->primary) == QKeySequence::NoMatch )
            ? false
            : true;
    }

    if (!d->alternate.isEmpty()) {
        alternateConflicts=
            (    d->alternate.matches(needle) == QKeySequence::NoMatch
              && needle.matches(d->alternate) == QKeySequence::NoMatch )
            ? false
            : true;
    }

    return primaryConflicts || alternateConflicts;
}
Exemplo n.º 12
0
void ShortcutButton::addShortcut(QPushButton *shortcutButton)
{
    QWidget *parent = this;
    // Destroy shortcut dialog, if its shortcut button is deleted.
    if (shortcutButton != nullptr)
        parent = shortcutButton;

    auto dialog = new ShortcutDialog(parent);
    if (dialog->exec() == QDialog::Rejected)
        return;

    const QKeySequence newShortcut = dialog->shortcut();
    const QKeySequence oldShortcut = shortcutButton
            ? shortcutForButton(*shortcutButton)
            : QKeySequence();

    if (oldShortcut == newShortcut)
        return;

    // Remove shortcut button if shortcut is removed, unrecognized or already set.
    if ( newShortcut.isEmpty() || shortcuts().contains(newShortcut) ) {
        if (shortcutButton) {
            delete shortcutButton;
            emit shortcutRemoved(oldShortcut);
        }
    } else if (shortcutButton) {
        emit shortcutRemoved(oldShortcut);
        setButtonShortcut(shortcutButton, newShortcut);
        emit shortcutAdded(newShortcut);
    } else {
        addShortcut(newShortcut);
    }
}
Exemplo n.º 13
0
void TkAction::setDefaultShortcuts(const QKeySequence & shortcut0, const QKeySequence & shortcut1, const QKeySequence & shortcut2, const QKeySequence & shortcut3) {
	QList<QKeySequence> shortcuts;
	if (!shortcut0.isEmpty()) {
		shortcuts += shortcut0;
	}
	if (!shortcut1.isEmpty()) {
		shortcuts += shortcut1;
	}
	if (!shortcut2.isEmpty()) {
		shortcuts += shortcut2;
	}
	if (!shortcut3.isEmpty()) {
		shortcuts += shortcut3;
	}
	setDefaultShortcuts(shortcuts);
}
Exemplo n.º 14
0
bool KShortcut::contains(const QKeySequence &needle) const
{
    if (needle.isEmpty()) {
        return false;
    }
    return d->primary == needle || d->alternate == needle;
}
Exemplo n.º 15
0
 QKeySequence toKeySequence(const QString &key)
 {
     QKeySequence ret = key;
     // TODO printf? use logging
     if (key.isEmpty() && ret.isEmpty())
         printf("Key sequence %s is not valid\n", key.toLatin1().constData());
     return ret;
 }
/** Redefined to set shortcuts from settings at startup. */
void MediaButton::setObjectName(const QString &name)
{
	QKeySequence shortcut = Settings::getInstance()->shortcut(name.left(name.size() - QString("Button").size()));
	if (!shortcut.isEmpty()) {
		setShortcut(shortcut);
	}
	QObject::setObjectName(name);
}
Exemplo n.º 17
0
bool MixxxKeyboard::eventFilter(QObject*, QEvent* e) {
    if (e->type() == QEvent::FocusOut) {
        // If we lose focus, we need to clear out the active key list
        // because we might not get Key Release events.
        m_qActiveKeyList.clear();
    } else if (e->type() == QEvent::KeyPress) {
        QKeyEvent* ke = (QKeyEvent *)e;

#ifdef __APPLE__
        // On Mac OSX the nativeScanCode is empty (const 1) http://doc.qt.nokia.com/4.7/qkeyevent.html#nativeScanCode
        // We may loose the release event if a the shift key is pressed later
        // and there is character shift like "1" -> "!"
        int keyId = ke->key();
#else
        int keyId = ke->nativeScanCode();
#endif
        //qDebug() << "KeyPress event =" << ke->key() << "KeyId =" << keyId;

        // Run through list of active keys to see if the pressed key is already active
        // Just for returning true if we are consuming this key event

        foreach (const KeyDownInformation& keyDownInfo, m_qActiveKeyList) {
            if (keyDownInfo.keyId == keyId) {
                return true;
            }
        }

        QKeySequence ks = getKeySeq(ke);
        if (!ks.isEmpty()) {
            ConfigValueKbd ksv(ks);
            // Check if a shortcut is defined
            bool result = false;
            // using const_iterator here is faster than QMultiHash::values()
            for (QMultiHash<ConfigValueKbd, ConfigKey>::const_iterator it =
                         m_keySequenceToControlHash.find(ksv);
                 it != m_keySequenceToControlHash.end() && it.key() == ksv; ++it) {
                const ConfigKey& configKey = it.value();
                if (configKey.group != "[KeyboardShortcuts]") {
                    ControlObject* control = ControlObject::getControl(configKey);
                    if (control) {
                        //qDebug() << configKey << "MIDI_NOTE_ON" << 1;
                        // Add key to active key list
                        m_qActiveKeyList.append(KeyDownInformation(
                            keyId, ke->modifiers(), control));
                        // Since setting the value might cause us to go down
                        // a route that would eventually clear the active
                        // key list, do that last.
                        control->setValueFromMidi(MIDI_NOTE_ON, 1);
                        result = true;
                    } else {
                        qDebug() << "Warning: Keyboard key is configured for nonexistent control:"
                                 << configKey.group << configKey.item;
                    }
                }
            }
            return result;
        }
    } else if (e->type()==QEvent::KeyRelease) {
Exemplo n.º 18
0
bool GlobalHotImpl::unregister_hot(const QKeySequence &keys) {
  if (keys.isEmpty()) return false;
  Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
  quint32 code = native_keycode(Qt::Key((keys[0] ^ allMods) & keys[0]));
  quint32 mods = native_modifiers(Qt::KeyboardModifiers(keys[0] & allMods));
  unregister_hot(code, mods);
  m_shortcuts.remove(qMakePair(code, mods));
  return true;
}
Exemplo n.º 19
0
void EditWidget::setSendKey(const QKeySequence &AKey)
{
	FSendShortcut->setKey(AKey);
	if (!AKey.isEmpty())
		ui.tlbSend->setToolTip(tr("Send message (%1)").arg(AKey.toString().replace("Return","Enter")));
	else
		ui.tlbSend->setToolTip(tr("Send message"));
	emit sendKeyChanged(AKey);
}
Exemplo n.º 20
0
bool QxtGlobalShortcut::setShortcut(const QKeySequence &shortcut)
{
    Q_D(QxtGlobalShortcut);
    if (d->key != 0 && !d->unsetShortcut())
        return false;
    if (shortcut.isEmpty())
        return true;
    return d->setShortcut(shortcut);
}
Exemplo n.º 21
0
bool Configuration::shortcutToConfig(const QString id, const QKeySequence shortcut)
{
    QString _id = QString("%1").arg(id);
    QString _key = "";
    if(!shortcut.isEmpty())
        _key = shortcut.toString(QKeySequence::NativeText);
    else
        _key = "NOT_SET";
    return BridgeSettingSet("Shortcuts", _id.toUtf8().constData(), _key.toUtf8().constData());
}
Exemplo n.º 22
0
void CommandWidget::on_pushButtonShortcut_clicked()
{
    ShortcutDialog *dialog = new ShortcutDialog(this);
    if (dialog->exec() == QDialog::Accepted) {
        QKeySequence shortcut = dialog->shortcut();
        QString text;
        if ( !shortcut.isEmpty() )
            text = shortcut.toString(QKeySequence::NativeText);
        ui->pushButtonShortcut->setText(text);
    }
}
Exemplo n.º 23
0
void ShortcutButton::addShortcut(const QKeySequence &shortcut)
{
    if ( shortcut.isEmpty() || shortcuts().contains(shortcut) )
        return;

    QPushButton *button = new QPushButton(this);
    m_layout->insertWidget( shortcutCount(), button, 1 );
    connect( button, SIGNAL(clicked()),
             this, SLOT(onShortcutButtonClicked()) );
    button->setText( shortcut.toString(QKeySequence::NativeText) );
    emit shortcutAdded(shortcut);
}
Exemplo n.º 24
0
void QButton::setAccel(const QKeySequence& key)
{
  if (d && d->a)
    d->a->clear();
  if (key.isEmpty())
    return;
  ensureData();
  if (!d->a) {
    d->a = new QAccel(this, "buttonAccel");
    connect(d->a, SIGNAL( activated(int) ), this, SLOT( animateClick() ) );
    connect(d->a, SIGNAL( activatedAmbiguously(int) ), this, SLOT( setFocus() ) );
  }
Exemplo n.º 25
0
void QQuickShortcut::grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context)
{
    ungrabShortcut();

    if (m_completed && !sequence.isEmpty()) {
        QGuiApplicationPrivate *pApp = QGuiApplicationPrivate::instance();
        m_id = pApp->shortcutMap.addShortcut(this, sequence, context, qQuickShortcutContextMatcher);
        if (!m_enabled)
            pApp->shortcutMap.setShortcutEnabled(false, m_id, this);
        if (!m_autorepeat)
            pApp->shortcutMap.setShortcutAutoRepeat(false, m_id, this);
    }
}
Exemplo n.º 26
0
void KbAction::installShortcut(QString text, const QKeySequence &key)
{
    m_storageKey = text;
    m_storageKey.remove('&');
    if(!key.isEmpty())
    {
#ifdef _DEBUG
        _ASSERTE(!s_allKeys.contains(m_storageKey));
        s_allKeys.add(m_storageKey);
#endif
        setShortcut(key);
    }
}
Exemplo n.º 27
0
/** Shows the description for the corresponding command */
void DlgCustomKeyboardImp::on_commandTreeWidget_currentItemChanged(QTreeWidgetItem* item)
{
    if (!item)
        return;

    QVariant data = item->data(1, Qt::UserRole);
    QByteArray name = data.toByteArray(); // command name

    CommandManager & cCmdMgr = Application::Instance->commandManager();
    Command* cmd = cCmdMgr.getCommandByName(name.constData());
    if (cmd) {
        if (cmd->getAction()) {
            QKeySequence ks = cmd->getAction()->shortcut();
            QKeySequence ks2 = QString::fromAscii(cmd->getAccel());
            QKeySequence ks3 = editShortcut->text();

            if (ks.isEmpty())
                accelLineEditShortcut->setText( tr("none") );
            else
                accelLineEditShortcut->setText(ks);

            buttonAssign->setEnabled(!editShortcut->text().isEmpty() && (ks != ks3));
            buttonReset->setEnabled((ks != ks2));
        } else {
          QKeySequence ks = QString::fromAscii(cmd->getAccel());
            if (ks.isEmpty())
                accelLineEditShortcut->setText( tr("none") );
            else
                accelLineEditShortcut->setText(ks);
            buttonAssign->setEnabled(false);
            buttonReset->setEnabled(false);
        }
    }

    textLabelDescription->setText(item->toolTip(1));
}
Exemplo n.º 28
0
StandardShortcut find(const QKeySequence &seq)
{
    if( !seq.isEmpty() ) {
        for(uint i = 0; i < sizeof(g_infoStandardShortcut) / sizeof(KStandardShortcutInfo); i++) {
            StandardShortcut id = g_infoStandardShortcut[i].id;
            if( id != AccelNone ) {
                if(!g_infoStandardShortcut[i].isInitialized)
                    initialize(id);
                if(g_infoStandardShortcut[i].cut.contains(seq))
                    return id;
            }
        }
    }
    return AccelNone;
}
Exemplo n.º 29
0
void ShortcutController::updateKey(const QModelIndex& index, const QKeySequence& keySequence) {
	if (!index.isValid()) {
		return;
	}
	const QModelIndex& parent = index.parent();
	if (!parent.isValid()) {
		return;
	}
	ShortcutItem* item = itemAt(index);
	if (item->functions().first) {
		QKeySequence oldShortcut = item->shortcut();
		if (!oldShortcut.isEmpty()) {
			m_heldKeys.take(oldShortcut);
		}
		if (!keySequence.isEmpty()) {
			m_heldKeys[keySequence] = item;
		}
	}
	item->setShortcut(keySequence);
	if (m_config) {
		m_config->setQtOption(item->name(), keySequence.toString(), KEY_SECTION);
	}
	emit dataChanged(createIndex(index.row(), 0, index.internalPointer()), createIndex(index.row(), 2, index.internalPointer()));
}
Exemplo n.º 30
0
void ShortcutButton::addShortcut(const QKeySequence &shortcut)
{
    if ( shortcut.isEmpty() || shortcuts().contains(shortcut) )
        return;

    auto button = new QPushButton(this);
    const int buttonIndex = shortcutCount();
    m_layout->insertWidget(buttonIndex, button, 1);

    setTabOrder(m_buttonAddShortcut, button);

    connect( button, &QAbstractButton::clicked,
             this, &ShortcutButton::onShortcutButtonClicked );
    setButtonShortcut(button, shortcut);
    emit shortcutAdded(shortcut);
}