aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-11 12:54:46 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-16 10:58:52 +0100
commit10c2a8315977e8eb5fc36cf793cfc74d8913dbb0 (patch)
tree67e7798501c0f6fb218201b87bc95677d9781326 /src
parent40eff49251a0da87c7e7cb2959a353338d089d1e (diff)
Don't copy QKeyEvent instances, store the data explicitly
QEvent is a polymorph type, and even though it has a copy constructor, we shouldn't use it. Use the pattern as in QQuickMouse/WheelEvent. Change-Id: I26ab7b831e1e8dd156c32417f74bc7d800bcf71c Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickevents.cpp15
-rw-r--r--src/quick/items/qquickevents_p_p.h47
2 files changed, 45 insertions, 17 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index ab7b407af5..8df3c1b7dd 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -157,10 +157,10 @@ Item {
*/
/*!
- \qmlmethod bool QtQuick::KeyEvent::matches(StandardKey key)
+ \qmlmethod bool QtQuick::KeyEvent::matches(StandardKey matchKey)
\since 5.2
- Returns \c true if the key event matches the given standard \a key; otherwise returns \c false.
+ Returns \c true if the key event matches the given standard \a matchKey; otherwise returns \c false.
\qml
Item {
@@ -176,6 +176,17 @@ Item {
\sa QKeySequence::StandardKey
*/
+#if QT_CONFIG(shortcut)
+bool QQuickKeyEvent::matches(QKeySequence::StandardKey matchKey) const
+{
+ // copying QKeyEvent::matches
+ uint searchkey = (modifiers() | key()) & ~(Qt::KeypadModifier | Qt::GroupSwitchModifier);
+
+ const QList<QKeySequence> bindings = QKeySequence::keyBindings(matchKey);
+ return bindings.contains(QKeySequence(searchkey));
+}
+#endif
+
/*!
\qmltype MouseEvent
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h
index 9b89d8300e..a9aeae2217 100644
--- a/src/quick/items/qquickevents_p_p.h
+++ b/src/quick/items/qquickevents_p_p.h
@@ -87,38 +87,55 @@ class QQuickKeyEvent : public QObject
public:
QQuickKeyEvent()
- : event(QEvent::None, 0, { })
{}
void reset(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
const QString &text = QString(), bool autorep = false, ushort count = 1)
{
- event = QKeyEvent(type, key, modifiers, text, autorep, count);
- event.setAccepted(false);
+ m_type = type;
+ m_key = key;
+ m_modifiers = modifiers;
+ m_text = text;
+ m_autoRepeat = autorep;
+ m_count = count;
+ setAccepted(false);
}
void reset(const QKeyEvent &ke)
{
- event = ke;
- event.setAccepted(false);
+ m_type = ke.type();
+ m_key = ke.key();
+ m_modifiers = ke.modifiers();
+ m_text = ke.text();
+ m_autoRepeat = ke.isAutoRepeat();
+ m_count = ke.count();
+ m_nativeScanCode = ke.nativeScanCode();
+ setAccepted(false);
}
- int key() const { return event.key(); }
- QString text() const { return event.text(); }
- int modifiers() const { return event.modifiers(); }
- bool isAutoRepeat() const { return event.isAutoRepeat(); }
- int count() const { return event.count(); }
- quint32 nativeScanCode() const { return event.nativeScanCode(); }
+ int key() const { return m_key; }
+ QString text() const { return m_text; }
+ int modifiers() const { return m_modifiers; }
+ bool isAutoRepeat() const { return m_autoRepeat; }
+ int count() const { return m_count; }
+ quint32 nativeScanCode() const { return m_nativeScanCode; }
- bool isAccepted() { return event.isAccepted(); }
- void setAccepted(bool accepted) { event.setAccepted(accepted); }
+ bool isAccepted() { return m_accepted; }
+ void setAccepted(bool accepted) { m_accepted = accepted; }
#if QT_CONFIG(shortcut)
- Q_REVISION(2, 2) Q_INVOKABLE bool matches(QKeySequence::StandardKey key) const { return event.matches(key); }
+ Q_REVISION(2, 2) Q_INVOKABLE bool matches(QKeySequence::StandardKey key) const;
#endif
private:
- QKeyEvent event;
+ QString m_text;
+ quint32 m_nativeScanCode;
+ QEvent::Type m_type;
+ int m_key;
+ int m_modifiers;
+ int m_count;
+ bool m_accepted;
+ bool m_autoRepeat;
};
// used in Qt Location