#ifndef __DALI_TOOLKIT_INTERNAL_KEYINPUT_FOCUS_MANAGER_H__
#define __DALI_TOOLKIT_INTERNAL_KEYINPUT_FOCUS_MANAGER_H__
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
// EXTERNAL INCLUDES
#include <string>
-#include <deque>
+#include <dali/public-api/object/base-object.h>
+#include <dali/public-api/object/object-registry.h>
// INTERNAL INCLUDES
-#include <dali/dali.h>
-#include <dali-toolkit/public-api/focus-manager/keyinput-focus-manager.h>
+#include <dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.h>
#include <dali-toolkit/public-api/controls/control.h>
namespace Dali
/**
* @copydoc Toolkit::KeyInputFocusManager
*/
-class KeyInputFocusManager : public Dali::BaseObject
+class KeyInputFocusManager : public Dali::BaseObject, public Dali::ConnectionTracker
{
public:
-
- typedef std::deque< unsigned int > ActorQueue;
- typedef std::deque< unsigned int >::iterator ActorQueueIterator;
- typedef std::deque< unsigned int >::const_iterator ActorQueueConstIterator;
-
/**
* Construct a new KeyInputFocusManager.
*/
void SetFocus(Toolkit::Control control);
/**
- * @copydoc Toolkit::GetCurrentFocusControl
- */
- Toolkit::Control GetCurrentFocusControl() const;
-
- /**
* @copydoc Toolkit::RemoveFocus
*/
void RemoveFocus(Toolkit::Control control);
/**
- * @copydoc Toolkit::IsKeyboardListener
+ * @copydoc Toolkit::GetCurrentFocusControl
*/
- bool IsKeyboardListener(Toolkit::Control control) const;
+ Toolkit::Control GetCurrentFocusControl() const;
public:
/**
* @copydoc Toolkit::KeyInputFocusManager::KeyInputFocusChangedSignal()
*/
- Toolkit::KeyInputFocusManager::KeyInputFocusChangedSignalV2& KeyInputFocusChangedSignal();
-
- /**
- * @copydoc Toolkit::KeyInputFocusManager::UnhandledKeyEventSignal()
- */
- Toolkit::KeyInputFocusManager::UnhandledKeyEventSignalV2& UnhandledKeyEventSignal();
+ Toolkit::KeyInputFocusManager::KeyInputFocusChangedSignalType& KeyInputFocusChangedSignal();
/**
* Connects a callback function with the object's signals.
* Callback for the key event when no actor in the stage has gained the key input focus
* @param[in] event The KeyEvent event.
*/
- void OnKeyEvent(const KeyEvent& event);
+ bool OnKeyEvent(const KeyEvent& event);
/**
- * Signal handler called when a focused Actor is removed from Stage.
- * @param[in] actor The actor removed from stage.
+ * Signal handler called when a focused Control is removed from Stage.
+ * @param[in] control The control removed from stage.
*/
- void OnFocusActorStageDisconnection( Dali::Actor actor );
+ void OnFocusControlStageDisconnection( Dali::Actor control );
+
+ /**
+ * Recursively deliver events to the control and its parents, until the event is consumed or the stage is reached.
+ * @param[in] control The control got KeyEvent.
+ * @param[in] event The KeyEvent.
+ * @return True if KeyEvent is consumed.
+ */
+ bool EmitKeyEventSignal( Toolkit::Control control, const KeyEvent& event );
private:
private:
// The key input focus change signal
- Toolkit::KeyInputFocusManager::KeyInputFocusChangedSignalV2 mKeyInputFocusChangedSignalV2;
-
- // The un-handled key event signal
- Toolkit::KeyInputFocusManager::UnhandledKeyEventSignalV2 mUnhandledKeyEventSignalV2;
-
- // Keyboard events are sent to the current focus actor, which will be the actor on the top of the focus actors stack.
- ActorQueue mFocusActorsQueue;
+ Toolkit::KeyInputFocusManager::KeyInputFocusChangedSignalType mKeyInputFocusChangedSignal;
SlotDelegate< KeyInputFocusManager > mSlotDelegate;
+
+ Toolkit::Control mCurrentFocusControl; ///< The current focused control
};
} // namespace Internal