Allows you to specify the root when calculating the focus movement algorithm.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / focus-manager / keyinput-focus-manager-impl.cpp
index ad87ac3..ebdb214 100644 (file)
@@ -26,6 +26,9 @@
 #include <dali/public-api/actors/layer.h>
 #include <cstring> // for strcmp
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/controls/control-devel.h>
+
 namespace Dali
 {
 namespace Toolkit
@@ -130,6 +133,18 @@ bool KeyInputFocusManager::OnKeyEvent(const KeyEvent& event)
   Toolkit::Control control = GetCurrentFocusControl();
   if(control)
   {
+    Dali::Actor dispatch = control;
+    while(dispatch)
+    {
+      // If the DISPATCH_KEY_EVENTS is false, it cannot emit key event.
+      Toolkit::Control dispatchControl = Toolkit::Control::DownCast(dispatch);
+      if(dispatchControl && !dispatchControl.GetProperty<bool>(Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS))
+      {
+        return true;
+      }
+      dispatch = dispatch.GetParent();
+    }
+
     // Notify the control about the key event
     consumed = EmitKeyEventSignal(control, event);
   }