BridgeBase::~BridgeBase()
{
mApplication.mChildren.clear();
- mApplication.mWindows.clear();
}
void BridgeBase::AddFilteredEvent(FilteredEvents kind, Dali::Accessibility::Accessible* obj, float delay, std::function<void()> functor)
BridgeBase::ForceUpResult BridgeBase::ForceUp()
{
- if(Bridge::ForceUp() == ForceUpResult::ALREADY_UP)
+ //TODO: checking mBusName is enough? or a new variable to check bridge state?
+ if(Bridge::ForceUp() == ForceUpResult::ALREADY_UP && !GetBusName().empty())
{
return ForceUpResult::ALREADY_UP;
}
if(!addr)
{
- throw std::domain_error{std::string("failed at call '") + dbusLocators::atspi::GET_ADDRESS + "': " + addr.getError().message};
+ DALI_LOG_ERROR("failed at call '%s': %s\n", dbusLocators::atspi::GET_ADDRESS, addr.getError().message.c_str());
+ return ForceUpResult::FAILED;
}
mConnectionPtr = DBusWrapper::Installed()->eldbus_address_connection_get_impl(std::get<0>(addr));
mDbusServer = {mConnectionPtr};
{
- DBus::DBusInterfaceDescription desc{AtspiDbusInterfaceCache};
+ DBus::DBusInterfaceDescription desc{Accessible::GetInterfaceName(AtspiInterface::CACHE)};
AddFunctionToInterface(desc, "GetItems", &BridgeBase::GetItems);
mDbusServer.addInterface(AtspiDbusPathCache, desc);
}
{
- DBus::DBusInterfaceDescription desc{AtspiDbusInterfaceApplication};
+ DBus::DBusInterfaceDescription desc{Accessible::GetInterfaceName(AtspiInterface::APPLICATION)};
AddGetSetPropertyToInterface(desc, "Id", &BridgeBase::GetId, &BridgeBase::SetId);
mDbusServer.addInterface(AtspiPath, desc);
}
- mRegistry = {AtspiDbusNameRegistry, AtspiDbusPathRegistry, AtspiDbusInterfaceRegistry, mConnectionPtr};
+ mRegistry = {AtspiDbusNameRegistry, AtspiDbusPathRegistry, Accessible::GetInterfaceName(AtspiInterface::REGISTRY), mConnectionPtr};
UpdateRegisteredEvents();
}
}
-void BridgeBase::AddPopup(Accessible* object)
-{
- if(std::find(mPopups.begin(), mPopups.end(), object) != mPopups.end())
- {
- return;
- }
- mPopups.push_back(object);
- if(IsUp())
- {
- object->Emit(WindowEvent::ACTIVATE, 0);
- }
-}
-
-void BridgeBase::RemovePopup(Accessible* object)
-{
- auto it = std::find(mPopups.begin(), mPopups.end(), object);
- if(it == mPopups.end())
- {
- return;
- }
- mPopups.erase(it);
-
- if(IsUp())
- {
- object->Emit(WindowEvent::DEACTIVATE, 0);
- if(mPopups.empty())
- {
- mApplication.mChildren.back()->Emit(WindowEvent::ACTIVATE, 0);
- }
- else
- {
- mPopups.back()->Emit(WindowEvent::ACTIVATE, 0);
- }
- }
-}
-
-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)
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);
- }
+ RegisterDefaultLabel(windowAccessible);
}
void BridgeBase::RemoveTopLevelWindow(Accessible* windowAccessible)
{
- for(auto i = 0u; i < mApplication.mWindows.size(); ++i)
- {
- if(windowAccessible->GetInternalActor() == mApplication.mWindows[i].GetRootLayer())
- {
- Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(mApplication.mWindows[i]);
- 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;
- }
- }
+ UnregisterDefaultLabel(windowAccessible);
for(auto i = 0u; i < mApplication.mChildren.size(); ++i)
{
}
}
+void BridgeBase::RegisterDefaultLabel(Accessible* object)
+{
+ if(std::find(mDefaultLabels.begin(), mDefaultLabels.end(), object) == mDefaultLabels.end())
+ {
+ mDefaultLabels.push_back(object);
+ }
+}
+
+void BridgeBase::UnregisterDefaultLabel(Accessible* object)
+{
+ auto it = std::find(mDefaultLabels.begin(), mDefaultLabels.end(), object);
+ if(it != mDefaultLabels.end())
+ {
+ mDefaultLabels.erase(it);
+ }
+}
+
std::string BridgeBase::StripPrefix(const std::string& path)
{
auto size = strlen(AtspiPath);
return &mApplication;
}
- void* accessible;
+ void* accessible;
std::istringstream tmp{path};
if(!(tmp >> accessible))
{
}
auto it = mData->mKnownObjects.find(static_cast<Accessible*>(accessible));
- if(it == mData->mKnownObjects.end())
+ if(it == mData->mKnownObjects.end() || (*it)->IsHidden())
{
throw std::domain_error{"unknown object '" + path + "'"};
}
return Find(ptr.GetPath());
}
-Accessible* BridgeBase::FindSelf() const
+Accessible* BridgeBase::FindCurrentObject() const
{
- auto path = DBus::DBusServer::getCurrentObjectPath();
+ auto path = DBus::DBusServer::getCurrentObjectPath();
auto size = strlen(AtspiPath);
if(path.size() <= size)
{
root->GetAddress(),
parent ? parent->GetAddress() : Address{},
children,
- item->GetInterfaces(),
+ item->GetInterfacesAsStrings(),
item->GetName(),
item->GetRole(),
item->GetDescription(),