diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2007-10-02 19:54:42 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2007-10-02 19:54:42 +0800 |
commit | 09d4af6fff63dd112b8bb42087f14f7018e2f78c (patch) | |
tree | 991537a9ea1d8487334f6fb299098daf425f9db8 /widgets | |
parent | 79521efaeecfbaf717e465670fcd2724aea53578 (diff) | |
download | gsoc2013-evolution-09d4af6fff63dd112b8bb42087f14f7018e2f78c.tar.gz gsoc2013-evolution-09d4af6fff63dd112b8bb42087f14f7018e2f78c.tar.zst gsoc2013-evolution-09d4af6fff63dd112b8bb42087f14f7018e2f78c.zip |
** Fixes bug #469657
2007-10-02 Matthew Barnes <mbarnes@redhat.com>
** Fixes bug #469657
* addressbook/importers/evolution-ldif-importer.c:
* calendar/gui/comp-editor-factory.c:
* composer/e-msg-composer.c:
* e-util/e-config-listener.c:
* mail/em-composer-prefs.c:
* mail/em-folder-tree-model.c:
* mail/em-format.c:
* mail/em-format-html.c:
* mail/em-migrate.c:
* mail/em-subscribe-editor.c:
* mail/mail-component.c:
* mail/mail-send-recv.c:
* mail/message-list.c:
* mail/importers/elm-importer.c:
* plugins/exchange-operations/exchange-folder-size-display.c:
* plugins/mono/mono-plugin.c:
* shell/e-shell-settings-dialog.c:
* tools/killev.c:
* widgets/table/e-table-extras.c:
* widgets/table/e-table-selection-model.c:
Use destroy functions in GHashTables to simplify memory management.
svn path=/trunk/; revision=34344
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/table/ChangeLog | 8 | ||||
-rw-r--r-- | widgets/table/e-table-extras.c | 89 | ||||
-rw-r--r-- | widgets/table/e-table-selection-model.c | 12 |
3 files changed, 42 insertions, 67 deletions
diff --git a/widgets/table/ChangeLog b/widgets/table/ChangeLog index 764d76c139..2ee5268d62 100644 --- a/widgets/table/ChangeLog +++ b/widgets/table/ChangeLog @@ -1,3 +1,11 @@ +2007-10-02 Matthew Barnes <mbarnes@redhat.com> + + ** Fixes part of bug #469657 + + * e-table-extras.c: + * e-table-selection-model.c: + Use destroy functions in GHashTables to simplify memory management. + 2007-10-01 Milan Crha <mcrha@redhat.com> ** Fix for bug #470837 diff --git a/widgets/table/e-table-extras.c b/widgets/table/e-table-extras.c index 312e19a0c5..25fb69e322 100644 --- a/widgets/table/e-table-extras.c +++ b/widgets/table/e-table-extras.c @@ -44,16 +44,6 @@ G_DEFINE_TYPE (ETableExtras, ete, G_TYPE_OBJECT) static void -cell_hash_free(gchar *key, - ECell *cell, - gpointer user_data) -{ - g_free(key); - if (cell) - g_object_unref(cell); -} - -static void pixbuf_hash_free(gchar *key, GdkPixbuf *pixbuf, gpointer user_data) @@ -69,30 +59,25 @@ ete_finalize (GObject *object) ETableExtras *ete = E_TABLE_EXTRAS (object); if (ete->cells) { - g_hash_table_foreach (ete->cells, (GHFunc) cell_hash_free, NULL); g_hash_table_destroy (ete->cells); + ete->cells = NULL; } if (ete->compares) { - g_hash_table_foreach (ete->compares, (GHFunc) g_free, NULL); g_hash_table_destroy (ete->compares); + ete->compares = NULL; } if (ete->searches) { - g_hash_table_foreach (ete->searches, (GHFunc) g_free, NULL); g_hash_table_destroy (ete->searches); + ete->searches = NULL; } if (ete->pixbufs) { - g_hash_table_foreach (ete->pixbufs, (GHFunc) pixbuf_hash_free, NULL); g_hash_table_destroy (ete->pixbufs); + ete->pixbufs = NULL; } - ete->cells = NULL; - ete->compares = NULL; - ete->searches = NULL; - ete->pixbufs = NULL; - G_OBJECT_CLASS (ete_parent_class)->finalize (object); } @@ -162,12 +147,34 @@ e_string_search(gconstpointer haystack, const char *needle) } static void +safe_unref (gpointer object) +{ + if (object != NULL) + g_object_unref (object); +} + +static void ete_init (ETableExtras *extras) { - extras->cells = g_hash_table_new(g_str_hash, g_str_equal); - extras->compares = g_hash_table_new(g_str_hash, g_str_equal); - extras->searches = g_hash_table_new(g_str_hash, g_str_equal); - extras->pixbufs = g_hash_table_new(g_str_hash, g_str_equal); + extras->cells = g_hash_table_new_full ( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) safe_unref); + + extras->compares = g_hash_table_new_full ( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) NULL); + + extras->searches = g_hash_table_new_full ( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) NULL); + + extras->pixbufs = g_hash_table_new_full ( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) safe_unref); e_table_extras_add_compare(extras, "string", e_str_compare); e_table_extras_add_compare(extras, "stringcase", e_str_case_compare); @@ -199,16 +206,6 @@ e_table_extras_add_cell (ETableExtras *extras, char *id, ECell *cell) { - gchar *old_key; - ECell *old_cell; - - if (g_hash_table_lookup_extended (extras->cells, id, (gpointer *)&old_key, (gpointer *)&old_cell)) { - g_hash_table_remove (extras->cells, old_key); - g_free (old_key); - if (old_cell) - g_object_unref (old_cell); - } - if (cell) g_object_ref_sink (cell); g_hash_table_insert (extras->cells, g_strdup(id), cell); @@ -226,14 +223,6 @@ e_table_extras_add_compare (ETableExtras *extras, char *id, GCompareFunc compare) { - gchar *old_key; - GCompareFunc old_compare; - - if (g_hash_table_lookup_extended (extras->compares, id, (gpointer *)&old_key, (gpointer *)&old_compare)) { - g_hash_table_remove (extras->compares, old_key); - g_free (old_key); - } - g_hash_table_insert(extras->compares, g_strdup(id), (gpointer) compare); } @@ -249,14 +238,6 @@ e_table_extras_add_search (ETableExtras *extras, char *id, ETableSearchFunc search) { - gchar *old_key; - ETableSearchFunc old_search; - - if (g_hash_table_lookup_extended (extras->searches, id, (gpointer *)&old_key, (gpointer *)&old_search)) { - g_hash_table_remove (extras->searches, old_key); - g_free (old_key); - } - g_hash_table_insert(extras->searches, g_strdup(id), search); } @@ -272,16 +253,6 @@ e_table_extras_add_pixbuf (ETableExtras *extras, char *id, GdkPixbuf *pixbuf) { - gchar *old_key; - GdkPixbuf *old_pixbuf; - - if (g_hash_table_lookup_extended (extras->pixbufs, id, (gpointer *)&old_key, (gpointer *)&old_pixbuf)) { - g_hash_table_remove (extras->cells, old_key); - g_free (old_key); - if (old_pixbuf) - g_object_unref (old_pixbuf); - } - if (pixbuf) g_object_ref(pixbuf); g_hash_table_insert (extras->pixbufs, g_strdup(id), pixbuf); diff --git a/widgets/table/e-table-selection-model.c b/widgets/table/e-table-selection-model.c index 76983106f6..2b8ec0fa99 100644 --- a/widgets/table/e-table-selection-model.c +++ b/widgets/table/e-table-selection-model.c @@ -52,16 +52,9 @@ save_to_hash(int model_row, gpointer closure) } static void -free_key(gpointer key, gpointer value, gpointer closure) -{ - g_free(key); -} - -static void free_hash(ETableSelectionModel *etsm) { if (etsm->hash) { - g_hash_table_foreach(etsm->hash, free_key, NULL); g_hash_table_destroy(etsm->hash); etsm->hash = NULL; } @@ -78,7 +71,10 @@ model_pre_change (ETableModel *etm, ETableSelectionModel *etsm) if (etsm->model && e_table_model_has_save_id (etsm->model)) { gint cursor_row; - etsm->hash = g_hash_table_new(g_str_hash, g_str_equal); + etsm->hash = g_hash_table_new_full( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) NULL); e_selection_model_foreach(E_SELECTION_MODEL(etsm), save_to_hash, etsm); g_object_get(etsm, |