From a67abdcd3000ed7d89fa374c7da49e27863e7e9f Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Tue, 19 Jan 2016 12:51:05 +0100 Subject: QInputAspect: hookup EventSourceHelper/InputSetings Change-Id: Idab8e24f80ae2be457bbc790f6784db8e02d5a2f Reviewed-by: Sean Harmer --- src/core/services/qeventfilterservice.cpp | 8 ++++++-- src/input/backend/eventsourcesetterhelper.cpp | 12 ++++++++---- src/input/backend/eventsourcesetterhelper_p.h | 1 + src/input/backend/inputhandler.cpp | 10 ++++++++++ src/input/backend/inputhandler_p.h | 2 ++ src/input/backend/inputsettings_p.h | 1 + src/input/frontend/qinputaspect.cpp | 2 ++ 7 files changed, 30 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/core/services/qeventfilterservice.cpp b/src/core/services/qeventfilterservice.cpp index c9a74a173..6cfb3dd3a 100644 --- a/src/core/services/qeventfilterservice.cpp +++ b/src/core/services/qeventfilterservice.cpp @@ -144,8 +144,12 @@ QEventFilterService::~QEventFilterService() void QEventFilterService::initialize(QObject *eventSource) { Q_D(QEventFilterService); - d->m_eventDispatcher.reset(new InternalEventListener()); - eventSource->installEventFilter(d->m_eventDispatcher.data()); + if (eventSource == Q_NULLPTR) { + d->m_eventDispatcher.reset(); + } else { + d->m_eventDispatcher.reset(new InternalEventListener()); + eventSource->installEventFilter(d->m_eventDispatcher.data()); + } } void QEventFilterService::registerEventFilter(QObject *eventFilter, int priority) diff --git a/src/input/backend/eventsourcesetterhelper.cpp b/src/input/backend/eventsourcesetterhelper.cpp index 1dc85a24b..81a1114b2 100644 --- a/src/input/backend/eventsourcesetterhelper.cpp +++ b/src/input/backend/eventsourcesetterhelper.cpp @@ -49,16 +49,19 @@ EventSourceSetterHelper::EventSourceSetterHelper(Qt3DCore::QEventFilterService * : QObject() , m_service(service) , m_inputHandler(inputHandler) + , m_lastEventSource(Q_NULLPTR) { } // Any thread void EventSourceSetterHelper::setEventSource(QObject *eventSource) { - QMetaObject::invokeMethod(this, - "setEventSourceHelper", - Qt::BlockingQueuedConnection, - Q_ARG(QObject *, eventSource)); + if (m_lastEventSource != eventSource) { + QMetaObject::invokeMethod(this, + "setEventSourceHelper", + Qt::BlockingQueuedConnection, + Q_ARG(QObject *, eventSource)); + } } // Main Thread @@ -66,6 +69,7 @@ void EventSourceSetterHelper::setEventSourceHelper(QObject *eventSource) { m_service->initialize(eventSource); m_inputHandler->registerEventFilters(m_service); + m_lastEventSource = eventSource; } } // Input diff --git a/src/input/backend/eventsourcesetterhelper_p.h b/src/input/backend/eventsourcesetterhelper_p.h index 4a948be6a..ef1a1cf49 100644 --- a/src/input/backend/eventsourcesetterhelper_p.h +++ b/src/input/backend/eventsourcesetterhelper_p.h @@ -79,6 +79,7 @@ private Q_SLOTS: private: Qt3DCore::QEventFilterService *m_service; InputHandler *m_inputHandler; + QObject *m_lastEventSource; }; } // Input diff --git a/src/input/backend/inputhandler.cpp b/src/input/backend/inputhandler.cpp index 452fe0e8f..aa42577dc 100644 --- a/src/input/backend/inputhandler.cpp +++ b/src/input/backend/inputhandler.cpp @@ -238,6 +238,16 @@ void InputHandler::setEventSourceHelper(EventSourceSetterHelper *helper) m_eventSourceSetter.reset(helper); } +void InputHandler::updateEventSource() +{ + if (m_settings != Q_NULLPTR) { + // Will be updated only if eventSource is different than + // what was set last + QObject *eventSource = m_settings->eventSource(); + m_eventSourceSetter->setEventSource(eventSource); + } +} + } // namespace Input } // namespace Qt3DInput diff --git a/src/input/backend/inputhandler_p.h b/src/input/backend/inputhandler_p.h index 3ba1e3885..c1b6fe993 100644 --- a/src/input/backend/inputhandler_p.h +++ b/src/input/backend/inputhandler_p.h @@ -134,6 +134,8 @@ public: void setInputSettings(InputSettings *settings); void setEventSourceHelper(EventSourceSetterHelper *helper); + void updateEventSource(); + private: KeyboardControllerManager *m_keyboardControllerManager; KeyboardInputManager *m_keyboardInputManager; diff --git a/src/input/backend/inputsettings_p.h b/src/input/backend/inputsettings_p.h index feb9bf3b2..0fa6c5123 100644 --- a/src/input/backend/inputsettings_p.h +++ b/src/input/backend/inputsettings_p.h @@ -64,6 +64,7 @@ class InputSettings : public Qt3DCore::QBackendNode public: InputSettings(); void updateFromPeer(Qt3DCore::QNode *peer) Q_DECL_OVERRIDE; + inline QObject *eventSource() const { return m_eventSource; } protected: void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp index 31170935d..7656924e4 100644 --- a/src/input/frontend/qinputaspect.cpp +++ b/src/input/frontend/qinputaspect.cpp @@ -169,6 +169,8 @@ QVector QInputAspect::jobsToExecute(qint64 time) Q_D(QInputAspect); QVector jobs; + d->m_inputHandler->updateEventSource(); + jobs.append(d->m_inputHandler->keyboardJobs()); jobs.append(d->m_inputHandler->mouseJobs()); -- cgit v1.2.3