42 #include <qpa/qplatformtheme.h>
43 #include "private/qguiapplication_p.h"
46 #include <QtCore/qhashfunctions.h>
47 #ifndef QT_NO_DATASTREAM
52 #if defined(Q_OS_MACOS)
53 #include <QtCore/private/qcore_mac_p.h>
60 #if defined(Q_OS_MACOS) || defined(Q_CLANG_QDOC)
61 static bool qt_sequence_no_mnemonics =
true;
62 struct MacSpecialKey {
69 static const int kShiftUnicode = 0x21E7;
70 static const int kControlUnicode = 0x2303;
71 static const int kOptionUnicode = 0x2325;
72 static const int kCommandUnicode = 0x2318;
74 static const int NumEntries = 21;
75 static const MacSpecialKey entries[NumEntries] = {
114 ushort macSymbol =
i->macSymbol;
116 && (macSymbol == kControlUnicode || macSymbol == kCommandUnicode)) {
117 if (macSymbol == kControlUnicode)
118 macSymbol = kCommandUnicode;
120 macSymbol = kControlUnicode;
123 return QChar(macSymbol);
126 static int qtkeyForMacSymbol(
const QChar ch)
128 const ushort unicode =
ch.unicode();
129 for (
const MacSpecialKey &
entry : entries) {
130 if (
entry.macSymbol == unicode) {
133 && (unicode == kControlUnicode || unicode == kCommandUnicode)) {
134 if (unicode == kControlUnicode)
146 static bool qt_sequence_no_mnemonics =
false;
411 static const struct {
420 {
Qt::Key_Tab, QT_TRANSLATE_NOOP(
"QShortcut",
"Tab") },
430 {
Qt::Key_Home, QT_TRANSLATE_NOOP(
"QShortcut",
"Home") },
431 {
Qt::Key_End, QT_TRANSLATE_NOOP(
"QShortcut",
"End") },
432 {
Qt::Key_Left, QT_TRANSLATE_NOOP(
"QShortcut",
"Left") },
433 {
Qt::Key_Up, QT_TRANSLATE_NOOP(
"QShortcut",
"Up") },
435 {
Qt::Key_Down, QT_TRANSLATE_NOOP(
"QShortcut",
"Down") },
441 {
Qt::Key_Menu, QT_TRANSLATE_NOOP(
"QShortcut",
"Menu") },
442 {
Qt::Key_Help, QT_TRANSLATE_NOOP(
"QShortcut",
"Help") },
447 {
Qt::Key_Back, QT_TRANSLATE_NOOP(
"QShortcut",
"Back") },
449 {
Qt::Key_Stop, QT_TRANSLATE_NOOP(
"QShortcut",
"Stop") },
502 {
Qt::Key_WWW, QT_TRANSLATE_NOOP(
"QShortcut",
"WWW") },
505 {
Qt::Key_Shop, QT_TRANSLATE_NOOP(
"QShortcut",
"Shop") },
516 {
Qt::Key_Book, QT_TRANSLATE_NOOP(
"QShortcut",
"Book") },
517 {
Qt::Key_CD, QT_TRANSLATE_NOOP(
"QShortcut",
"CD") },
524 {
Qt::Key_Copy, QT_TRANSLATE_NOOP(
"QShortcut",
"Copy") },
525 {
Qt::Key_Cut, QT_TRANSLATE_NOOP(
"QShortcut",
"Cut") },
527 {
Qt::Key_DOS, QT_TRANSLATE_NOOP(
"QShortcut",
"DOS") },
529 {
Qt::Key_Excel, QT_TRANSLATE_NOOP(
"QShortcut",
"Spreadsheet") },
531 {
Qt::Key_Game, QT_TRANSLATE_NOOP(
"QShortcut",
"Game") },
532 {
Qt::Key_Go, QT_TRANSLATE_NOOP(
"QShortcut",
"Go") },
537 {
Qt::Key_Memo, QT_TRANSLATE_NOOP(
"QShortcut",
"Memo") },
538 {
Qt::Key_MenuKB, QT_TRANSLATE_NOOP(
"QShortcut",
"Keyboard Menu") },
541 {
Qt::Key_News, QT_TRANSLATE_NOOP(
"QShortcut",
"News") },
551 {
Qt::Key_Save, QT_TRANSLATE_NOOP(
"QShortcut",
"Save") },
552 {
Qt::Key_Send, QT_TRANSLATE_NOOP(
"QShortcut",
"Send") },
553 {
Qt::Key_Spell, QT_TRANSLATE_NOOP(
"QShortcut",
"Spellchecker") },
562 {
Qt::Key_Word, QT_TRANSLATE_NOOP(
"QShortcut",
"Word Processor") },
563 {
Qt::Key_Xfer, QT_TRANSLATE_NOOP(
"QShortcut",
"XFer") },
566 {
Qt::Key_Away, QT_TRANSLATE_NOOP(
"QShortcut",
"Away") },
574 {
Qt::Key_WLAN, QT_TRANSLATE_NOOP(
"QShortcut",
"Wireless") },
575 {
Qt::Key_UWB, QT_TRANSLATE_NOOP(
"QShortcut",
"Ultra Wide Band") },
581 {
Qt::Key_Time, QT_TRANSLATE_NOOP(
"QShortcut",
"Time") },
583 {
Qt::Key_View, QT_TRANSLATE_NOOP(
"QShortcut",
"View") },
588 {
Qt::Key_MicMute, QT_TRANSLATE_NOOP(
"QShortcut",
"Microphone Mute") },
590 {
Qt::Key_Red, QT_TRANSLATE_NOOP(
"QShortcut",
"Red") },
593 {
Qt::Key_Blue, QT_TRANSLATE_NOOP(
"QShortcut",
"Blue") },
599 {
Qt::Key_Info, QT_TRANSLATE_NOOP(
"QShortcut",
"Info") },
605 {
Qt::Key_New, QT_TRANSLATE_NOOP(
"QShortcut",
"New") },
606 {
Qt::Key_Open, QT_TRANSLATE_NOOP(
"QShortcut",
"Open") },
607 {
Qt::Key_Find, QT_TRANSLATE_NOOP(
"QShortcut",
"Find") },
608 {
Qt::Key_Undo, QT_TRANSLATE_NOOP(
"QShortcut",
"Undo") },
609 {
Qt::Key_Redo, QT_TRANSLATE_NOOP(
"QShortcut",
"Redo") },
613 {
Qt::Key_Print, QT_TRANSLATE_NOOP(
"QShortcut",
"Print Screen") },
623 {
Qt::Key_SysReq, QT_TRANSLATE_NOOP(
"QShortcut",
"System Request") },
628 {
Qt::Key_Yes, QT_TRANSLATE_NOOP(
"QShortcut",
"Yes") },
629 {
Qt::Key_No, QT_TRANSLATE_NOOP(
"QShortcut",
"No") },
638 {
Qt::Key_Call, QT_TRANSLATE_NOOP(
"QShortcut",
"Call") },
643 {
Qt::Key_Flip, QT_TRANSLATE_NOOP(
"QShortcut",
"Flip") },
649 {
Qt::Key_Camera, QT_TRANSLATE_NOOP(
"QShortcut",
"Camera Shutter") },
694 {
Qt::Key_Play, QT_TRANSLATE_NOOP(
"QShortcut",
"Play") },
695 {
Qt::Key_Zoom, QT_TRANSLATE_NOOP(
"QShortcut",
"Zoom") },
696 {
Qt::Key_Exit, QT_TRANSLATE_NOOP(
"QShortcut",
"Exit") },
702 static constexpr
int numKeyNames =
sizeof keyname /
sizeof *keyname;
877 :
QKeySequence(
k1.toCombined(), k2.toCombined(), k3.toCombined(), k4.toCombined())
965 if (qt_sequence_no_mnemonics)
985 qWarning(
"QKeySequence::mnemonic: \"%s\" contains multiple occurrences of '&'", qPrintable(
text));
1004 int QKeySequence::assign(
const QString &ks)
1022 int p = 0, diff = 0;
1032 if (
p == keyseq.
count() - 1) {
1046 keyseq = keyseq.
right(-1 ==
p ? 0 : keyseq.
length() - (
p + 1));
1068 int QKeySequence::decodeString(
const QString &
str)
1078 accel = std::move(accel).
toLower();
1083 gmodifs = globalModifs();
1085 #if defined(Q_OS_MACOS)
1105 gmodifs = globalPortableModifs();
1127 #if defined(Q_OS_MACOS)
1128 for (
int i = 0;
i < modifs.
size(); ++
i) {
1153 if (
sub.length() == 1) {
1159 bool validModifier =
false;
1160 for (
int j = 0;
j < modifs.
size(); ++
j) {
1164 validModifier =
true;
1178 accelRef = accelRef.
mid(
p + 1);
1181 if (accelRef.
length() == 1) {
1182 #if defined(Q_OS_MACOS)
1183 int qtKey = qtkeyForMacSymbol(accelRef.
at(0));
1191 }
else if (accelRef.
at(0) ==
QLatin1Char(
'f') && (fnum = accelRef.
mid(1).
toInt()) >= 1 && fnum <= 35) {
1198 for (
int tran = 0; tran < 2; ++tran) {
1201 for (
int i = 0;
i < numKeyNames; ++
i) {
1206 ret |= keyname[
i].key;
1254 #if defined(Q_OS_MACOS)
1266 const int *modifierOrder;
1267 const int *qtkeyOrder;
1269 modifierOrder = DontSwapModifierOrder;
1270 qtkeyOrder = DontSwapQtKeyOrder;
1272 modifierOrder = ModifierOrder;
1273 qtkeyOrder = QtKeyOrder;
1276 for (
int i = 0; modifierOrder[
i] != 0; ++
i) {
1277 if (
key & modifierOrder[
i])
1278 s += qt_macSymbolForQtKey(qtkeyOrder[
i]);
1298 #if defined(Q_OS_MACOS)
1333 #if defined(Q_OS_MACOS)
1343 #if defined(Q_OS_MACOS)
1346 while (
i < numKeyNames) {
1358 if (
i >= numKeyNames) {
1388 for (
uint i = 0;
i < userN; ++
i) {
1390 sequenceKey = seq[
i];
1391 if (userKey != sequenceKey)
1448 return (d->
key[0] ==
other.d->key[0] &&
1545 for (
int i = 0;
i <
end; ++
i) {
1610 #if !defined(QT_NO_DATASTREAM)
1621 static_assert(
QKeySequencePrivate::MaxKeyCount == 4,
"Forgot to adapt QDataStream &operator<<(QDataStream &s, const QKeySequence &keysequence) to new QKeySequence::MaxKeyCount");
1622 const bool extended =
s.version() >= 5 && keysequence.
count() > 1;
1647 for (
uint i = 0;
i < qMin(
c, MaxKeys); ++
i) {
1649 qWarning(
"Premature EOF while reading QKeySequence");
1661 #ifndef QT_NO_DEBUG_STREAM
1682 #include "moc_qkeysequence.cpp"
small capitals from c petite p scientific i
[1]
T loadRelaxed() const noexcept
The QChar class provides a 16-bit Unicode character.
static constexpr QChar fromUcs2(char16_t c) noexcept
static constexpr bool requiresSurrogates(char32_t ucs4) noexcept
static constexpr char16_t highSurrogate(char32_t ucs4) noexcept
constexpr char16_t unicode() const noexcept
static constexpr char16_t lowSurrogate(char32_t ucs4) noexcept
QChar toUpper() const noexcept
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
The QDataStream class provides serialization of binary data to a QIODevice.
operator>>(QDataStream &ds, qfloat16 &f)
operator<<(QDataStream &ds, qfloat16 f)
The QDebug class provides an output stream for debugging information.
static QString toString(T &&object)
Convenience class for custom QDebug operators.
bool operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs) noexcept
template< typename Enum > size_t qHash(QFlags< Enum > flags, size_t seed=0) noexcept
static QPlatformTheme * platformTheme()
template< typename InputIterator > size_t qHashRange(InputIterator first, InputIterator last, size_t seed=0)
static constexpr QKeyCombination fromCombined(int combined)
The QKeySequence class encapsulates a key sequence as used by shortcuts.
SequenceMatch matches(const QKeySequence &seq) const
QKeySequence & operator=(const QKeySequence &other)
static QKeySequence mnemonic(const QString &text)
bool operator<(const QKeySequence &ks) const
static QKeySequence fromString(const QString &str, SequenceFormat format=PortableText)
void qt_set_sequence_auto_mnemonic(bool b)
static QList< QKeySequence > keyBindings(StandardKey key)
static QList< QKeySequence > listFromString(const QString &str, SequenceFormat format=PortableText)
QKeyCombination operator[](uint i) const
static QString listToString(const QList< QKeySequence > &list, SequenceFormat format=PortableText)
bool operator==(const QKeySequence &other) const
QString toString(SequenceFormat format=PortableText) const
static Q_GUI_EXPORT QString keyName(int key, QKeySequence::SequenceFormat format)
static QString encodeString(int key, QKeySequence::SequenceFormat format)
static int decodeString(QString accel, QKeySequence::SequenceFormat format)
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
qsizetype size() const noexcept
bool isEmpty() const noexcept
const_reference at(qsizetype i) const noexcept
The QString class provides a Unicode character string.
QString right(qsizetype n) const
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
static QString fromLatin1(QByteArrayView ba)
QStringList split(const QString &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
void truncate(qsizetype pos)
QString mid(qsizetype position, qsizetype n=-1) const
const QChar at(qsizetype i) const
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=QLatin1Char(' ')) const
QString toLower() const &
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
QString left(qsizetype n) const
static QString static QString qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
QString & remove(qsizetype i, qsizetype len)
The QStringList class provides a list of strings.
The QStringView class provides a unified view on UTF-16 strings with a read-only subset of the QStrin...
constexpr qsizetype length() const noexcept
int toInt(bool *ok=nullptr, int base=10) const
constexpr QChar at(qsizetype n) const noexcept
constexpr QStringView mid(qsizetype pos, qsizetype n=-1) const noexcept
The QVariant class acts like a union for the most common Qt data types.
static auto fromValue(const T &value) -> std::enable_if_t< std::is_copy_constructible_v< T >, QVariant >
list append(new Employee("Blackpool", "Stephen"))
std::string toLower(std::string const &s)
@ Key_KeyboardBrightnessUp
@ Key_MediaTogglePlayPause
@ Key_KeyboardBrightnessDown
@ AA_MacDontSwapCtrlAndMeta
int distance(TestIterator &a, TestIterator &b)
QT_WARNING_POP void qAtomicAssign(T *&d, T *x)
void qAtomicDetach(T *&d)
#define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter * sub
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
Q_DECLARE_TYPEINFO(QModifKeyName, Q_RELOCATABLE_TYPE)
GLboolean GLboolean GLboolean b
GLsizei const GLchar ** strings
[1]
GLint GLsizei GLsizei GLenum format
GLdouble GLdouble GLdouble GLdouble q
#define Q_ASSERT_X(cond, x, msg)
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
QModifKeyName(int q, QChar n)
QModifKeyName(int q, const QString &n)
QRhiShaderResourceBinding bindings[2]
QDomElement find(const QString &tagName, const QDomElement &e)