We called too many dbus method for gets application list.
This commit to improve it.
Change-Id: If16ece1e4965fd569f4857f971fc8704e3b4a459
static gchar *Atspi_accessible_get_name(AtspiAccessible *node, GError **error);
static AtspiAccessible *Atspi_get_desktop(int n);
static int Atspi_accessible_get_child_count(AtspiAccessible *node, GError **error);
+ static GArray *Atspi_accessible_get_children(AtspiAccessible *node, GError **error);
static AtspiAccessible *Atspi_accessible_get_child_at_index(AtspiAccessible *node, int index, GError **error);
static AtspiAccessible *Atspi_accessible_get_parent(AtspiAccessible *node, GError **error);
static AtspiStateSet *Atspi_accessible_get_state_set(AtspiAccessible *node);
{
std::vector<std::shared_ptr<AccessibleApplication>> ret{};
AtspiAccessible *root = AtspiWrapper::Atspi_get_desktop(0);
- int nchild = AtspiWrapper::Atspi_accessible_get_child_count(root, NULL);
- if (nchild <= 0) {
- g_object_unref(root);
- return ret;
- }
-
- for (int i = 0; i < nchild; i++){
- AtspiAccessible *child = AtspiWrapper::Atspi_accessible_get_child_at_index(root, i, NULL);
- if (child) {
- ret.push_back(std::make_shared<AtspiAccessibleApplication>(std::make_shared<AtspiAccessibleNode>(child)));
+ GArray *children = AtspiWrapper::Atspi_accessible_get_children(root, NULL);
+ if (children) {
+ ret.reserve(children->len);
+ AtspiAccessible *child = nullptr;
+ for (unsigned int i = 0; i < children->len; i++) {
+ child = g_array_index(children, AtspiAccessible *, i);
+ if (child) {
+ ret.push_back(std::make_shared<AtspiAccessibleApplication>(std::make_shared<AtspiAccessibleNode>(child)));
+ }
}
+ g_array_free(children, true);
}
g_object_unref(root);
+
return ret;
}
return atspi_accessible_get_child_count(node, error);
}
+GArray *AtspiWrapper::Atspi_accessible_get_children(AtspiAccessible *node, GError **error)
+{
+ std::unique_lock<std::recursive_mutex> lock(mMutex);
+ return atspi_accessible_get_children(node, error);
+}
+
AtspiAccessible *AtspiWrapper::Atspi_accessible_get_child_at_index(AtspiAccessible *node, int index, GError **error)
{
std::unique_lock<std::recursive_mutex> lock(mMutex);