summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <tiagomatos@gmail.com>2016-02-09 15:30:00 +0100
committerRui Matos <tiagomatos@gmail.com>2016-02-09 15:35:17 +0100
commit019dab7c38a0891f494749e9e8fb27c30e8a5f25 (patch)
tree20d85676bb1199de1b9619de3f74bfb48041d95d
parent1331b60029fdc29f76a9a53d0c75521ea57c66ae (diff)
downloadgtk+-019dab7c38a0891f494749e9e8fb27c30e8a5f25.tar.gz
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
-rw-r--r--gtk/gtkmagnifier.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gtk/gtkmagnifier.c b/gtk/gtkmagnifier.c
index e83d3066fe..29905fb584 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);