[gnome-control-center] display: Clean up signal handling when finalized
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] display: Clean up signal handling when finalized
- Date: Thu, 1 Sep 2011 12:55:38 +0000 (UTC)
commit f33080ac1bfaec8e27c7d5315a2148af2ccca5ae
Author: Bastien Nocera <hadess hadess net>
Date: Thu Sep 1 13:53:45 2011 +0100
display: Clean up signal handling when finalized
Otherwise we might crash if the display panel was opened
and the window focus changes.
https://bugzilla.gnome.org/show_bug.cgi?id=657919
panels/display/cc-display-panel.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
---
diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c
index 498f34b..217224f 100644
--- a/panels/display/cc-display-panel.c
+++ b/panels/display/cc-display-panel.c
@@ -74,6 +74,7 @@ struct _CcDisplayPanelPrivate
GSettings *clock_settings;
GtkBuilder *builder;
+ guint focus_id;
GtkWidget *panel;
GtkWidget *current_monitor_event_box;
@@ -157,6 +158,8 @@ static void
cc_display_panel_finalize (GObject *object)
{
CcDisplayPanel *self;
+ CcShell *shell;
+ GtkWidget *toplevel;
self = CC_DISPLAY_PANEL (object);
@@ -166,6 +169,11 @@ cc_display_panel_finalize (GObject *object)
if (self->priv->clock_settings != NULL)
g_object_unref (self->priv->clock_settings);
+ shell = cc_panel_get_shell (CC_PANEL (self));
+ toplevel = cc_shell_get_toplevel (shell);
+ g_signal_handler_disconnect (G_OBJECT (toplevel),
+ self->priv->focus_id);
+
gnome_rr_labeler_hide (self->priv->labeler);
g_object_unref (self->priv->labeler);
@@ -2613,8 +2621,8 @@ cc_display_panel_constructor (GType gtype,
shell = cc_panel_get_shell (CC_PANEL (self));
toplevel = cc_shell_get_toplevel (shell);
- g_signal_connect (toplevel, "notify::has-toplevel-focus",
- G_CALLBACK (dialog_toplevel_focus_changed), self);
+ self->priv->focus_id = g_signal_connect (toplevel, "notify::has-toplevel-focus",
+ G_CALLBACK (dialog_toplevel_focus_changed), self);
self->priv->panel = WID ("display-panel");
g_signal_connect_after (self->priv->panel, "show",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]