From 9d69a1a11c738f740cac57fa493e9ba3a7c4041b Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 12 Nov 2014 12:55:42 +0100 Subject: KeyboardController: vector of KeyboardInputs and last requester saved Contains a vector of QNodeUuid and a vector of HKeyboardInput containing references to KeyboardInput that are managed by the controller. Saves the id of the last KeyboardInput requesting focus, this will be the one to have focus next frame. Change-Id: I15bca4f445c9bed79cb270ef65fddd73002518f9 Reviewed-by: Sean Harmer --- src/input/keyboardcontroller.cpp | 23 ++++++++++++++++++++++- src/input/keyboardcontroller_p.h | 14 +++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) (limited to 'src/input') diff --git a/src/input/keyboardcontroller.cpp b/src/input/keyboardcontroller.cpp index a4ead52bc..c629ce290 100644 --- a/src/input/keyboardcontroller.cpp +++ b/src/input/keyboardcontroller.cpp @@ -54,6 +54,7 @@ namespace Input { KeyboardController::KeyboardController() : QBackendNode(QBackendNode::ReadWrite) + , m_inputHandler(Q_NULLPTR) { } @@ -63,10 +64,29 @@ void KeyboardController::updateFromPeer(QNode *) void KeyboardController::requestFocusForInput(const QNodeUuid &inputId) { - Q_UNUSED(inputId); // Saves the last inputId, this will then be used in an Aspect Job to determine which // input will have the focus. This in turn will call KeyboardInput::setFocus which will // decide if sending a notification to the frontend is necessary + m_lastRequester = inputId; +} + +void KeyboardController::setInputHandler(InputHandler *handler) +{ + m_inputHandler = handler; +} + +void KeyboardController::addKeyboardInput(const QNodeUuid &input) +{ + if (!m_keyboardInputs.contains(input)) { + m_keyboardInputs.append(input); + m_keyboardInputHandles.append(m_inputHandler->keyboardInputManager()->lookupHandle(input)); + } +} + +void KeyboardController::removeKeyboardInput(const QNodeUuid &input) +{ + m_keyboardInputs.removeAll(input); + m_keyboardInputHandles.removeAll(m_inputHandler->keyboardInputManager()->lookupHandle(input)); } void KeyboardController::sceneChangeEvent(const QSceneChangePtr &) @@ -81,6 +101,7 @@ KeyboardControllerFunctor::KeyboardControllerFunctor(InputHandler *handler) QBackendNode *KeyboardControllerFunctor::create(QNode *frontend) const { KeyboardController *controller = m_handler->keyboardControllerManager()->getOrCreateResource(frontend->uuid()); + controller->setInputHandler(m_handler); controller->setPeer(frontend); return controller; } diff --git a/src/input/keyboardcontroller_p.h b/src/input/keyboardcontroller_p.h index 513d323f3..15a51ba0d 100644 --- a/src/input/keyboardcontroller_p.h +++ b/src/input/keyboardcontroller_p.h @@ -44,6 +44,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -59,12 +60,23 @@ public: KeyboardController(); void updateFromPeer(QNode *peer) Q_DECL_OVERRIDE; void requestFocusForInput(const QNodeUuid &inputId); + void setInputHandler(InputHandler *handler); + + void addKeyboardInput(const QNodeUuid &input); + void removeKeyboardInput(const QNodeUuid &input); + + inline QNodeUuid lastKeyboardInputRequester() const { return m_lastRequester; } + inline QVector keyboardInputs() const { return m_keyboardInputs; } + inline QVector keyboardInputsHandles() const { return m_keyboardInputHandles; } protected: void sceneChangeEvent(const QSceneChangePtr &) Q_DECL_OVERRIDE; private: - QList m_keyboardObserver; + InputHandler *m_inputHandler; + QVector m_keyboardInputs; + QVector m_keyboardInputHandles; + QNodeUuid m_lastRequester; }; class KeyboardControllerFunctor : public QBackendNodeFunctor -- cgit v1.2.3