[gnome-calendar/calendar-management] source-manager: fix memory leak when not unref the default source



commit 3790bb9c6cbf6f96d4a2d76e0e5c0ec76e426a07
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Feb 5 08:01:17 2015 -0200

    source-manager: fix memory leak when not unref the default source

 src/gcal-source-manager-dialog.c |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)
---
diff --git a/src/gcal-source-manager-dialog.c b/src/gcal-source-manager-dialog.c
index 06d6aa4..01f1f62 100644
--- a/src/gcal-source-manager-dialog.c
+++ b/src/gcal-source-manager-dialog.c
@@ -200,15 +200,22 @@ default_action_state_changed (GSimpleAction *action,
                               gpointer       user_data)
 {
   GcalSourceManagerDialogPrivate *priv;
+  ESource *default_source;
   GtkWidget *old_default_row, *new_default_row;
   GtkWidget *old_default_grid, *new_default_grid;
   gboolean should_change;
 
   priv = gcal_source_manager_dialog_get_instance_private (GCAL_SOURCE_MANAGER_DIALOG (user_data));
+  default_source = gcal_manager_get_default_source (priv->manager);
   should_change = g_variant_get_boolean (value);
 
   g_assert_nonnull (priv->selected_source);
 
+  /**
+   * When we're updating the action
+   * states, we don't want to change
+   * anything besides states.
+   */
   if (priv->updating)
       goto out;
 
@@ -217,7 +224,7 @@ default_action_state_changed (GSimpleAction *action,
     return;
 
   /* Hide icon from old source */
-  old_default_row = g_hash_table_lookup (priv->source_to_row, gcal_manager_get_default_source 
(priv->manager));
+  old_default_row = g_hash_table_lookup (priv->source_to_row, default_source);
   old_default_grid = gtk_bin_get_child (GTK_BIN (old_default_row));
 
   gtk_widget_hide (gtk_grid_get_child_at (GTK_GRID (old_default_grid), 2, 0));
@@ -232,7 +239,10 @@ default_action_state_changed (GSimpleAction *action,
   gcal_manager_set_default_source (priv->manager, priv->selected_source);
 
 out:
+  // Set the action state
   g_simple_action_set_state (action, value);
+
+  g_object_unref (default_source);
 }
 
 /**
@@ -629,11 +639,13 @@ make_row_for_source (GcalSourceManagerDialog *dialog,
   GtkWidget *label;
 
   ESourceSelectable *extension;
+  ESource *default_source;
   GtkWidget *color_icon;
   GdkPixbuf *pix;
   GdkRGBA color;
 
   priv = gcal_source_manager_dialog_get_instance_private (dialog);
+  default_source = gcal_manager_get_default_source (priv->manager);
   extension = E_SOURCE_SELECTABLE (e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR));
 
   /* grid */
@@ -670,7 +682,9 @@ make_row_for_source (GcalSourceManagerDialog *dialog,
   gtk_widget_show (label);
   gtk_widget_show (grid);
   gtk_widget_show (row);
-  gtk_widget_set_visible (default_icon, source == gcal_manager_get_default_source (priv->manager));
+  gtk_widget_set_visible (default_icon, source == default_source);
+
+  g_object_unref (default_source);
 
   return row;
 }
@@ -688,6 +702,7 @@ update_action_states (GcalSourceManagerDialog *dialog,
 {
   GcalSourceManagerDialogPrivate *priv;
   gboolean is_enabled, is_default;
+  ESource *default_source;
   GAction *action;
 
   priv = gcal_source_manager_dialog_get_instance_private (dialog);
@@ -698,8 +713,9 @@ update_action_states (GcalSourceManagerDialog *dialog,
   if (source == NULL)
     return;
 
+  default_source = gcal_manager_get_default_source (priv->manager);
   is_enabled = gcal_manager_is_source_enabled (priv->manager, source);
-  is_default = (source == gcal_manager_get_default_source (priv->manager));
+  is_default = (source == default_source);
 
   action = g_action_map_lookup_action (G_ACTION_MAP (priv->action_group), "show");
   g_action_change_state (action, g_variant_new_boolean (is_enabled));
@@ -708,6 +724,8 @@ update_action_states (GcalSourceManagerDialog *dialog,
   g_action_change_state (action, g_variant_new_boolean (is_default));
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), !gcal_manager_is_client_writable (priv->manager, 
source));
 
+  g_object_unref (default_source);
+
   priv->updating = FALSE;
 }
 


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