[gtk/a11y/atspi] Simplify GetInterfaces handling
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/a11y/atspi] Simplify GetInterfaces handling
- Date: Mon, 12 Oct 2020 19:11:08 +0000 (UTC)
commit 776b4aee0ca6685aa135d296b984871b2e2240c4
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Oct 11 11:06:29 2020 -0400
Simplify GetInterfaces handling
It is error prone to keep the same conditions in sync
in two places. Instead, just assemble the list of interfaces
as we register objects, and use when GetInterfaces is called.
gtk/a11y/gtkatspicontext.c | 32 ++++++++++++++------------------
1 file changed, 14 insertions(+), 18 deletions(-)
---
diff --git a/gtk/a11y/gtkatspicontext.c b/gtk/a11y/gtkatspicontext.c
index e67485960f..ba21a2d509 100644
--- a/gtk/a11y/gtkatspicontext.c
+++ b/gtk/a11y/gtkatspicontext.c
@@ -79,6 +79,12 @@ struct _GtkAtSpiContext
* associated to the GtkATContext
*/
GDBusConnection *connection;
+
+ /* Accerciser refuses to work unless we implement a GetInterface
+ * call that returns a list of all implemented interfaces. We
+ * collect the answer here.
+ */
+ GVariant *interfaces;
};
enum
@@ -429,24 +435,7 @@ handle_accessible_method (GDBusConnection *connection,
}
else if (g_strcmp0 (method_name, "GetInterfaces") == 0)
{
- GtkAccessible *accessible = gtk_at_context_get_accessible (GTK_AT_CONTEXT (self));
- GVariantBuilder builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("as"));
-
- g_variant_builder_add (&builder, "s", "org.a11y.atspi.Accessible");
- if (GTK_IS_LABEL (accessible) ||
- GTK_IS_TEXT (accessible) ||
- GTK_IS_TEXT_VIEW (accessible))
- g_variant_builder_add (&builder, "s", "org.a11y.atspi.Text");
-
- if (GTK_IS_LEVEL_BAR (accessible) ||
- GTK_IS_PANED (accessible) ||
- GTK_IS_PROGRESS_BAR (accessible) ||
- GTK_IS_RANGE (accessible) ||
- GTK_IS_SCALE_BUTTON (accessible) ||
- GTK_IS_SPIN_BUTTON (accessible))
- g_variant_builder_add (&builder, "s", "org.a11y.atspi.Value");
-
- g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", &builder));
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(@as)", self->interfaces));
}
}
@@ -1279,7 +1268,9 @@ static void
gtk_at_spi_context_register_object (GtkAtSpiContext *self)
{
GtkWidget *widget = GTK_WIDGET (gtk_at_context_get_accessible (GTK_AT_CONTEXT (self)));
+ GVariantBuilder interfaces = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_STRING_ARRAY);
+ g_variant_builder_add (&interfaces, "s", "org.a11y.atspi.Accessible");
g_dbus_connection_register_object (self->connection,
self->context_path,
(GDBusInterfaceInfo *) &atspi_accessible_interface,
@@ -1292,6 +1283,7 @@ gtk_at_spi_context_register_object (GtkAtSpiContext *self)
GTK_IS_TEXT (widget) ||
GTK_IS_TEXT_VIEW (widget))
{
+ g_variant_builder_add (&interfaces, "s", "org.a11y.atspi.Text");
g_dbus_connection_register_object (self->connection,
self->context_path,
(GDBusInterfaceInfo *) &atspi_text_interface,
@@ -1308,6 +1300,7 @@ gtk_at_spi_context_register_object (GtkAtSpiContext *self)
GTK_IS_SCALE_BUTTON (widget) ||
GTK_IS_SPIN_BUTTON (widget))
{
+ g_variant_builder_add (&interfaces, "s", "org.a11y.atspi.Value");
g_dbus_connection_register_object (self->connection,
self->context_path,
(GDBusInterfaceInfo *) &atspi_value_interface,
@@ -1316,6 +1309,8 @@ gtk_at_spi_context_register_object (GtkAtSpiContext *self)
NULL,
NULL);
}
+
+ self->interfaces = g_variant_ref_sink (g_variant_builder_end (&interfaces));
}
static void
@@ -1336,6 +1331,7 @@ gtk_at_spi_context_finalize (GObject *gobject)
g_free (self->bus_address);
g_free (self->context_path);
+ g_clear_pointer (&self->interfaces, g_variant_unref);
G_OBJECT_CLASS (gtk_at_spi_context_parent_class)->finalize (gobject);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]