summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-01-19 12:51:05 +0100
committerPaul Lemire <paul.lemire@kdab.com>2016-01-19 15:21:28 +0000
commita67abdcd3000ed7d89fa374c7da49e27863e7e9f (patch)
tree01a58c175c0182101e70efb876d307f305c30dc9 /src
parent549013598404fa0b9b48c196adf2570c9e2103a8 (diff)
QInputAspect: hookup EventSourceHelper/InputSetings
Change-Id: Idab8e24f80ae2be457bbc790f6784db8e02d5a2f Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/services/qeventfilterservice.cpp8
-rw-r--r--src/input/backend/eventsourcesetterhelper.cpp12
-rw-r--r--src/input/backend/eventsourcesetterhelper_p.h1
-rw-r--r--src/input/backend/inputhandler.cpp10
-rw-r--r--src/input/backend/inputhandler_p.h2
-rw-r--r--src/input/backend/inputsettings_p.h1
-rw-r--r--src/input/frontend/qinputaspect.cpp2
7 files changed, 30 insertions, 6 deletions
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<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time)
Q_D(QInputAspect);
QVector<QAspectJobPtr> jobs;
+ d->m_inputHandler->updateEventSource();
+
jobs.append(d->m_inputHandler->keyboardJobs());
jobs.append(d->m_inputHandler->mouseJobs());