[gnome-control-center/gnome-3-6] screen: Avoid accessing destroyed panel



commit fc7c41f4293a1d3e37c45eb6f2d95cd80dd52edc
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Jun 12 18:22:28 2012 +0100

    screen: Avoid accessing destroyed panel
    
    When we cancel the Brightness calls because the panel is getting
    destroyed, we shouldn't try to access panel widgets.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=677963

 panels/screen/cc-screen-panel.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)
---
diff --git a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
index 9c10932..1143dd9 100644
--- a/panels/screen/cc-screen-panel.c
+++ b/panels/screen/cc-screen-panel.c
@@ -94,6 +94,7 @@ cc_screen_panel_dispose (GObject *object)
     }
   if (priv->cancellable != NULL)
     {
+      g_cancellable_cancel (priv->cancellable);
       g_object_unref (priv->cancellable);
       priv->cancellable = NULL;
     }
@@ -112,14 +113,6 @@ cc_screen_panel_dispose (GObject *object)
 }
 
 static void
-cc_screen_panel_finalize (GObject *object)
-{
-  CcScreenPanelPrivate *priv = CC_SCREEN_PANEL (object)->priv;
-  g_cancellable_cancel (priv->cancellable);
-  G_OBJECT_CLASS (cc_screen_panel_parent_class)->finalize (object);
-}
-
-static void
 on_lock_settings_changed (GSettings     *settings,
                           const char    *key,
                           CcScreenPanel *panel)
@@ -167,7 +160,6 @@ cc_screen_panel_class_init (CcScreenPanelClass *klass)
   object_class->get_property = cc_screen_panel_get_property;
   object_class->set_property = cc_screen_panel_set_property;
   object_class->dispose = cc_screen_panel_dispose;
-  object_class->finalize = cc_screen_panel_finalize;
 
   panel_class->get_help_uri = cc_screen_panel_get_help_uri;
 }
@@ -228,10 +220,18 @@ get_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data
   result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
   if (result == NULL)
     {
+      /* We got cancelled, so we're probably exiting */
+      if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+        {
+          g_error_free (error);
+          return;
+	}
+
       gtk_widget_hide (WID ("screen_brightness_hscale"));
       gtk_widget_hide (WID ("screen_auto_reduce_checkbutton"));
       gtk_widget_hide (WID ("brightness-frame"));
       g_object_set (G_OBJECT (WID ("turn-off-alignment")), "left-padding", 0, NULL);
+
       g_warning ("Error getting brightness: %s", error->message);
       g_error_free (error);
       return;



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