From 16b5a880978c66a254c8bd8a71c3e64b596abce2 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 25 Nov 2020 18:15:04 +0000 Subject: a11y: Check before disconnecting Text signals Use the same initial check for the accessible object type that we use when connecting the signal, in case we try to disconnect signals on different widgets. Additionally, check before accessing data that might have already been removed. Fixes: #3403 --- gtk/a11y/gtkatspitext.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gtk/a11y/gtkatspitext.c b/gtk/a11y/gtkatspitext.c index 6c6fd79a46..7cf08fdf06 100644 --- a/gtk/a11y/gtkatspitext.c +++ b/gtk/a11y/gtkatspitext.c @@ -1526,9 +1526,15 @@ gtk_atspi_connect_text_signals (GtkAccessible *accessible, void gtk_atspi_disconnect_text_signals (GtkAccessible *accessible) { + if (!GTK_IS_EDITABLE (accessible) && + !GTK_IS_TEXT_VIEW (accessible)) + return; + TextChanged *changed; changed = g_object_get_data (G_OBJECT (accessible), "accessible-text-data"); + if (changed == NULL) + return; if (GTK_IS_EDITABLE (accessible)) { @@ -1544,6 +1550,7 @@ gtk_atspi_disconnect_text_signals (GtkAccessible *accessible) else if (GTK_IS_TEXT_VIEW (accessible)) { g_signal_handlers_disconnect_by_func (accessible, buffer_changed, changed); + if (changed->buffer) { g_signal_handlers_disconnect_by_func (changed->buffer, insert_range_cb, changed); @@ -1551,6 +1558,7 @@ gtk_atspi_disconnect_text_signals (GtkAccessible *accessible) g_signal_handlers_disconnect_by_func (changed->buffer, delete_range_after_cb, changed); g_signal_handlers_disconnect_by_func (changed->buffer, mark_set_cb, changed); } + g_clear_object (&changed->buffer); } -- cgit v1.2.1