There is not a reason to keep window in ApplicationAccessible to emit
window related signals.
Moreover, keeping window increases the reference count.
In multi window case, Window.Reset() for the second window
cannot make ~Window() is called because of the reference count is not 0.
Change-Id: I13f636b12c62a29dc976602446b5dc13f2b521cb
BridgeBase::~BridgeBase()
{
mApplication.mChildren.clear();
BridgeBase::~BridgeBase()
{
mApplication.mChildren.clear();
- mApplication.mWindows.clear();
}
void BridgeBase::AddFilteredEvent(FilteredEvents kind, Dali::Accessibility::Accessible* obj, float delay, std::function<void()> functor)
}
void BridgeBase::AddFilteredEvent(FilteredEvents kind, Dali::Accessibility::Accessible* obj, float delay, std::function<void()> functor)
-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)
{
if(windowAccessible->GetInternalActor() == nullptr)
void BridgeBase::AddTopLevelWindow(Accessible* windowAccessible)
{
if(windowAccessible->GetInternalActor() == nullptr)
// Adds Window to a list of Windows.
mApplication.mChildren.push_back(windowAccessible);
SetIsOnRootLevel(windowAccessible);
// 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* windowAccessible)
{
}
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] == windowAccessible)
for(auto i = 0u; i < mApplication.mChildren.size(); ++i)
{
if(mApplication.mChildren[i] == windowAccessible)
public:
Dali::Accessibility::EmptyAccessibleWithAddress mParent;
std::vector<Dali::Accessibility::Accessible*> mChildren;
public:
Dali::Accessibility::EmptyAccessibleWithAddress mParent;
std::vector<Dali::Accessibility::Accessible*> mChildren;
- std::vector<Dali::Window> mWindows;
std::string mName;
std::string GetName() override
std::string mName;
std::string GetName() override
mDirectReadingClient = {};
mDirectReadingCallbacks.clear();
mApplication.mChildren.clear();
mDirectReadingClient = {};
mDirectReadingCallbacks.clear();
mApplication.mChildren.clear();
- mApplication.mWindows.clear();
- if(mIsShown)
- {
- auto rootLayer = Dali::Stage::GetCurrent().GetRootLayer();
- auto window = Dali::DevelWindow::Get(rootLayer);
- EmitActivate(window); // Currently, sends a signal that the default window is activated here.
- }
-
return ForceUpResult::JUST_STARTED;
}
return ForceUpResult::JUST_STARTED;
}
mIconified(false),
mOpaqueState(false),
mWindowRotationAcknowledgement(false),
mIconified(false),
mOpaqueState(false),
mWindowRotationAcknowledgement(false),
mParentWindow(NULL),
mPreferredAngle(static_cast<int>(WindowOrientation::NO_ORIENTATION_PREFERENCE)),
mRotationAngle(0),
mParentWindow(NULL),
mPreferredAngle(static_cast<int>(WindowOrientation::NO_ORIENTATION_PREFERENCE)),
mRotationAngle(0),
- auto bridge = Accessibility::Bridge::GetCurrentBridge();
- auto rootLayer = mScene.GetRootLayer();
- auto accessible = Accessibility::Accessible::Get(rootLayer, true);
- bridge->RemoveTopLevelWindow(accessible);
+ if(mScene)
+ {
+ auto bridge = Accessibility::Bridge::GetCurrentBridge();
+ auto rootLayer = mScene.GetRootLayer();
+ auto accessible = Accessibility::Accessible::Get(rootLayer, true);
+ bridge->RemoveTopLevelWindow(accessible);
+ }
mEventHandler->AddObserver(*this);
// Add Window to bridge for ATSPI
mEventHandler->AddObserver(*this);
// Add Window to bridge for ATSPI
- auto bridge = Accessibility::Bridge::GetCurrentBridge();
- auto rootLayer = mScene.GetRootLayer();
- auto accessible = Accessibility::Accessible::Get(rootLayer, true);
- bridge->AddTopLevelWindow(accessible);
+ auto bridge = Accessibility::Bridge::GetCurrentBridge();
+ if (bridge->IsUp())
+ {
+ auto rootLayer = mScene.GetRootLayer();
+ auto accessible = Accessibility::Accessible::Get(rootLayer, true);
+ bridge->AddTopLevelWindow(accessible);
+ }
bridge->EnabledSignal().Connect(this, &Window::OnAccessibilityEnabled);
bridge->DisabledSignal().Connect(this, &Window::OnAccessibilityDisabled);
bridge->EnabledSignal().Connect(this, &Window::OnAccessibilityEnabled);
bridge->DisabledSignal().Connect(this, &Window::OnAccessibilityDisabled);
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, true);
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, true);
+ Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowShown();
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowShown();
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, false);
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, false);
+ Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowHidden();
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowHidden();
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, false);
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, false);
+ Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowHidden();
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowHidden();
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, true);
{
Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, true);
+ Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowShown();
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowShown();
bridge->WindowUnfocused(handle);
}
}
bridge->WindowUnfocused(handle);
}
}
}
void Window::OnOutputTransformed()
}
void Window::OnOutputTransformed()
auto rootLayer = mScene.GetRootLayer();
auto accessible = Accessibility::Accessible::Get(rootLayer, true);
bridge->AddTopLevelWindow(accessible);
auto rootLayer = mScene.GetRootLayer();
auto accessible = Accessibility::Accessible::Get(rootLayer, true);
bridge->AddTopLevelWindow(accessible);
+
+ if(mFocused)
+ {
+ Dali::Window handle(this);
+ bridge->WindowFocused(handle);
+ }
}
void Window::OnAccessibilityDisabled()
}
void Window::OnAccessibilityDisabled()
bool mIconified : 1;
bool mOpaqueState : 1;
bool mWindowRotationAcknowledgement : 1;
bool mIconified : 1;
bool mOpaqueState : 1;
bool mWindowRotationAcknowledgement : 1;
Dali::Window mParentWindow;
OrientationPtr mOrientation;
Dali::Window mParentWindow;
OrientationPtr mOrientation;