From 226a1cf0f55c54ade4185f49f0b866f6e7b153b8 Mon Sep 17 00:00:00 2001 From: Woochan Lee Date: Fri, 17 Mar 2023 09:34:48 +0900 Subject: [PATCH] libaurum: Changes the dbus API for get application list We called too many dbus method for gets application list. This commit to improve it. Change-Id: If16ece1e4965fd569f4857f971fc8704e3b4a459 --- .../inc/Impl/Accessibility/AtspiWrapper.h | 1 + .../Accessibility/AtspiAccessibleWatcher.cc | 21 ++++++++++--------- .../src/Impl/Accessibility/AtspiWrapper.cc | 6 ++++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/libaurum/inc/Impl/Accessibility/AtspiWrapper.h b/libaurum/inc/Impl/Accessibility/AtspiWrapper.h index 1cdd2a8..6f3ebeb 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiWrapper.h +++ b/libaurum/inc/Impl/Accessibility/AtspiWrapper.h @@ -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); diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc index 358b191..1f1ef65 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc @@ -361,19 +361,20 @@ std::vector> AtspiAccessibleWatcher::getA { std::vector> 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(std::make_shared(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(std::make_shared(child))); + } } + g_array_free(children, true); } g_object_unref(root); + return ret; } diff --git a/libaurum/src/Impl/Accessibility/AtspiWrapper.cc b/libaurum/src/Impl/Accessibility/AtspiWrapper.cc index 02fa126..e9b8228 100644 --- a/libaurum/src/Impl/Accessibility/AtspiWrapper.cc +++ b/libaurum/src/Impl/Accessibility/AtspiWrapper.cc @@ -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 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 lock(mMutex); -- 2.34.1