[gnome-calendar/calendar-management] source-manager: fix memory leak when not unref the default source
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/calendar-management] source-manager: fix memory leak when not unref the default source
- Date: Thu, 5 Feb 2015 10:01:31 +0000 (UTC)
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]