[gtk+] gtkmagnifier: Avoid a crash if the inspected widget is finalized



commit 019dab7c38a0891f494749e9e8fb27c30e8a5f25
Author: Rui Matos <tiagomatos gmail com>
Date:   Tue Feb 9 15:30:00 2016 +0100

    gtkmagnifier: Avoid a crash if the inspected widget is finalized
    
    If the inspected widget is finalized and we then try to disconnect
    from its signals we'll crash.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=761775

 gtk/gtkmagnifier.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkmagnifier.c b/gtk/gtkmagnifier.c
index e83d306..29905fb 100644
--- a/gtk/gtkmagnifier.c
+++ b/gtk/gtkmagnifier.c
@@ -204,7 +204,8 @@ disconnect_resize_handler (GtkMagnifier *magnifier)
 
   if (priv->resize_handler)
     {
-      g_signal_handler_disconnect (priv->inspected, priv->resize_handler);
+      if (priv->inspected)
+        g_signal_handler_disconnect (priv->inspected, priv->resize_handler);
       priv->resize_handler = 0;
     }
 }
@@ -239,7 +240,8 @@ disconnect_draw_handler (GtkMagnifier *magnifier)
 
   if (priv->draw_handler)
     {
-      g_signal_handler_disconnect (priv->inspected, priv->draw_handler);
+      if (priv->inspected)
+        g_signal_handler_disconnect (priv->inspected, priv->draw_handler);
       priv->draw_handler = 0;
     }
 }
@@ -343,7 +345,13 @@ _gtk_magnifier_set_inspected (GtkMagnifier *magnifier,
   disconnect_draw_handler (magnifier);
   disconnect_resize_handler (magnifier);
 
+  if (priv->inspected)
+    g_object_remove_weak_pointer (G_OBJECT (priv->inspected),
+                                  (gpointer *) &priv->inspected);
   priv->inspected = inspected;
+  if (priv->inspected)
+    g_object_add_weak_pointer (G_OBJECT (priv->inspected),
+                               (gpointer *) &priv->inspected);
 
   connect_draw_handler (magnifier);
   connect_resize_handler (magnifier);


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