From 307efe2172114bf2cfbcc13e9c98ff8f2f2232d0 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sat, 25 May 2024 00:19:33 +0100 Subject: [PATCH] a11y: Do not emit event signals if there are no listeners Now that we track event listeners, we can skip the accessibility event emission altogether if we know nothing is on the other side. --- gtk/a11y/gtkatspicontext.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/gtk/a11y/gtkatspicontext.c b/gtk/a11y/gtkatspicontext.c index 397bb5d551..52da24a9b2 100644 --- a/gtk/a11y/gtkatspicontext.c +++ b/gtk/a11y/gtkatspicontext.c @@ -760,7 +760,7 @@ emit_text_changed (GtkAtSpiContext *self, int end, const char *text) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -780,7 +780,7 @@ emit_text_selection_changed (GtkAtSpiContext *self, const char *kind, int cursor_position) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; if (strcmp (kind, "text-caret-moved") == 0) @@ -807,7 +807,7 @@ static void emit_selection_changed (GtkAtSpiContext *self, const char *kind) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -825,7 +825,7 @@ emit_state_changed (GtkAtSpiContext *self, const char *name, gboolean enabled) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -841,7 +841,7 @@ emit_state_changed (GtkAtSpiContext *self, static void emit_defunct (GtkAtSpiContext *self) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -858,13 +858,10 @@ emit_property_changed (GtkAtSpiContext *self, const char *name, GVariant *value) { - GVariant *value_owned = g_variant_ref_sink (value); + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) + return; - if (self->connection == NULL) - { - g_variant_unref (value_owned); - return; - } + GVariant *value_owned = g_variant_ref_sink (value); g_dbus_connection_emit_signal (self->connection, NULL, @@ -884,7 +881,7 @@ emit_bounds_changed (GtkAtSpiContext *self, int width, int height) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -904,7 +901,9 @@ emit_children_changed (GtkAtSpiContext *self, GtkAccessibleChildState state) { /* If we don't have a connection on either contexts, we cannot emit a signal */ - if (self->connection == NULL || child_context->connection == NULL) + if (self->connection == NULL || + child_context->connection == NULL || + !gtk_at_spi_root_has_event_listeners (self->root)) return; GVariant *context_ref = gtk_at_spi_context_to_ref (self); @@ -922,7 +921,7 @@ static void emit_window_event (GtkAtSpiContext *self, const char *event_type) { - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -1587,7 +1586,7 @@ gtk_at_spi_context_update_caret_position (GtkATContext *context) GtkAccessibleText *accessible_text = GTK_ACCESSIBLE_TEXT (accessible); guint offset; - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; offset = gtk_accessible_text_get_caret_position (accessible_text); @@ -1611,7 +1610,7 @@ gtk_at_spi_context_update_selection_bound (GtkATContext *context) { GtkAtSpiContext *self = GTK_AT_SPI_CONTEXT (context); - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; g_dbus_connection_emit_signal (self->connection, @@ -1636,7 +1635,7 @@ gtk_at_spi_context_update_text_contents (GtkATContext *context, { GtkAtSpiContext *self = GTK_AT_SPI_CONTEXT (context); - if (self->connection == NULL) + if (self->connection == NULL || !gtk_at_spi_root_has_event_listeners (self->root)) return; GtkAccessible *accessible = gtk_at_context_get_accessible (context);