summaryrefslogtreecommitdiffstats
path: root/src/input/frontend
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-02-08 09:42:28 +0100
committerPaul Lemire <paul.lemire@kdab.com>2019-03-06 10:59:44 +0000
commita356d132b2a426ecd7edb7858245266433b3e855 (patch)
tree0edc8d50c2a81671229da7ec26ff75c9f8fb58ba /src/input/frontend
parent0a8742532fb1697203dd3d7d9c1c28b4cb052e2d (diff)
Fix MouseEvent/WheelEvent to properly forward all keyboard modifiers
Modifiers was an enum when it should have been a flag. This patch makes the transition toward having a flag. The Modifiers enum is renamed Modifier and the flag is named Modifiers. This might affect BIC but this change is really needed to make the modifiers property of Mouse/Wheel event actually useful. Change-Id: I67e472c3cc2654f8d3e84c6248b8e689c0306530 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/input/frontend')
-rw-r--r--src/input/frontend/qmouseevent.cpp58
-rw-r--r--src/input/frontend/qmouseevent.h13
2 files changed, 39 insertions, 32 deletions
diff --git a/src/input/frontend/qmouseevent.cpp b/src/input/frontend/qmouseevent.cpp
index 62f7a097e..2033eed36 100644
--- a/src/input/frontend/qmouseevent.cpp
+++ b/src/input/frontend/qmouseevent.cpp
@@ -43,6 +43,34 @@ QT_BEGIN_NAMESPACE
namespace Qt3DInput {
+namespace {
+
+template<typename EventClass, typename QtEventClass>
+typename EventClass::Modifiers modifiersForEvent(const QtEventClass &event)
+{
+ const Qt::KeyboardModifiers eventModifiers = event.modifiers();
+ typename EventClass::Modifiers modifiers = EventClass::NoModifier;
+
+ if (eventModifiers & Qt::ShiftModifier)
+ modifiers |= EventClass::ShiftModifier;
+
+ if (eventModifiers & Qt::ControlModifier)
+ modifiers |= EventClass::ControlModifier;
+
+ if (eventModifiers & Qt::AltModifier)
+ modifiers |= EventClass::AltModifier;
+
+ if (eventModifiers & Qt::MetaModifier)
+ modifiers |= EventClass::MetaModifier;
+
+ if (eventModifiers & Qt::KeypadModifier)
+ modifiers |= EventClass::KeypadModifier;
+
+ return modifiers;
+}
+
+} // anonymous
+
// Notes:
// Maybe we should provide the world pos of the intersection
// The distance t along the segment line at which the intersection occurs
@@ -270,20 +298,7 @@ int QMouseEvent::buttons() const
*/
QMouseEvent::Modifiers QMouseEvent::modifiers() const
{
- switch (m_event.modifiers()) {
- case Qt::ShiftModifier:
- return QMouseEvent::ShiftModifier;
- case Qt::ControlModifier:
- return QMouseEvent::ControlModifier;
- case Qt::AltModifier:
- return QMouseEvent::AltModifier;
- case Qt::MetaModifier:
- return QMouseEvent::MetaModifier;
- case Qt::KeypadModifier:
- return QMouseEvent::KeypadModifier;
- default:
- return QMouseEvent::NoModifier;
- }
+ return modifiersForEvent<QMouseEvent, decltype(m_event)>(m_event);
}
/*!
@@ -483,20 +498,7 @@ int QWheelEvent::buttons() const
*/
QWheelEvent::Modifiers QWheelEvent::modifiers() const
{
- switch (m_event.modifiers()) {
- case Qt::ShiftModifier:
- return QWheelEvent::ShiftModifier;
- case Qt::ControlModifier:
- return QWheelEvent::ControlModifier;
- case Qt::AltModifier:
- return QWheelEvent::AltModifier;
- case Qt::MetaModifier:
- return QWheelEvent::MetaModifier;
- case Qt::KeypadModifier:
- return QWheelEvent::KeypadModifier;
- default:
- return QWheelEvent::NoModifier;
- }
+ return modifiersForEvent<QWheelEvent, decltype(m_event)>(m_event);
}
#endif // QT_CONFIG(wheelevent)
diff --git a/src/input/frontend/qmouseevent.h b/src/input/frontend/qmouseevent.h
index 63786ac28..9c6386036 100644
--- a/src/input/frontend/qmouseevent.h
+++ b/src/input/frontend/qmouseevent.h
@@ -70,7 +70,7 @@ public:
};
Q_ENUM(Buttons) // LCOV_EXCL_LINE
- enum Modifiers {
+ enum Modifier {
NoModifier = Qt::NoModifier,
ShiftModifier = Qt::ShiftModifier,
ControlModifier = Qt::ControlModifier,
@@ -78,7 +78,8 @@ public:
MetaModifier = Qt::MetaModifier,
KeypadModifier = Qt::KeypadModifier
};
- Q_ENUM(Modifiers) // LCOV_EXCL_LINE
+ Q_DECLARE_FLAGS(Modifiers, Modifier)
+ Q_FLAG(Modifiers)
explicit QMouseEvent(const QT_PREPEND_NAMESPACE(QMouseEvent) &e);
~QMouseEvent();
@@ -127,7 +128,7 @@ public:
};
Q_ENUM(Buttons) // LCOV_EXCL_LINE
- enum Modifiers {
+ enum Modifier {
NoModifier = Qt::NoModifier,
ShiftModifier = Qt::ShiftModifier,
ControlModifier = Qt::ControlModifier,
@@ -135,7 +136,8 @@ public:
MetaModifier = Qt::MetaModifier,
KeypadModifier = Qt::KeypadModifier
};
- Q_ENUM(Modifiers) // LCOV_EXCL_LINE
+ Q_DECLARE_FLAGS(Modifiers, Modifier)
+ Q_FLAG(Modifiers)
explicit QWheelEvent(const QT_PREPEND_NAMESPACE(QWheelEvent) &e);
~QWheelEvent();
@@ -159,6 +161,9 @@ typedef QSharedPointer<QWheelEvent> QWheelEventPtr;
} // namespace Qt3DInput
+Q_DECLARE_OPERATORS_FOR_FLAGS(Qt3DInput::QMouseEvent::Modifiers)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Qt3DInput::QWheelEvent::Modifiers)
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE(Qt3DInput::QMouseEvent*) // LCOV_EXCL_LINE