23bool QInputControl::isAcceptableInput(
const QKeyEvent *event)
const
25 const QString text = event->text();
29 const QChar c = text.at(0);
33 if (c.category() == QChar::Other_Format)
37 if (event->modifiers() == Qt::ControlModifier
38 || event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) {
45 if (c.category() == QChar::Other_PrivateUse)
48 if (c.isHighSurrogate() && text.size() > 1 && text.at(1).isLowSurrogate())
51 if (m_type == TextEdit && c == u'\t')
57bool QInputControl::isCommonTextEditShortcut(
const QKeyEvent *ke)
59 if (ke->modifiers() == Qt::NoModifier
60 || ke->modifiers() == Qt::ShiftModifier
61 || ke->modifiers() == Qt::KeypadModifier) {
62 if (ke->key() < Qt::Key_Escape) {
71 case Qt::Key_Backspace:
82#if QT_CONFIG(shortcut)
83 }
else if (ke->matches(QKeySequence::Copy)
84 || ke->matches(QKeySequence::Paste)
85 || ke->matches(QKeySequence::Cut)
86 || ke->matches(QKeySequence::Redo)
87 || ke->matches(QKeySequence::Undo)
88 || ke->matches(QKeySequence::MoveToNextWord)
89 || ke->matches(QKeySequence::MoveToPreviousWord)
90 || ke->matches(QKeySequence::MoveToStartOfDocument)
91 || ke->matches(QKeySequence::MoveToEndOfDocument)
92 || ke->matches(QKeySequence::SelectNextWord)
93 || ke->matches(QKeySequence::SelectPreviousWord)
94 || ke->matches(QKeySequence::SelectStartOfLine)
95 || ke->matches(QKeySequence::SelectEndOfLine)
96 || ke->matches(QKeySequence::SelectStartOfBlock)
97 || ke->matches(QKeySequence::SelectEndOfBlock)
98 || ke->matches(QKeySequence::SelectStartOfDocument)
99 || ke->matches(QKeySequence::SelectEndOfDocument)
100 || ke->matches(QKeySequence::SelectAll)
115QVariant QInputControl::selectionWrapper(QMimeData *mimeData)
117 struct MimeDataSelection
119 QMimeData *mimeData =
nullptr;
120 operator QMimeData*()
const {
return mimeData; }
121 operator QString()
const {
return mimeData->text(); }
124 static bool registeredConversions = []{
125 return QMetaType::registerConverter<MimeDataSelection, QMimeData*>()
126 && QMetaType::registerConverter<MimeDataSelection, QString>();
128 Q_ASSERT(registeredConversions);
129 return QVariant::fromValue(MimeDataSelection{mimeData});
132QMimeData *QInputControl::mimeDataForInputEvent(QInputMethodEvent *event)
134 const auto &attributes = event->attributes();
135 auto mimeDataAttr = std::find_if(attributes.begin(), attributes.end(),
136 [](
auto a) {
return a.type == QInputMethodEvent::MimeData; });
137 return mimeDataAttr != event->attributes().end() ?
138 mimeDataAttr->value.value<QMimeData*>() :
nullptr;