libaurum: Changes the dbus API for get application list 89/289989/2
authorWoochan Lee <wc0917.lee@samsung.com>
Fri, 17 Mar 2023 00:34:48 +0000 (09:34 +0900)
committerwoochan lee <wc0917.lee@samsung.com>
Mon, 20 Mar 2023 10:33:58 +0000 (10:33 +0000)
We called too many dbus method for gets application list.
This commit to improve it.

Change-Id: If16ece1e4965fd569f4857f971fc8704e3b4a459

libaurum/inc/Impl/Accessibility/AtspiWrapper.h
libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc
libaurum/src/Impl/Accessibility/AtspiWrapper.cc

index 1cdd2a8..6f3ebeb 100644 (file)
@@ -40,6 +40,7 @@ public:
     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);
index 358b191..1f1ef65 100644 (file)
@@ -361,19 +361,20 @@ std::vector<std::shared_ptr<AccessibleApplication>> AtspiAccessibleWatcher::getA
 {
     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;
 }
 
index 02fa126..e9b8228 100644 (file)
@@ -51,6 +51,12 @@ int AtspiWrapper::Atspi_accessible_get_child_count(AtspiAccessible *node, GError
     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);