summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire.ecortex@kdab.com>2014-11-13 07:43:42 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-11-14 20:29:59 +0100
commitf7cfeb0cc5b7ee85b3768515ff6844a3e6204815 (patch)
tree9f636ea03b222092634278b60d9304d5f11a8e3e
parent11bb5d034285f35aad75e1838973bdac70cedad1 (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.cpp16
-rw-r--r--src/input/keyboardcontroller.cpp5
-rw-r--r--src/input/keyboardcontroller_p.h4
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