diff options
author | Rui Matos <tiagomatos@gmail.com> | 2016-02-09 15:30:00 +0100 |
---|---|---|
committer | Rui Matos <tiagomatos@gmail.com> | 2016-02-09 15:35:17 +0100 |
commit | 019dab7c38a0891f494749e9e8fb27c30e8a5f25 (patch) | |
tree | 20d85676bb1199de1b9619de3f74bfb48041d95d /gtk/gtkmagnifier.c | |
parent | 1331b60029fdc29f76a9a53d0c75521ea57c66ae (diff) | |
download | gtk+-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
Diffstat (limited to 'gtk/gtkmagnifier.c')
-rw-r--r-- | gtk/gtkmagnifier.c | 12 |
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); |