diff options
Diffstat (limited to 'src/input/backend')
-rw-r--r-- | src/input/backend/eventsourcesetterhelper.cpp | 12 | ||||
-rw-r--r-- | src/input/backend/eventsourcesetterhelper_p.h | 1 | ||||
-rw-r--r-- | src/input/backend/inputhandler.cpp | 10 | ||||
-rw-r--r-- | src/input/backend/inputhandler_p.h | 2 | ||||
-rw-r--r-- | src/input/backend/inputsettings_p.h | 1 |
5 files changed, 22 insertions, 4 deletions
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; |