summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2020-06-25 16:02:02 +0100
committerMike Krus <mike.krus@kdab.com>2020-07-01 16:59:16 +0100
commit253013fd76d1caf89d2fd7a3f6334a1eae7f75ba (patch)
tree13d5eeaf970b98e3dec1ac2f50cc17568590c7c1 /src/core
parent7d836129bc3fa502e3480c47ba04608c8e8ca708 (diff)
Input Aspect: Dispatch events directly
Rather than accumulating events during a frame, they are now directly delivered to the device handlers synchronously. This removes the need to use jobs for updating the nodes. Updating axis and logical devices remains done using jobs at every frame. Change-Id: I2853a72cfe68201d8a6eb44d37bc64c9f50efd4f Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/services/qeventfilterservice.cpp23
-rw-r--r--src/core/services/qeventfilterservice_p.h3
2 files changed, 17 insertions, 9 deletions
diff --git a/src/core/services/qeventfilterservice.cpp b/src/core/services/qeventfilterservice.cpp
index 036bcd7b4..2a6425fdd 100644
--- a/src/core/services/qeventfilterservice.cpp
+++ b/src/core/services/qeventfilterservice.cpp
@@ -40,6 +40,7 @@
#include "qeventfilterservice_p.h"
#include <QtCore/QObject>
+#include <QtGui/QHoverEvent>
#include <Qt3DCore/private/qabstractserviceprovider_p.h>
@@ -108,8 +109,13 @@ public:
}
}
- QScopedPointer<InternalEventListener> m_eventDispatcher;
+ std::unique_ptr<InternalEventListener> m_eventDispatcher;
std::vector<FilterPriorityPair> m_eventFilters;
+ std::vector<std::pair<QObject*, QMouseEvent>> m_pendingMouseEvents;
+ std::vector<std::pair<QObject*, QKeyEvent>> m_pendingKeyEvents;
+#if QT_CONFIG(wheelevent)
+ std::vector<std::pair<QObject*, QWheelEvent>> m_pendingWheelEvents;
+#endif
};
/* !\internal
@@ -141,15 +147,15 @@ void QEventFilterService::initialize(QObject *eventSource)
d->m_eventDispatcher.reset();
} else {
d->m_eventDispatcher.reset(new InternalEventListener(d));
- eventSource->installEventFilter(d->m_eventDispatcher.data());
+ eventSource->installEventFilter(d->m_eventDispatcher.get());
}
}
void QEventFilterService::shutdown(QObject *eventSource)
{
Q_D(QEventFilterService);
- if (eventSource && d->m_eventDispatcher.data())
- eventSource->removeEventFilter(d->m_eventDispatcher.data());
+ if (eventSource && d->m_eventDispatcher.get())
+ eventSource->removeEventFilter(d->m_eventDispatcher.get());
}
void QEventFilterService::registerEventFilter(QObject *eventFilter, int priority)
@@ -164,11 +170,11 @@ void QEventFilterService::unregisterEventFilter(QObject *eventFilter)
d->unregisterEventFilter(eventFilter);
}
-namespace{
+namespace {
InternalEventListener::InternalEventListener(QEventFilterServicePrivate *filterService, QObject *parent)
- : QObject(parent),
- m_filterService(filterService)
+ : QObject(parent)
+ , m_filterService(filterService)
{
}
@@ -181,7 +187,8 @@ bool InternalEventListener::eventFilter(QObject *obj, QEvent *e)
}
return false;
}
-}
+
+} // namespace
} // Qt3DCore
diff --git a/src/core/services/qeventfilterservice_p.h b/src/core/services/qeventfilterservice_p.h
index 7efe51df4..5667d1012 100644
--- a/src/core/services/qeventfilterservice_p.h
+++ b/src/core/services/qeventfilterservice_p.h
@@ -52,9 +52,10 @@
//
#include <Qt3DCore/qt3dcore_global.h>
-
#include <Qt3DCore/private/qservicelocator_p.h>
+#include <vector>
+
QT_BEGIN_NAMESPACE
namespace Qt3DCore {