[gtk/ebassi/for-master: 2/2] a11y: Check before disconnecting Text signals




commit 16b5a880978c66a254c8bd8a71c3e64b596abce2
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Wed Nov 25 18:15:04 2020 +0000

    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);
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]