X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Faccessibility%2Fbridge%2Fbridge-base.cpp;h=92c20006c7d8fc3fc9cfeca6d3b7a634dd9c4099;hb=6800654b16656f89ffd9d1e8088bbd89d0afd1fe;hp=ee1987f305ca923e67f1e9992b71f9ed840daea2;hpb=8b6d24a691bb4c9b2f757d30b9575da7dbc547a9;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/accessibility/bridge/bridge-base.cpp b/dali/internal/accessibility/bridge/bridge-base.cpp index ee1987f..92c2000 100644 --- a/dali/internal/accessibility/bridge/bridge-base.cpp +++ b/dali/internal/accessibility/bridge/bridge-base.cpp @@ -19,6 +19,7 @@ #include // EXTERNAL INCLUDES +#include #include #include #include @@ -30,12 +31,14 @@ using namespace Dali::Accessibility; static Dali::Timer tickTimer; -BridgeBase::~BridgeBase() +BridgeBase::BridgeBase() { } -BridgeBase::BridgeBase() +BridgeBase::~BridgeBase() { + mApplication.mChildren.clear(); + mApplication.mWindows.clear(); } void BridgeBase::AddFilteredEvent(FilteredEvents kind, Dali::Accessibility::Accessible* obj, float delay, std::function functor) @@ -217,17 +220,75 @@ void BridgeBase::RemovePopup(Accessible* object) } } -void BridgeBase::AddTopLevelWindow(Accessible* root) +void BridgeBase::OnWindowVisibilityChanged(Dali::Window window, bool visible) +{ + if(visible) + { + // TODO : Should we check 'out of screen' here? -> Then, we need an actor of this change. + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(window); // Called when Window is shown. + } + else + { + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(window); // Called when Window is hidden and iconified. + } + +} + +void BridgeBase::OnWindowFocusChanged(Dali::Window window, bool focusIn) +{ + if(focusIn) + { + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowFocused(window); // Called when Window is focused. + } + else + { + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowUnfocused(window); // Called when Window is out of focus. + } +} + +void BridgeBase::AddTopLevelWindow(Accessible* windowAccessible) { - mApplication.mChildren.push_back(root); - SetIsOnRootLevel(root); + if(windowAccessible->GetInternalActor() == nullptr) + { + return; + } + + // Prevent adding the default window twice. + if(!mApplication.mChildren.empty() && + mApplication.mChildren[0]->GetInternalActor() == windowAccessible->GetInternalActor()) + { + return; + } + + // Adds Window to a list of Windows. + mApplication.mChildren.push_back(windowAccessible); + SetIsOnRootLevel(windowAccessible); + + Dali::Window window = Dali::DevelWindow::Get(windowAccessible->GetInternalActor()); + if(window) + { + mApplication.mWindows.push_back(window); + Dali::DevelWindow::VisibilityChangedSignal(window).Connect(this, &BridgeBase::OnWindowVisibilityChanged); + window.FocusChangeSignal().Connect(this, &BridgeBase::OnWindowFocusChanged); + } } -void BridgeBase::RemoveTopLevelWindow(Accessible* root) +void BridgeBase::RemoveTopLevelWindow(Accessible* windowAccessible) { + for(auto i = 0u; i < mApplication.mWindows.size(); ++i) + { + if(windowAccessible->GetInternalActor() == mApplication.mWindows[i].GetRootLayer()) + { + Dali::DevelWindow::VisibilityChangedSignal(mApplication.mWindows[i]).Disconnect(this, &BridgeBase::OnWindowVisibilityChanged); + mApplication.mWindows[i].FocusChangeSignal().Disconnect(this, &BridgeBase::OnWindowFocusChanged); + mApplication.mWindows.erase(mApplication.mWindows.begin() + i); + break; + } + } + for(auto i = 0u; i < mApplication.mChildren.size(); ++i) { - if(mApplication.mChildren[i] == root) + if(mApplication.mChildren[i] == windowAccessible) { mApplication.mChildren.erase(mApplication.mChildren.begin() + i); break;