summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2022-06-17 15:51:21 -0500
committerMike Gorse <mgorse@suse.com>2022-06-17 15:51:21 -0500
commit0944cff6d17e7b3e7b9c687f02c84f0e8c8d63a4 (patch)
treeda269787d7368c855f15d4aeb9b69f4f3062b352
parenta2f6acc4cc02ff5e0f39cda5e56045c93f82f0be (diff)
downloadat-spi2-core-0944cff6d17e7b3e7b9c687f02c84f0e8c8d63a4.tar.gz
Add a Text property to AtspiValue
This allows an application to expose a textual representation of the value. A similar API was added to atk a few years ago, but it was never exposed via AT-SPI. See https://bugzilla.gnome.org/show_bug.cgi?id=684576
-rw-r--r--atk-adaptor/adaptors/value-adaptor.c23
-rw-r--r--atspi/atspi-value.c23
-rw-r--r--atspi/atspi-value.h1
-rw-r--r--doc/libatspi/libatspi-sections.txt1
-rw-r--r--tests/at-spi2-atk/atk_test_value.c15
-rw-r--r--xml/Value.xml2
6 files changed, 65 insertions, 0 deletions
diff --git a/atk-adaptor/adaptors/value-adaptor.c b/atk-adaptor/adaptors/value-adaptor.c
index 7166d3b3..55f6ba49 100644
--- a/atk-adaptor/adaptors/value-adaptor.c
+++ b/atk-adaptor/adaptors/value-adaptor.c
@@ -227,6 +227,28 @@ impl_SetCurrentValue (DBusConnection * bus, DBusMessage * message,
return reply;
}
+static dbus_bool_t
+impl_get_Text (DBusMessageIter * iter, void *user_data)
+{
+ AtkValue *value = (AtkValue *) user_data;
+ gdouble dub;
+ gchar *text = NULL;
+ dbus_bool_t ret;
+
+ g_return_val_if_fail (ATK_IS_VALUE (user_data), FALSE);
+
+ AtkValueIface *iface = ATK_VALUE_GET_IFACE (value);
+ if (iface->get_value_and_text)
+ {
+ atk_value_get_value_and_text (value, &dub, &text);
+ ret = droute_return_v_string (iter, text);
+ g_free (text);
+ return ret;
+ }
+
+ return droute_return_v_string (iter, "");
+}
+
static DRouteMethod methods[] = {
{impl_SetCurrentValue, "SetCurrentValue"},
{NULL, NULL}
@@ -237,6 +259,7 @@ static DRouteProperty properties[] = {
{impl_get_MaximumValue, NULL, "MaximumValue"},
{impl_get_MinimumIncrement, NULL, "MinimumIncrement"},
{impl_get_CurrentValue, impl_set_CurrentValue, "CurrentValue"},
+ {impl_get_Text, NULL, "Text"},
{NULL, NULL, NULL}
};
diff --git a/atspi/atspi-value.c b/atspi/atspi-value.c
index 28acade9..6317fc8c 100644
--- a/atspi/atspi-value.c
+++ b/atspi/atspi-value.c
@@ -152,6 +152,28 @@ atspi_value_get_minimum_increment (AtspiValue *obj, GError **error)
return retval;
}
+/**
+ * atspi_value_get_text:
+ * @obj: a pointer to the #AtspiValue implementor on which to operate.
+ *
+ * Gets the human readable text alternative associated with the value.
+ * @text is a newly created string, that must be freed by the
+ * caller. Can be NULL if no descriptor is available.
+ *
+ * Since: 2.44
+ **/
+gchar *
+atspi_value_get_text (AtspiValue *obj, GError **error)
+{
+ gchar *retval = NULL;
+
+ g_return_if_fail (obj != NULL);
+
+ _atspi_dbus_get_property (obj, atspi_interface_value, "Text", error, "s", &retval);
+
+ return retval;
+}
+
static void
atspi_value_base_init (AtspiValue *klass)
{
@@ -175,3 +197,4 @@ atspi_value_get_type (void)
}
return type;
}
+
diff --git a/atspi/atspi-value.h b/atspi/atspi-value.h
index a012793b..478ea951 100644
--- a/atspi/atspi-value.h
+++ b/atspi/atspi-value.h
@@ -56,6 +56,7 @@ gboolean atspi_value_set_current_value (AtspiValue *obj, gdouble new_value, GErr
gdouble atspi_value_get_minimum_increment (AtspiValue *obj, GError **error);
+gchar *atspi_value_get_text (AtspiValue *obj, GError **error);
G_END_DECLS
#endif /* _ATSPI_VALUE_H_ */
diff --git a/doc/libatspi/libatspi-sections.txt b/doc/libatspi/libatspi-sections.txt
index d7bfc103..f8c407fb 100644
--- a/doc/libatspi/libatspi-sections.txt
+++ b/doc/libatspi/libatspi-sections.txt
@@ -349,6 +349,7 @@ atspi_value_get_current_value
atspi_value_get_maximum_value
atspi_value_set_current_value
atspi_value_get_minimum_increment
+atspi_value_get_text
<SUBSECTION Standard>
ATSPI_VALUE
ATSPI_IS_VALUE
diff --git a/tests/at-spi2-atk/atk_test_value.c b/tests/at-spi2-atk/atk_test_value.c
index 08021e24..b6fc4224 100644
--- a/tests/at-spi2-atk/atk_test_value.c
+++ b/tests/at-spi2-atk/atk_test_value.c
@@ -96,6 +96,19 @@ atk_test_value_get_minimum_increment (gpointer fixture, gconstpointer user_data)
}
static void
+atk_test_value_get_text (gpointer fixture, gconstpointer user_data)
+{
+ AtspiAccessible *_obj = get_root_obj (DATA_FILE);
+ g_assert (_obj);
+ AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
+ g_assert (child);
+ AtspiValue *obj = atspi_accessible_get_value_iface (child);
+ gchar *text = atspi_value_get_text (obj, NULL);
+ g_assert_cmpstr (text, ==, "2.250000");
+ g_free (text);
+}
+
+static void
teardown_value_test (gpointer fixture, gconstpointer user_data)
{
terminate_app ();
@@ -116,4 +129,6 @@ atk_test_value (void)
0, NULL, NULL, atk_test_value_set_current_value, teardown_value_test );
g_test_add_vtable (ATK_TEST_PATH_VALUE "/atk_test_value_get_minimum_increment",
0, NULL, NULL, atk_test_value_get_minimum_increment, teardown_value_test );
+ g_test_add_vtable (ATK_TEST_PATH_VALUE "/atk_test_value_get_text",
+ 0, NULL, NULL, atk_test_value_get_text, teardown_value_test );
}
diff --git a/xml/Value.xml b/xml/Value.xml
index ccd6c7aa..4995124e 100644
--- a/xml/Value.xml
+++ b/xml/Value.xml
@@ -10,5 +10,7 @@
<property name="CurrentValue" type="d" access="readwrite"/>
+ <property name="Text" type="s" access="read"/>
+
</interface>
</node>