diff options
author | Paul Lemire <paul.lemire.ecortex@kdab.com> | 2014-11-13 07:43:42 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-11-14 20:29:59 +0100 |
commit | f7cfeb0cc5b7ee85b3768515ff6844a3e6204815 (patch) | |
tree | 9f636ea03b222092634278b60d9304d5f11a8e3e | |
parent | 11bb5d034285f35aad75e1838973bdac70cedad1 (diff) |
KeyboardController: holds the id of the current focused input
Comparing that id to the last input to request focus will easily let us know
whether we need to create an AssignKeyboardFocus job or not.
Change-Id: Ia6e793abd1a7e0f57df520835fe7f9308351e067
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/input/assignkeyboardfocusjob.cpp | 16 | ||||
-rw-r--r-- | src/input/keyboardcontroller.cpp | 5 | ||||
-rw-r--r-- | src/input/keyboardcontroller_p.h | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/src/input/assignkeyboardfocusjob.cpp b/src/input/assignkeyboardfocusjob.cpp index 1640c7203..8d7614dcd 100644 --- a/src/input/assignkeyboardfocusjob.cpp +++ b/src/input/assignkeyboardfocusjob.cpp @@ -65,14 +65,16 @@ void AssignKeyboardFocusJob::setInputHandler(InputHandler *handler) void AssignKeyboardFocusJob::run() { - KeyboardController *controller = m_inputHandler->keyboardControllerManager()->lookupResource(m_keyboardController); - Q_FOREACH (const HKeyboardInput handle, controller->keyboardInputsHandles()) { - KeyboardInput *input = m_inputHandler->keyboardInputManager()->data(handle); - if (input) - input->setFocus(input->peerUuid() == controller->lastKeyboardInputRequester()); + KeyboardController *controller = m_inputHandler->keyboardControllerManager()->lookupResource(m_keyboardController); + Q_FOREACH (const HKeyboardInput handle, controller->keyboardInputsHandles()) { + KeyboardInput *input = m_inputHandler->keyboardInputManager()->data(handle); + if (input) { + bool hasFocus = input->peerUuid() == controller->lastKeyboardInputRequester(); + input->setFocus(hasFocus); + if (hasFocus) + controller->setCurrentFocusItem(input->peerUuid()); } - // Sets the last requester id to null so that we won't run this job next frame if not needed - controller->requestFocusForInput(QNodeUuid()); + } } } // Input diff --git a/src/input/keyboardcontroller.cpp b/src/input/keyboardcontroller.cpp index e56551cb0..dcfcb583b 100644 --- a/src/input/keyboardcontroller.cpp +++ b/src/input/keyboardcontroller.cpp @@ -89,6 +89,11 @@ void KeyboardController::removeKeyboardInput(const QNodeUuid &input) m_keyboardInputHandles.removeAll(m_inputHandler->keyboardInputManager()->lookupHandle(input)); } +void KeyboardController::setCurrentFocusItem(const QNodeUuid &input) +{ + m_currentFocusItem = input; +} + void KeyboardController::sceneChangeEvent(const QSceneChangePtr &) { } diff --git a/src/input/keyboardcontroller_p.h b/src/input/keyboardcontroller_p.h index 15a51ba0d..92717964a 100644 --- a/src/input/keyboardcontroller_p.h +++ b/src/input/keyboardcontroller_p.h @@ -65,6 +65,9 @@ public: void addKeyboardInput(const QNodeUuid &input); void removeKeyboardInput(const QNodeUuid &input); + void setCurrentFocusItem(const QNodeUuid &input); + + inline QNodeUuid currentFocusItem() const { return m_currentFocusItem; } inline QNodeUuid lastKeyboardInputRequester() const { return m_lastRequester; } inline QVector<QNodeUuid> keyboardInputs() const { return m_keyboardInputs; } inline QVector<HKeyboardInput> keyboardInputsHandles() const { return m_keyboardInputHandles; } @@ -77,6 +80,7 @@ private: QVector<QNodeUuid> m_keyboardInputs; QVector<HKeyboardInput> m_keyboardInputHandles; QNodeUuid m_lastRequester; + QNodeUuid m_currentFocusItem; }; class KeyboardControllerFunctor : public QBackendNodeFunctor |