From 8fcd8ab2fae7858c802cddeebb03dc1197e625a1 Mon Sep 17 00:00:00 2001 From: Alan Fitton Date: Wed, 21 Dec 2011 22:13:28 +0000 Subject: fix memory leak on new fileicon cell renderer --- src/protocol-constants.h | 2 ++ src/trg-cell-renderer-file-icon.c | 8 ++++++++ src/trg-cell-renderer-priority.c | 4 +++- src/trg-files-model.c | 37 +++++++++++++++++++++++-------------- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/protocol-constants.h b/src/protocol-constants.h index 04dcd2c..94471ad 100644 --- a/src/protocol-constants.h +++ b/src/protocol-constants.h @@ -182,6 +182,8 @@ typedef enum { } tr_torrent_activity; enum { + TR_PRI_UNSET = -3, + TR_PRI_MIXED = -2, TR_PRI_LOW = -1, TR_PRI_NORMAL = 0, /* since NORMAL is 0, memset initializes nicely */ TR_PRI_HIGH = 1 diff --git a/src/trg-cell-renderer-file-icon.c b/src/trg-cell-renderer-file-icon.c index 4f67c55..162444e 100644 --- a/src/trg-cell-renderer-file-icon.c +++ b/src/trg-cell-renderer-file-icon.c @@ -105,6 +105,13 @@ trg_cell_renderer_file_icon_set_property(GObject * object, guint property_id, } } +static void trg_cell_renderer_file_icon_dispose(GObject * object) +{ + TrgCellRendererFileIconPrivate *priv = TRG_CELL_RENDERER_FILE_ICON_GET_PRIVATE(object); + g_free(priv->text); + G_OBJECT_CLASS(trg_cell_renderer_file_icon_parent_class)->dispose(object); +} + static void trg_cell_renderer_file_icon_class_init(TrgCellRendererFileIconClass * klass) { @@ -112,6 +119,7 @@ trg_cell_renderer_file_icon_class_init(TrgCellRendererFileIconClass * klass) object_class->get_property = trg_cell_renderer_file_icon_get_property; object_class->set_property = trg_cell_renderer_file_icon_set_property; + object_class->dispose = trg_cell_renderer_file_icon_dispose; g_object_class_install_property(object_class, PROP_FILE_ID, diff --git a/src/trg-cell-renderer-priority.c b/src/trg-cell-renderer-priority.c index 00e66f5..9d1f7ad 100644 --- a/src/trg-cell-renderer-priority.c +++ b/src/trg-cell-renderer-priority.c @@ -76,6 +76,8 @@ trg_cell_renderer_priority_set_property(GObject * object, g_object_set(object, "text", _("High"), NULL); } else if (priv->priority_value == TR_PRI_NORMAL){ g_object_set(object, "text", _("Normal"), NULL); + } else if (priv->priority_value == TR_PRI_MIXED){ + g_object_set(object, "text", _("Mixed"), NULL); } else { g_object_set(object, "text", "", NULL); } @@ -97,7 +99,7 @@ trg_cell_renderer_priority_class_init(TrgCellRendererPriorityClass * klass) g_param_spec_int ("priority-value", "Priority Value", - "Priority Value", -2, + "Priority Value", TR_PRI_UNSET, TR_PRI_HIGH, TR_PRI_NORMAL, G_PARAM_READWRITE | G_PARAM_STATIC_NAME | diff --git a/src/trg-files-model.c b/src/trg-files-model.c index 3da542a..db62961 100644 --- a/src/trg-files-model.c +++ b/src/trg-files-model.c @@ -17,9 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include #include +#include "protocol-constants.h" #include "trg-files-model.h" #include "trg-client.h" #include "torrent.h" @@ -86,20 +88,26 @@ struct updateAllArgs { static gboolean trg_files_update_all_parents(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { struct updateAllArgs *args = (struct updateAllArgs*) data; - GtkTreePath *descendentPath = gtk_tree_model_get_path(model, - args->descendentIter); - - if (args->increment > 0 && gtk_tree_path_is_ancestor(path, descendentPath)) { - gint64 lastCompleted, newCompleted, length; - gtk_tree_model_get(model, iter, FILESCOL_BYTESCOMPLETED, &lastCompleted, - FILESCOL_SIZE, &length, -1); - newCompleted = lastCompleted + args->increment; - gtk_tree_store_set(GTK_TREE_STORE(model), iter, FILESCOL_BYTESCOMPLETED, - newCompleted, FILESCOL_PROGRESS, - file_get_progress(length, newCompleted), -1); - } - gtk_tree_path_free(descendentPath); + if (args->increment > 0) { + GtkTreePath *descendentPath = gtk_tree_model_get_path(model, + args->descendentIter); + + if (gtk_tree_path_is_ancestor(path, descendentPath)) { + gint64 lastCompleted, newCompleted, length; + + gtk_tree_model_get(model, iter, FILESCOL_BYTESCOMPLETED, &lastCompleted, + FILESCOL_SIZE, &length, -1); + newCompleted = lastCompleted + args->increment; + + gtk_tree_store_set(GTK_TREE_STORE(model), iter, FILESCOL_BYTESCOMPLETED, + newCompleted, FILESCOL_PROGRESS, + file_get_progress(length, newCompleted), -1); + + } + + gtk_tree_path_free(descendentPath); + } return FALSE; } @@ -168,9 +176,10 @@ static void trg_files_model_iter_new(TrgFilesModel * model, GtkTreeIter * iter, g_value_init(&gvalue, G_TYPE_INT); g_value_set_int(&gvalue, -1); gtk_tree_store_set_value(GTK_TREE_STORE(model), iter, FILESCOL_ID, &gvalue); + memset(&gvalue, 0, sizeof(GValue)); g_value_init(&gvalue, G_TYPE_INT64); - g_value_set_int64(&gvalue, -2); + g_value_set_int64(&gvalue, TR_PRI_UNSET); gtk_tree_store_set_value(GTK_TREE_STORE(model), iter, FILESCOL_PRIORITY, &gvalue); iter_to_row_reference(GTK_TREE_MODEL(model), iter, &parentRowRef); -- cgit v1.2.3