projects
/
platform
/
core
/
uifw
/
dali-adaptor.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[AT-SPI] do not keep window in ApplicationAccessible
[platform/core/uifw/dali-adaptor.git]
/
dali
/
internal
/
accessibility
/
bridge
/
bridge-base.cpp
diff --git
a/dali/internal/accessibility/bridge/bridge-base.cpp
b/dali/internal/accessibility/bridge/bridge-base.cpp
index
ee1987f
..
9b920d8
100644
(file)
--- a/
dali/internal/accessibility/bridge/bridge-base.cpp
+++ b/
dali/internal/accessibility/bridge/bridge-base.cpp
@@
-19,6
+19,7
@@
#include <dali/internal/accessibility/bridge/bridge-base.h>
// EXTERNAL INCLUDES
#include <dali/internal/accessibility/bridge/bridge-base.h>
// EXTERNAL INCLUDES
+#include <dali/devel-api/common/stage.h>
#include <atomic>
#include <cstdlib>
#include <memory>
#include <atomic>
#include <cstdlib>
#include <memory>
@@
-30,12
+31,13
@@
using namespace Dali::Accessibility;
static Dali::Timer tickTimer;
static Dali::Timer tickTimer;
-BridgeBase::
~
BridgeBase()
+BridgeBase::BridgeBase()
{
}
{
}
-BridgeBase::BridgeBase()
+BridgeBase::
~
BridgeBase()
{
{
+ mApplication.mChildren.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)
@@
-113,7
+115,8
@@
void BridgeBase::UpdateRegisteredEvents()
BridgeBase::ForceUpResult BridgeBase::ForceUp()
{
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;
}
{
return ForceUpResult::ALREADY_UP;
}
@@
-122,7
+125,8
@@
BridgeBase::ForceUpResult BridgeBase::ForceUp()
if(!addr)
{
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));
}
mConnectionPtr = DBusWrapper::Installed()->eldbus_address_connection_get_impl(std::get<0>(addr));
@@
-130,17
+134,17
@@
BridgeBase::ForceUpResult BridgeBase::ForceUp()
mDbusServer = {mConnectionPtr};
{
mDbusServer = {mConnectionPtr};
{
- DBus::DBusInterfaceDescription desc{A
tspiDbusInterfaceCache
};
+ DBus::DBusInterfaceDescription desc{A
ccessible::GetInterfaceName(AtspiInterface::CACHE)
};
AddFunctionToInterface(desc, "GetItems", &BridgeBase::GetItems);
mDbusServer.addInterface(AtspiDbusPathCache, desc);
}
{
AddFunctionToInterface(desc, "GetItems", &BridgeBase::GetItems);
mDbusServer.addInterface(AtspiDbusPathCache, desc);
}
{
- DBus::DBusInterfaceDescription desc{A
tspiDbusInterfaceApplication
};
+ DBus::DBusInterfaceDescription desc{A
ccessible::GetInterfaceName(AtspiInterface::APPLICATION)
};
AddGetSetPropertyToInterface(desc, "Id", &BridgeBase::GetId, &BridgeBase::SetId);
mDbusServer.addInterface(AtspiPath, desc);
}
AddGetSetPropertyToInterface(desc, "Id", &BridgeBase::GetId, &BridgeBase::SetId);
mDbusServer.addInterface(AtspiPath, desc);
}
- mRegistry = {AtspiDbusNameRegistry, AtspiDbusPathRegistry, A
tspiDbusInterfaceRegistry
, mConnectionPtr};
+ mRegistry = {AtspiDbusNameRegistry, AtspiDbusPathRegistry, A
ccessible::GetInterfaceName(AtspiInterface::REGISTRY)
, mConnectionPtr};
UpdateRegisteredEvents();
UpdateRegisteredEvents();
@@
-181,57
+185,55
@@
Accessible* BridgeBase::FindByPath(const std::string& name) const
}
}
}
}
-void BridgeBase::Add
Popup(Accessible* object
)
+void BridgeBase::Add
TopLevelWindow(Accessible* windowAccessible
)
{
{
- if(
std::find(mPopups.begin(), mPopups.end(), object) != mPopups.end()
)
+ if(
windowAccessible->GetInternalActor() == nullptr
)
{
return;
}
{
return;
}
- mPopups.push_back(object);
- if(IsUp())
+
+ // Prevent adding the default window twice.
+ if(!mApplication.mChildren.empty() &&
+ mApplication.mChildren[0]->GetInternalActor() == windowAccessible->GetInternalActor())
{
{
-
object->Emit(WindowEvent::ACTIVATE, 0)
;
+
return
;
}
}
+
+ // Adds Window to a list of Windows.
+ mApplication.mChildren.push_back(windowAccessible);
+ SetIsOnRootLevel(windowAccessible);
+
+ RegisterDefaultLabel(windowAccessible);
}
}
-void BridgeBase::Remove
Popup(Accessible* object
)
+void BridgeBase::Remove
TopLevelWindow(Accessible* windowAccessible
)
{
{
- auto it = std::find(mPopups.begin(), mPopups.end(), object);
- if(it == mPopups.end())
- {
- return;
- }
- mPopups.erase(it);
+ UnregisterDefaultLabel(windowAccessible);
-
if(IsUp()
)
+
for(auto i = 0u; i < mApplication.mChildren.size(); ++i
)
{
{
- object->Emit(WindowEvent::DEACTIVATE, 0);
- if(mPopups.empty())
+ if(mApplication.mChildren[i] == windowAccessible)
{
{
- mApplication.mChildren.back()->Emit(WindowEvent::ACTIVATE, 0);
- }
- else
- {
- mPopups.back()->Emit(WindowEvent::ACTIVATE, 0);
+ mApplication.mChildren.erase(mApplication.mChildren.begin() + i);
+ break;
}
}
}
}
}
}
-void BridgeBase::
AddTopLevelWindow(Accessible* roo
t)
+void BridgeBase::
RegisterDefaultLabel(Accessible* objec
t)
{
{
- mApplication.mChildren.push_back(root);
- SetIsOnRootLevel(root);
+ if(std::find(mDefaultLabels.begin(), mDefaultLabels.end(), object) == mDefaultLabels.end())
+ {
+ mDefaultLabels.push_back(object);
+ }
}
}
-void BridgeBase::
RemoveTopLevelWindow(Accessible* roo
t)
+void BridgeBase::
UnregisterDefaultLabel(Accessible* objec
t)
{
{
- for(auto i = 0u; i < mApplication.mChildren.size(); ++i)
+ auto it = std::find(mDefaultLabels.begin(), mDefaultLabels.end(), object);
+ if(it != mDefaultLabels.end())
{
{
- if(mApplication.mChildren[i] == root)
- {
- mApplication.mChildren.erase(mApplication.mChildren.begin() + i);
- break;
- }
+ mDefaultLabels.erase(it);
}
}
}
}
@@
-248,7
+250,7
@@
Accessible* BridgeBase::Find(const std::string& path) const
return &mApplication;
}
return &mApplication;
}
- void* accessible;
+ void*
accessible;
std::istringstream tmp{path};
if(!(tmp >> accessible))
{
std::istringstream tmp{path};
if(!(tmp >> accessible))
{
@@
-256,7
+258,7
@@
Accessible* BridgeBase::Find(const std::string& path) const
}
auto it = mData->mKnownObjects.find(static_cast<Accessible*>(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 + "'"};
}
{
throw std::domain_error{"unknown object '" + path + "'"};
}
@@
-270,9
+272,9
@@
Accessible* BridgeBase::Find(const Address& ptr) const
return Find(ptr.GetPath());
}
return Find(ptr.GetPath());
}
-Accessible* BridgeBase::Find
Self
() const
+Accessible* BridgeBase::Find
CurrentObject
() const
{
{
- auto path
= DBus::DBusServer::getCurrentObjectPath();
+ auto path = DBus::DBusServer::getCurrentObjectPath();
auto size = strlen(AtspiPath);
if(path.size() <= size)
{
auto size = strlen(AtspiPath);
if(path.size() <= size)
{
@@
-338,7
+340,7
@@
auto BridgeBase::CreateCacheElement(Accessible* item) -> CacheElementType
root->GetAddress(),
parent ? parent->GetAddress() : Address{},
children,
root->GetAddress(),
parent ? parent->GetAddress() : Address{},
children,
- item->GetInterfaces(),
+ item->GetInterfaces
AsStrings
(),
item->GetName(),
item->GetRole(),
item->GetDescription(),
item->GetName(),
item->GetRole(),
item->GetDescription(),