libaurum: extract methods into Utils class
authorWonki Kim <wonki_.kim@samsung.com>
Mon, 23 Mar 2020 08:59:37 +0000 (17:59 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Mon, 23 Mar 2020 12:43:18 +0000 (21:43 +0900)
Change-Id: Ieea9356d5f5683485d342b1adeed828a3df57019

util error

Change-Id: Ie32a3ad432b0684182a9212bc63891e9cbe87660

libaurum/inc/AccessibleUtils.h [new file with mode: 0644]
libaurum/inc/AccessibleWatcher.h
libaurum/meson.build
libaurum/src/AccessibleUtils.cc [new file with mode: 0644]

diff --git a/libaurum/inc/AccessibleUtils.h b/libaurum/inc/AccessibleUtils.h
new file mode 100644 (file)
index 0000000..451ad41
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef ACCESSIBLE_UTILS_H
+#define ACCESSIBLE_UTILS_H
+
+#include <atspi/atspi.h>
+#include <gio/gio.h>
+
+#include <memory>
+#include "config.h"
+
+struct GobjDeletor {
+    void operator() (gpointer ptr) const { if (ptr) g_object_unref(ptr); }
+};
+
+struct GarrayDeletor {
+    void operator() (GArray *ptr) const { if (ptr) g_array_free(ptr, 1); }
+};
+
+template<class T> using unique_ptr_gobj = std::unique_ptr<T, GobjDeletor>;
+template<class T> using unique_ptr_garray = std::unique_ptr<T, GarrayDeletor>;
+
+template<class T>
+unique_ptr_gobj<T> make_gobj_unique(T *ptr)
+{
+    return unique_ptr_gobj<T>(ptr);
+}
+
+template<class T>
+unique_ptr_garray<T> make_garray_unique(T *ptr)
+{
+    return unique_ptr_garray<T>(ptr);
+}
+
+template<class T>
+unique_ptr_gobj<T> make_gobj_ref_unique(T *ptr)
+{
+    g_object_ref(ptr);
+    return unique_ptr_gobj<T>(ptr);
+}
+
+char *state_to_char(AtspiStateType state);
+
+#endif
\ No newline at end of file
index 7e3a3a8..42247f4 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <atspi/atspi.h>
 #include "AccessibleNode.h"
+#include "AccessibleUtils.h"
 
 #include <list>
 #include <map>
index 426a901..e5e3584 100644 (file)
@@ -11,6 +11,7 @@ libaurum_src = [
   files('src/UiSelector.cc'),
   files('src/AccessibleWatcher.cc'),
   files('src/AccessibleNode.cc'),
+  files('src/AccessibleUtils.cc'),
   files('src/Comparer.cc'),
   files('src/Until.cc'),
   files('src/Waiter.cc'),
diff --git a/libaurum/src/AccessibleUtils.cc b/libaurum/src/AccessibleUtils.cc
new file mode 100644 (file)
index 0000000..2541167
--- /dev/null
@@ -0,0 +1,118 @@
+#include "AccessibleUtils.h"
+#include "loguru.hpp"
+
+char *state_to_char(AtspiStateType state)
+{
+   switch (state) {
+   case ATSPI_STATE_INVALID:
+      return strdup("ATSPI_STATE_INVALID");
+   case ATSPI_STATE_ACTIVE:
+      return strdup("ATSPI_STATE_ACTIVE");
+   case ATSPI_STATE_ARMED:
+      return strdup("ATSPI_STATE_ARMED");
+   case ATSPI_STATE_BUSY:
+      return strdup("ATSPI_STATE_BUSY");
+   case ATSPI_STATE_CHECKED:
+      return strdup("ATSPI_STATE_CHECKED");
+   case ATSPI_STATE_COLLAPSED:
+      return strdup("ATSPI_STATE_COLLAPSED");
+   case ATSPI_STATE_DEFUNCT:
+      return strdup("ATSPI_STATE_DEFUNCT");
+   case ATSPI_STATE_EDITABLE:
+      return strdup("ATSPI_STATE_EDITABLE");
+   case ATSPI_STATE_ENABLED:
+      return strdup("ATSPI_STATE_ENABLED");
+   case ATSPI_STATE_EXPANDABLE:
+      return strdup("ATSPI_STATE_EXPANDABLE");
+   case ATSPI_STATE_EXPANDED:
+      return strdup("ATSPI_STATE_EXPANDED");
+   case ATSPI_STATE_FOCUSABLE:
+      return strdup("ATSPI_STATE_FOCUSABLE");
+   case ATSPI_STATE_FOCUSED:
+      return strdup("ATSPI_STATE_FOCUSED");
+   case ATSPI_STATE_HAS_TOOLTIP:
+      return strdup("ATSPI_STATE_HAS_TOOLTIP");
+   case ATSPI_STATE_HORIZONTAL:
+      return strdup("ATSPI_STATE_HORIZONTAL");
+   case ATSPI_STATE_ICONIFIED:
+      return strdup("ATSPI_STATE_ICONIFIED");
+   case ATSPI_STATE_MULTI_LINE:
+      return strdup("ATSPI_STATE_MULTI_LINE");
+   case ATSPI_STATE_MULTISELECTABLE:
+      return strdup("ATSPI_STATE_MULTISELECTABLE");
+   case ATSPI_STATE_OPAQUE:
+      return strdup("ATSPI_STATE_OPAQUE");
+   case ATSPI_STATE_PRESSED:
+      return strdup("ATSPI_STATE_PRESSED");
+   case ATSPI_STATE_RESIZABLE:
+      return strdup("ATSPI_STATE_RESIZABLE");
+   case ATSPI_STATE_SELECTABLE:
+      return strdup("ATSPI_STATE_SELECTABLE");
+   case ATSPI_STATE_SELECTED:
+      return strdup("ATSPI_STATE_SELECTED");
+   case ATSPI_STATE_SENSITIVE:
+      return strdup("ATSPI_STATE_SENSITIVE");
+   case ATSPI_STATE_SHOWING:
+      return strdup("ATSPI_STATE_SHOWING");
+   case ATSPI_STATE_SINGLE_LINE:
+      return strdup("ATSPI_STATE_SINGLE_LINE");
+   case ATSPI_STATE_STALE:
+      return strdup("ATSPI_STATE_STALE");
+   case ATSPI_STATE_TRANSIENT:
+      return strdup("ATSPI_STATE_TRANSIENT");
+   case ATSPI_STATE_VERTICAL:
+      return strdup("ATSPI_STATE_VERTICAL");
+   case ATSPI_STATE_VISIBLE:
+      return strdup("ATSPI_STATE_VISIBLE");
+   case ATSPI_STATE_MANAGES_DESCENDANTS:
+      return strdup("ATSPI_STATE_MANAGES_DESCENDANTS");
+   case ATSPI_STATE_INDETERMINATE:
+      return strdup("ATSPI_STATE_INDETERMINATE");
+   case ATSPI_STATE_REQUIRED:
+      return strdup("ATSPI_STATE_REQUIRED");
+   case ATSPI_STATE_TRUNCATED:
+      return strdup("ATSPI_STATE_TRUNCATED");
+   case ATSPI_STATE_ANIMATED:
+      return strdup("ATSPI_STATE_ANIMATED");
+   case ATSPI_STATE_INVALID_ENTRY:
+      return strdup("ATSPI_STATE_INVALID_ENTRY");
+   case ATSPI_STATE_SUPPORTS_AUTOCOMPLETION:
+      return strdup("ATSPI_STATE_SUPPORTS_AUTOCOMPLETION");
+   case ATSPI_STATE_SELECTABLE_TEXT:
+      return strdup("ATSPI_STATE_SELECTABLE_TEXT");
+   case ATSPI_STATE_IS_DEFAULT:
+      return strdup("ATSPI_STATE_IS_DEFAULT");
+   case ATSPI_STATE_VISITED:
+      return strdup("ATSPI_STATE_VISITED");
+   case ATSPI_STATE_CHECKABLE:
+      return strdup("ATSPI_STATE_CHECKABLE");
+   case ATSPI_STATE_HAS_POPUP:
+      return strdup("ATSPI_STATE_HAS_POPUP");
+   case ATSPI_STATE_READ_ONLY:
+      return strdup("ATSPI_STATE_READ_ONLY");
+   case ATSPI_STATE_LAST_DEFINED:
+      return strdup("ATSPI_STATE_LAST_DEFINED");
+   case ATSPI_STATE_MODAL:
+      return strdup("ATSPI_STATE_MODAL");
+   default:
+      return strdup("\0");
+   }
+}
+
+static void debug( AtspiStateSet *stateSet)
+{
+   if (!stateSet) return;
+   GArray *states = atspi_state_set_get_states(stateSet);
+   if (!states) return;
+
+   char *state_name = NULL;
+   AtspiStateType stat;
+   LOG_F(INFO, "check ss:%p s:%p, len:%d", stateSet, states, states->len);
+   for (int i = 0; states && (i < states->len); ++i) {
+      stat = g_array_index(states, AtspiStateType, i);
+      state_name = state_to_char(stat);
+      LOG_SCOPE_F(INFO, "state: %s", state_name);
+      free(state_name);
+   }
+   g_array_free(states, 1);
+}
\ No newline at end of file