Merge "If the currently focused actor is hidden or disabled, it should lose focus...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / control-impl.cpp
index 271b826..9b10ffd 100644 (file)
@@ -581,7 +581,31 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper
     }
     case Actor::Property::VISIBLE:
     {
-      GetAccessibleObject()->EmitVisible(Self().GetProperty<bool>(Actor::Property::VISIBLE));
+      const bool visible = propertyValue.Get<bool>();
+      GetAccessibleObject()->EmitVisible(visible);
+      if(!visible)
+      {
+        Dali::Actor self = Self();
+        Dali::Actor actor = Dali::Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor();
+        while(actor)
+        {
+          if(self == actor)
+          {
+            Dali::Toolkit::KeyboardFocusManager::Get().ClearFocus();
+            break;
+          }
+          actor = actor.GetParent();
+        }
+      }
+      break;
+    }
+    case DevelActor::Property::USER_INTERACTION_ENABLED:
+    {
+      const bool enabled = propertyValue.Get<bool>();
+      if (!enabled && Self() == Dali::Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor())
+      {
+        Dali::Toolkit::KeyboardFocusManager::Get().ClearFocus();
+      }
       break;
     }
   }