From 7ca13fe630624ad26842f6f0518faffa594d6aa4 Mon Sep 17 00:00:00 2001 From: Wonki Kim Date: Mon, 23 Mar 2020 17:59:37 +0900 Subject: [PATCH] libaurum: extract methods into Utils class Change-Id: Ieea9356d5f5683485d342b1adeed828a3df57019 util error Change-Id: Ie32a3ad432b0684182a9212bc63891e9cbe87660 --- libaurum/inc/AccessibleUtils.h | 42 ++++++++++++++ libaurum/inc/AccessibleWatcher.h | 1 + libaurum/meson.build | 1 + libaurum/src/AccessibleUtils.cc | 118 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+) create mode 100644 libaurum/inc/AccessibleUtils.h create mode 100644 libaurum/src/AccessibleUtils.cc diff --git a/libaurum/inc/AccessibleUtils.h b/libaurum/inc/AccessibleUtils.h new file mode 100644 index 0000000..451ad41 --- /dev/null +++ b/libaurum/inc/AccessibleUtils.h @@ -0,0 +1,42 @@ +#ifndef ACCESSIBLE_UTILS_H +#define ACCESSIBLE_UTILS_H + +#include +#include + +#include +#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 using unique_ptr_gobj = std::unique_ptr; +template using unique_ptr_garray = std::unique_ptr; + +template +unique_ptr_gobj make_gobj_unique(T *ptr) +{ + return unique_ptr_gobj(ptr); +} + +template +unique_ptr_garray make_garray_unique(T *ptr) +{ + return unique_ptr_garray(ptr); +} + +template +unique_ptr_gobj make_gobj_ref_unique(T *ptr) +{ + g_object_ref(ptr); + return unique_ptr_gobj(ptr); +} + +char *state_to_char(AtspiStateType state); + +#endif \ No newline at end of file diff --git a/libaurum/inc/AccessibleWatcher.h b/libaurum/inc/AccessibleWatcher.h index 7e3a3a8..42247f4 100644 --- a/libaurum/inc/AccessibleWatcher.h +++ b/libaurum/inc/AccessibleWatcher.h @@ -3,6 +3,7 @@ #include #include "AccessibleNode.h" +#include "AccessibleUtils.h" #include #include diff --git a/libaurum/meson.build b/libaurum/meson.build index 426a901..e5e3584 100644 --- a/libaurum/meson.build +++ b/libaurum/meson.build @@ -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 index 0000000..2541167 --- /dev/null +++ b/libaurum/src/AccessibleUtils.cc @@ -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 -- 2.7.4