summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-12-21 22:13:28 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-12-21 22:13:28 +0000
commit8fcd8ab2fae7858c802cddeebb03dc1197e625a1 (patch)
tree9697c45dca952799fffe2b7fe55fd1e8fe7212fc
parent1db7752cc705eea685f4eeccb243da571afbf466 (diff)
fix memory leak on new fileicon cell renderer
-rw-r--r--src/protocol-constants.h2
-rw-r--r--src/trg-cell-renderer-file-icon.c8
-rw-r--r--src/trg-cell-renderer-priority.c4
-rw-r--r--src/trg-files-model.c37
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 <string.h>
#include <gtk/gtk.h>
#include <json-glib/json-glib.h>
+#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);