+ DummyControl dummy1 = DummyControl::New(true);
+ DummyControlImplOverride& dummy1Impl = static_cast<DummyControlImplOverride&>(dummy1.GetImplementation());
+ dummy1.SetSize(100.0f, 100.0f);
+ stage.Add( dummy1 );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost );
+
+ DummyControl dummy2 = DummyControl::New(true);
+ DummyControlImplOverride& dummy2Impl = static_cast<DummyControlImplOverride&>(dummy2.GetImplementation());
+ dummy2.SetSize(100.0f, 100.0f);
+ stage.Add( dummy2 );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost );
+
+ DummyControl dummy3 = DummyControl::New(true);
+ DummyControlImplOverride& dummy3Impl = static_cast<DummyControlImplOverride&>(dummy3.GetImplementation());
+ dummy3.SetSize(100.0f, 100.0f);
+ stage.Add( dummy3 );
+ DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusLost );
+
+ manager.SetFocus(dummy1);
+ DALI_TEST_CHECK(dummy1 == manager.GetCurrentFocusControl());
+
+ manager.SetFocus(dummy2);
+ DALI_TEST_CHECK(dummy2 == manager.GetCurrentFocusControl());
+
+ manager.SetFocus(dummy3);
+ DALI_TEST_CHECK(dummy3 == manager.GetCurrentFocusControl());
+ dummy1Impl.keyInputFocusGained = false;
+ dummy1Impl.keyInputFocusLost = false;
+ dummy2Impl.keyInputFocusGained = false;
+ dummy2Impl.keyInputFocusLost = false;
+ dummy3Impl.keyInputFocusGained = false;
+ dummy3Impl.keyInputFocusLost = false;
+
+ manager.RemoveFocus(dummy1);
+ DALI_TEST_CHECK(dummy3 == manager.GetCurrentFocusControl());
+ DALI_TEST_CHECK( dummy1Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusGained );
+ dummy1Impl.keyInputFocusGained = false;
+ dummy1Impl.keyInputFocusLost = false;
+ dummy2Impl.keyInputFocusGained = false;
+ dummy2Impl.keyInputFocusLost = false;
+ dummy3Impl.keyInputFocusGained = false;
+ dummy3Impl.keyInputFocusLost = false;
+
+ END_TEST;
+}
+
+int UtcDaliKeyInputFocusManagerRemoveFocus03(void)
+{
+ ToolkitTestApplication application;
+ Stage stage = Stage::GetCurrent();
+
+ tet_infoline(" Add 2 focus controls. Remove each of them from the bottom up. Test that the stack is now empty. Add a new control - check that it correctly has focus" );
+
+ KeyInputFocusManager manager = KeyInputFocusManager::Get();
+ DALI_TEST_CHECK(manager);
+
+ DummyControl dummy1 = DummyControl::New(true);
+ DummyControlImplOverride& dummy1Impl = static_cast<DummyControlImplOverride&>(dummy1.GetImplementation());
+ dummy1.SetSize(100.0f, 100.0f);
+ stage.Add( dummy1 );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost );
+
+ DummyControl dummy2 = DummyControl::New(true);
+ DummyControlImplOverride& dummy2Impl = static_cast<DummyControlImplOverride&>(dummy2.GetImplementation());
+ dummy2.SetSize(100.0f, 100.0f);
+ stage.Add( dummy2 );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost );
+
+ manager.SetFocus(dummy1);
+ DALI_TEST_CHECK(dummy1 == manager.GetCurrentFocusControl());
+
+ manager.SetFocus(dummy2);
+ DALI_TEST_CHECK(dummy2 == manager.GetCurrentFocusControl());
+
+ dummy1Impl.keyInputFocusGained = false;
+ dummy1Impl.keyInputFocusLost = false;
+ dummy2Impl.keyInputFocusGained = false;
+ dummy2Impl.keyInputFocusLost = false;
+
+ manager.RemoveFocus(dummy1);
+ DALI_TEST_CHECK(dummy2 == manager.GetCurrentFocusControl());
+ DALI_TEST_CHECK( dummy1Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained );
+ dummy1Impl.keyInputFocusGained = false;
+ dummy1Impl.keyInputFocusLost = false;
+ dummy2Impl.keyInputFocusGained = false;
+ dummy2Impl.keyInputFocusLost = false;
+
+ manager.RemoveFocus(dummy2);
+ DALI_TEST_CHECK(Control() == manager.GetCurrentFocusControl());
+ DALI_TEST_CHECK( dummy2Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained );
+ dummy1Impl.keyInputFocusGained = false;
+ dummy1Impl.keyInputFocusLost = false;
+ dummy2Impl.keyInputFocusGained = false;
+ dummy2Impl.keyInputFocusLost = false;
+
+ PushButton pushButton1 = PushButton::New();
+ stage.Add( pushButton1 );
+ manager.SetFocus( pushButton1 );
+ DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost );
+ DALI_TEST_CHECK( pushButton1 == manager.GetCurrentFocusControl());
+ END_TEST;
+}
+
+int UtcDaliKeyInputFocusManagerRemoveFocus04(void)
+{
+ ToolkitTestApplication application;
+ Stage stage = Stage::GetCurrent();
+
+ tet_infoline(" Test what happens if the removed control is not on the focus stack");
+ KeyInputFocusManager manager = KeyInputFocusManager::Get();
+ DALI_TEST_CHECK(manager);
+