summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am1
-rw-r--r--src/torrent.c6
-rw-r--r--src/trg-file-parser.c59
-rw-r--r--src/trg-file-parser.h11
-rw-r--r--src/trg-files-model.c239
-rw-r--r--src/trg-files-tree-view-common.c3
-rw-r--r--src/trg-files-tree-view-common.h22
-rw-r--r--src/trg-files-tree-view.c1
-rw-r--r--src/trg-main-window.c8
-rw-r--r--src/trg-torrent-add-dialog.c5
-rw-r--r--src/util.c13
-rw-r--r--src/util.h3
12 files changed, 190 insertions, 181 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 36df2fc..65f6d22 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -64,6 +64,7 @@ transmission_remote_gtk_SOURCES = main.c \
trg-peers-model.c \
trg-peers-tree-view.c \
trg-files-model-common.c \
+ trg-files-tree.c \
trg-model.c \
trg-persistent-tree-view.c \
trg-files-model.c \
diff --git a/src/torrent.c b/src/torrent.c
index 0c83995..fbc5884 100644
--- a/src/torrent.c
+++ b/src/torrent.c
@@ -610,7 +610,11 @@ gint64 peerfrom_get_lpd(JsonObject * pf)
gdouble file_get_progress(gint64 length, gint64 completed)
{
if (length > 0) {
- return ((gdouble) completed / (gdouble) length) * 100.0;
+ gdouble progress = ((gdouble) completed / (gdouble) length) * 100.0;
+ if (progress > 100.0)
+ return 100.0;
+ else
+ return progress;
} else {
return 0.0;
}
diff --git a/src/trg-file-parser.c b/src/trg-file-parser.c
index 81010f6..263cd2f 100644
--- a/src/trg-file-parser.c
+++ b/src/trg-file-parser.c
@@ -26,15 +26,14 @@
#include "bencode.h"
#include "trg-file-parser.h"
-static trg_torrent_file_node
- * trg_torrent_file_node_insert(trg_torrent_file_node * top,
- trg_torrent_file_node * last,
- be_node * file_node, guint index,
- gint64 * total_length)
+static trg_files_tree_node
+ * trg_file_parser_node_insert(trg_files_tree_node * top,
+ trg_files_tree_node * last,
+ be_node * file_node, gint index)
{
be_node *file_length_node = be_dict_find(file_node, "length", BE_INT);
be_node *file_path_list = be_dict_find(file_node, "path", BE_LIST);
- trg_torrent_file_node *lastIter = last;
+ trg_files_tree_node *lastIter = last;
GList *parentList = NULL;
be_node *path_el_node;
GList *li;
@@ -55,11 +54,11 @@ static trg_torrent_file_node
*/
for (i = 0; (path_el_node = file_path_list->val.l[i]); i++) {
gboolean isFile = !file_path_list->val.l[i + 1];
- trg_torrent_file_node *target_node = NULL;
+ trg_files_tree_node *target_node = NULL;
if (li && !isFile) {
- trg_torrent_file_node *lastPathNode =
- (trg_torrent_file_node *) li->data;
+ trg_files_tree_node *lastPathNode =
+ (trg_files_tree_node *) li->data;
if (!g_strcmp0(lastPathNode->name, path_el_node->val.s))
target_node = lastPathNode;
@@ -68,7 +67,7 @@ static trg_torrent_file_node
}
if (!target_node) {
- target_node = g_new0(trg_torrent_file_node, 1);
+ target_node = g_new0(trg_files_tree_node, 1);
target_node->name = g_strdup(path_el_node->val.s);
target_node->parent = lastIter;
@@ -82,8 +81,7 @@ static trg_torrent_file_node
lastIter = target_node;
if (isFile) {
- *total_length += (target_node->length =
- (gint64) (file_length_node->val.i));
+ target_node->length = (gint64)file_length_node->val.i;
target_node->index = index;
}
}
@@ -93,31 +91,19 @@ static trg_torrent_file_node
return lastIter;
}
-static void trg_torrent_file_node_free(trg_torrent_file_node * node)
-{
- GList *li;
- for (li = node->children; li != NULL; li = g_list_next(li))
- trg_torrent_file_node_free((trg_torrent_file_node *) li->data);
- g_list_free(node->children);
- g_free(node->name);
- g_free(node);
-}
-
void trg_torrent_file_free(trg_torrent_file * t)
{
- trg_torrent_file_node_free(t->top_node);
+ trg_files_tree_node_free(t->top_node);
g_free(t->name);
g_free(t);
}
-static trg_torrent_file_node *trg_parse_torrent_file_nodes(be_node *
- info_node,
- gint64 *
- total_length)
+static trg_files_tree_node *trg_parse_torrent_file_nodes(be_node *
+ info_node)
{
be_node *files_node = be_dict_find(info_node, "files", BE_LIST);
- trg_torrent_file_node *top_node = g_new0(trg_torrent_file_node, 1);
- trg_torrent_file_node *lastNode = NULL;
+ trg_files_tree_node *top_node = g_new0(trg_files_tree_node, 1);
+ trg_files_tree_node *lastNode = NULL;
int i;
/* Probably means single file mode. */
@@ -129,12 +115,11 @@ static trg_torrent_file_node *trg_parse_torrent_file_nodes(be_node *
if (!be_validate_node(file_node, BE_DICT)
|| !(lastNode =
- trg_torrent_file_node_insert(top_node, lastNode,
- file_node, i,
- total_length))) {
+ trg_file_parser_node_insert(top_node, lastNode,
+ file_node, i))) {
/* Unexpected format. Throw away everything, file indexes need to
* be correct. */
- trg_torrent_file_node_free(top_node);
+ trg_files_tree_node_free(top_node);
return NULL;
}
}
@@ -187,9 +172,9 @@ trg_torrent_file *trg_parse_torrent_file(const gchar * filename)
ret->name = g_strdup(name_node->val.s);
ret->top_node =
- trg_parse_torrent_file_nodes(info_node, &(ret->total_length));
+ trg_parse_torrent_file_nodes(info_node);
if (!ret->top_node) {
- trg_torrent_file_node *file_node;
+ trg_files_tree_node *file_node;
be_node *length_node = be_dict_find(info_node, "length", BE_INT);
if (!length_node) {
@@ -198,8 +183,8 @@ trg_torrent_file *trg_parse_torrent_file(const gchar * filename)
goto out;
}
- file_node = g_new0(trg_torrent_file_node, 1);
- file_node->length = ret->total_length =
+ file_node = g_new0(trg_files_tree_node, 1);
+ file_node->length =
(gint64) (length_node->val.i);
file_node->name = g_strdup(ret->name);
ret->top_node = file_node;
diff --git a/src/trg-file-parser.h b/src/trg-file-parser.h
index 1d7e116..f2d6fb7 100644
--- a/src/trg-file-parser.h
+++ b/src/trg-file-parser.h
@@ -17,18 +17,11 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-typedef struct {
- char *name;
- gint64 length;
- GList *children;
- guint index;
- gpointer parent;
-} trg_torrent_file_node;
+#include "trg-files-tree.h"
typedef struct {
char *name;
- trg_torrent_file_node *top_node;
- gint64 total_length;
+ trg_files_tree_node *top_node;
} trg_torrent_file;
void trg_torrent_file_free(trg_torrent_file * t);
diff --git a/src/trg-files-model.c b/src/trg-files-model.c
index 2280d49..521f99b 100644
--- a/src/trg-files-model.c
+++ b/src/trg-files-model.c
@@ -24,6 +24,7 @@
#include "protocol-constants.h"
#include "trg-files-model-common.h"
#include "trg-files-tree-view-common.h"
+#include "trg-files-tree.h"
#include "trg-files-model.h"
#include "trg-client.h"
#include "torrent.h"
@@ -65,105 +66,136 @@ static void trg_files_update_parent_progress(GtkTreeModel * model,
newCompleted = lastCompleted + increment;
gtk_tree_store_set(GTK_TREE_STORE(model), &tmp_iter,
- FILESCOL_BYTESCOMPLETED, newCompleted,
FILESCOL_PROGRESS, file_get_progress(length,
newCompleted),
+ FILESCOL_BYTESCOMPLETED, newCompleted,
-1);
back_iter = tmp_iter;
}
}
-static void trg_files_model_iter_new(TrgFilesModel * model,
- GtkTreeIter * iter, JsonObject * file,
- gint id)
+static void trg_files_tree_update_ancestors(
+ trg_files_tree_node *node)
{
- TrgFilesModelPrivate *priv = TRG_FILES_MODEL_GET_PRIVATE(model);
- gchar **elements = g_strsplit(file_get_name(file), "/", -1);
- gchar *existingName;
- gint i, existingId;
- GtkTreeRowReference *parentRowRef = NULL;
- GtkTreeIter parentIter;
-
- for (i = 0; elements[i]; i++) {
- GtkTreeIter *found = NULL;
+ trg_files_tree_node *back_iter = node;
+ gint pri_result = node->priority;
+ gint enabled_result = node->enabled;
+
+ while ((back_iter = back_iter->parent)) {
+ GList *li;
+ for (li = back_iter->children; li; li = g_list_next(li)) {
+ trg_files_tree_node *back_node = (trg_files_tree_node*)li->data;
+ gboolean stop = FALSE;
+
+ if (back_node->priority != pri_result) {
+ pri_result = TR_PRI_MIXED;
+ stop = TRUE;
+ }
- if (parentRowRef)
- rowref_to_iter(GTK_TREE_MODEL(model), parentRowRef,
- &parentIter);
+ if (back_node->enabled != enabled_result) {
+ enabled_result = TR_PRI_MIXED;
+ stop = TRUE;
+ }
- /* If this is the last component of the path, create a file node. */
+ if (stop)
+ break;
+ }
- if (!elements[i + 1]) {
- gtk_tree_store_append(GTK_TREE_STORE(model), iter,
- parentRowRef ? &parentIter : NULL);
- gtk_tree_store_set(GTK_TREE_STORE(model), iter, FILESCOL_NAME,
- elements[i], FILESCOL_SIZE,
- file_get_length(file), FILESCOL_ID, id, -1);
+ back_iter->bytesCompleted += node->bytesCompleted;
+ back_iter->length += node->length;
+ back_iter->priority = pri_result;
+ back_iter->enabled = enabled_result;
+ }
+}
- if (parentRowRef)
- trg_files_model_update_parents(GTK_TREE_MODEL(model), iter,
- FILESCOL_SIZE);
+static void store_add_node(GtkTreeStore * store, GtkTreeIter * parent,
+ trg_files_tree_node * node)
+{
+ GtkTreeIter child;
+ GList *li;
+
+ if (node->name) {
+ gdouble progress = file_get_progress(node->length, node->bytesCompleted);
+ gtk_tree_store_append(store, &child, parent);
+ gtk_tree_store_set(store, &child, FILESCOL_WANTED, node->enabled,
+ FILESCOL_PROGRESS, progress,
+ FILESCOL_SIZE, node->length,
+ FILESCOL_ID, node->children ? -1 : node->index,
+ FILESCOL_PRIORITY, node->priority, FILESCOL_NAME, node->name,
+ -1);
+ }
- break;
- }
+ for (li = node->children; li; li = g_list_next(li))
+ store_add_node(store, node->name ? &child : NULL,
+ (trg_files_tree_node *) li->data);
+}
- /* Search for the directory this files goes under, under the saved
- * GtkTreeRowReferece *parent. */
-
- if (gtk_tree_model_iter_children(GTK_TREE_MODEL(model), iter,
- parentRowRef ? &parentIter :
- NULL)) {
- do {
- gtk_tree_model_get(GTK_TREE_MODEL(model), iter,
- FILESCOL_NAME, &existingName,
- FILESCOL_ID, &existingId, -1);
-
- if (existingId == -1
- && !g_strcmp0(elements[i], existingName)) {
- found = iter;
- iter_to_row_reference(GTK_TREE_MODEL(model), iter,
- &parentRowRef);
- }
-
- g_free(existingName);
-
- if (found)
- break;
- } while (gtk_tree_model_iter_next
- (GTK_TREE_MODEL(model), iter));
+static trg_files_tree_node
+ * trg_file_parser_node_insert(trg_files_tree_node * top,
+ trg_files_tree_node * last,
+ JsonObject *file, gint index,
+ JsonArray *enabled, JsonArray *priorities)
+{
+ gchar **path = g_strsplit(file_get_name(file), "/", -1);
+ trg_files_tree_node *lastIter = last;
+ GList *parentList = NULL;
+ gchar *path_el;
+ GList *li;
+ int i;
+
+ if (lastIter)
+ while ((lastIter = lastIter->parent))
+ parentList = g_list_prepend(parentList, lastIter);
+
+ li = parentList;
+ lastIter = NULL;
+
+ /* Iterate over the path list which contains each file/directory
+ * component of the path in order.
+ */
+ for (i = 0; (path_el = path[i]); i++) {
+ gboolean isFile = !path[i + 1];
+ trg_files_tree_node *target_node = NULL;
+
+ if (li && !isFile) {
+ trg_files_tree_node *lastPathNode =
+ (trg_files_tree_node *) li->data;
+
+ if (!g_strcmp0(lastPathNode->name, path[i]))
+ target_node = lastPathNode;
+
+ li = g_list_next(li);
}
- if (!found) {
- GValue gvalue = { 0 };
+ if (!target_node) {
+ target_node = g_new0(trg_files_tree_node, 1);
+ target_node->name = g_strdup(path[i]);
+ target_node->parent = lastIter;
- gtk_tree_store_append(GTK_TREE_STORE(model), iter,
- parentRowRef ? &parentIter : NULL);
- gtk_tree_store_set(GTK_TREE_STORE(model), iter,
- FILESCOL_PRIORITY, TR_PRI_UNSET,
- FILESCOL_NAME, elements[i], -1);
+ if (lastIter)
+ lastIter->children =
+ g_list_append(lastIter->children, target_node);
+ else
+ top->children = g_list_append(top->children, target_node);
+ }
- 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);
+ lastIter = target_node;
- memset(&gvalue, 0, sizeof(GValue));
- g_value_init(&gvalue, G_TYPE_INT);
- g_value_set_int(&gvalue, TR_PRI_UNSET);
- gtk_tree_store_set_value(GTK_TREE_STORE(model), iter,
- FILESCOL_PRIORITY, &gvalue);
+ if (isFile) {
+ target_node->length = file_get_length(file);
+ target_node->bytesCompleted = file_get_bytes_completed(file);
+ target_node->index = index;
+ target_node->enabled = (gint)json_array_get_int_element(enabled, index);
+ target_node->priority = (gint)json_array_get_int_element(priorities, index);
- iter_to_row_reference(GTK_TREE_MODEL(model), iter,
- &parentRowRef);
+ trg_files_tree_update_ancestors(target_node);
}
}
- if (parentRowRef)
- gtk_tree_row_reference_free(parentRowRef);
+ g_list_free(parentList);
- g_strfreev(elements);
- priv->n_items++;
+ return lastIter;
}
void trg_files_model_set_accept(TrgFilesModel * model, gboolean accept)
@@ -174,17 +206,15 @@ void trg_files_model_set_accept(TrgFilesModel * model, gboolean accept)
static void trg_files_model_iter_update(TrgFilesModel * model,
GtkTreeIter * filesIter,
- gboolean isFirst,
JsonObject * file,
JsonArray * wantedArray,
JsonArray * prioritiesArray,
- int id)
+ gint id)
{
TrgFilesModelPrivate *priv = TRG_FILES_MODEL_GET_PRIVATE(model);
-
gint64 fileLength = file_get_length(file);
gint64 fileCompleted = file_get_bytes_completed(file);
- gint64 increment;
+ gint64 lastCompleted;
gboolean wanted =
json_node_get_int(json_array_get_element(wantedArray, id))
@@ -193,36 +223,20 @@ static void trg_files_model_iter_update(TrgFilesModel * model,
json_node_get_int(json_array_get_element(prioritiesArray, id));
gdouble progress = file_get_progress(fileLength, fileCompleted);
- if (isFirst) {
- increment = fileCompleted;
- } else {
- gint64 lastCompleted;
- gtk_tree_model_get(GTK_TREE_MODEL(model), filesIter,
+ gtk_tree_model_get(GTK_TREE_MODEL(model), filesIter,
FILESCOL_BYTESCOMPLETED, &lastCompleted, -1);
- increment = fileCompleted - lastCompleted;
- }
gtk_tree_store_set(GTK_TREE_STORE(model), filesIter, FILESCOL_PROGRESS,
progress, FILESCOL_BYTESCOMPLETED, fileCompleted,
-1);
trg_files_update_parent_progress(GTK_TREE_MODEL(model), filesIter,
- increment);
+ fileCompleted - lastCompleted);
if (priv->accept)
gtk_tree_store_set(GTK_TREE_STORE(model), filesIter,
FILESCOL_WANTED, wanted, FILESCOL_PRIORITY,
priority, -1);
-
- if (isFirst) {
- trg_files_tree_model_propogate_change_up(GTK_TREE_MODEL(model),
- filesIter,
- FILESCOL_PRIORITY,
- priority);
- trg_files_tree_model_propogate_change_up(GTK_TREE_MODEL(model),
- filesIter,
- FILESCOL_WANTED, wanted);
- }
}
static void trg_files_model_class_init(TrgFilesModelClass * klass)
@@ -261,7 +275,7 @@ gboolean trg_files_model_update_foreach(GtkListStore * model,
if (id >= 0) {
file = json_node_get_object(g_list_nth_data(files, id));
- trg_files_model_iter_update(TRG_FILES_MODEL(model), iter, FALSE,
+ trg_files_model_iter_update(TRG_FILES_MODEL(model), iter,
file, priv->wanted, priv->priorities,
id);
}
@@ -274,42 +288,39 @@ void trg_files_model_update(TrgFilesModel * model, gint64 updateSerial,
{
TrgFilesModelPrivate *priv = TRG_FILES_MODEL_GET_PRIVATE(model);
GList *filesList, *li;
- GtkTreeIter filesIter;
JsonObject *file;
gint j = 0;
+ guint n_updates;
priv->torrentId = torrent_get_id(t);
priv->priorities = torrent_get_priorities(t);
priv->wanted = torrent_get_wanted(t);
filesList = json_array_get_elements(torrent_get_files(t));
+ n_updates = g_list_length(filesList);
- if (mode == TORRENT_GET_MODE_FIRST) {
+ if (mode == TORRENT_GET_MODE_FIRST || priv->n_items != n_updates) {
+ trg_files_tree_node *top_node = g_new0(trg_files_tree_node, 1);
+ trg_files_tree_node *lastNode = NULL;
gtk_tree_store_clear(GTK_TREE_STORE(model));
priv->accept = TRUE;
+
for (li = filesList; li; li = g_list_next(li)) {
file = json_node_get_object((JsonNode *) li->data);
- trg_files_model_iter_new(model, &filesIter, file, j);
- trg_files_model_iter_update(model, &filesIter, TRUE, file,
- priv->wanted, priv->priorities, j);
- j++;
+ lastNode =
+ trg_file_parser_node_insert(top_node, lastNode,
+ file, j++, priv->wanted, priv->priorities);
}
+
+ priv->n_items = j;
+
+ store_add_node(GTK_TREE_STORE(model), NULL, top_node);
+
} else {
- guint n_updates = g_list_length(filesList);
gtk_tree_model_foreach(GTK_TREE_MODEL(model),
(GtkTreeModelForeachFunc)
trg_files_model_update_foreach, filesList);
- if (n_updates > priv->n_items) {
- gint n_new = n_updates - priv->n_items;
- for (j = n_updates - n_new; j < n_updates; j++) {
- file = json_node_get_object(g_list_nth_data(filesList, j));
- trg_files_model_iter_new(model, &filesIter, file, j);
- trg_files_model_iter_update(model, &filesIter, TRUE, file,
- priv->wanted, priv->priorities,
- j);
- }
- }
}
g_list_free(filesList);
diff --git a/src/trg-files-tree-view-common.c b/src/trg-files-tree-view-common.c
index 5845778..c405323 100644
--- a/src/trg-files-tree-view-common.c
+++ b/src/trg-files-tree-view-common.c
@@ -184,6 +184,7 @@ gboolean trg_files_tree_view_onViewButtonPressed(GtkWidget * w,
GdkEventButton * event,
gint pri_id,
gint enabled_id,
+ gboolean one_click,
GCallback low_cb,
GCallback normal_cb,
GCallback high_cb,
@@ -197,7 +198,7 @@ gboolean trg_files_tree_view_onViewButtonPressed(GtkWidget * w,
gboolean handled = FALSE;
GtkTreeView *treeview = GTK_TREE_VIEW(w);
- if (event->type == GDK_BUTTON_PRESS && event->button == 1
+ if (one_click && event->type == GDK_BUTTON_PRESS && event->button == 1
&& !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK))
&& getAndSelectEventPath(treeview, event, &col, &path)) {
handled =
diff --git a/src/trg-files-tree-view-common.h b/src/trg-files-tree-view-common.h
index 1dccf7f..de21e43 100644
--- a/src/trg-files-tree-view-common.h
+++ b/src/trg-files-tree-view-common.h
@@ -20,16 +20,18 @@
#ifndef TRG_FILES_TREE_VIEW_COMMON_H_
#define TRG_FILES_TREE_VIEW_COMMON_H_
-gboolean
-trg_files_tree_view_onViewButtonPressed(GtkWidget * w,
- GdkEventButton * event,
- gint pri_id, gint enabled_id,
- GCallback low_cb,
- GCallback normal_cb,
- GCallback high_cb,
- GCallback wanted_cb,
- GCallback unwanted_cb,
- gpointer gdata);
+gboolean trg_files_tree_view_onViewButtonPressed(GtkWidget * w,
+ GdkEventButton * event,
+ gint pri_id,
+ gint enabled_id,
+ gboolean one_click,
+ GCallback low_cb,
+ GCallback normal_cb,
+ GCallback high_cb,
+ GCallback wanted_cb,
+ GCallback unwanted_cb,
+ gpointer gdata);
+
gboolean trg_files_tree_view_viewOnPopupMenu(GtkWidget * treeview,
GCallback low_cb,
GCallback normal_cb,
diff --git a/src/trg-files-tree-view.c b/src/trg-files-tree-view.c
index bf0d9c8..3aae35d 100644
--- a/src/trg-files-tree-view.c
+++ b/src/trg-files-tree-view.c
@@ -164,6 +164,7 @@ static gboolean view_onButtonPressed(GtkWidget * treeview,
trg_files_tree_view_onViewButtonPressed(treeview, event,
FILESCOL_PRIORITY,
FILESCOL_WANTED,
+ FALSE,
G_CALLBACK(set_low),
G_CALLBACK(set_normal),
G_CALLBACK(set_high),
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 1a1733c..d06f250 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -1879,7 +1879,8 @@ static void exec_cmd_cb(GtkWidget * w, gpointer data)
GList *selectedRows = gtk_tree_selection_get_selected_rows(selection,
&model);
GError *cmd_error = NULL;
- gchar *cmd_line, **argv;
+ gchar *cmd_line = NULL;
+ gchar **argv = NULL;
cmd_line = build_remote_exec_cmd(priv->client,
model,
@@ -1901,7 +1902,10 @@ static void exec_cmd_cb(GtkWidget * w, gpointer data)
g_list_foreach(selectedRows, (GFunc) gtk_tree_path_free, NULL);
g_list_free(selectedRows);
- g_strfreev(argv);
+
+ if (argv)
+ g_strfreev(argv);
+
g_free(cmd_line);
if (cmd_error) {
diff --git a/src/trg-torrent-add-dialog.c b/src/trg-torrent-add-dialog.c
index bf29b8b..0c25058 100644
--- a/src/trg-torrent-add-dialog.c
+++ b/src/trg-torrent-add-dialog.c
@@ -292,6 +292,7 @@ static gboolean onViewButtonPressed(GtkWidget * w, GdkEventButton * event,
{
return trg_files_tree_view_onViewButtonPressed(w, event, FC_PRIORITY,
FC_ENABLED,
+ TRUE,
G_CALLBACK(set_low),
G_CALLBACK(set_normal),
G_CALLBACK(set_high),
@@ -463,7 +464,7 @@ static void addTorrentFilters(GtkFileChooser * chooser)
}
static void store_add_node(GtkTreeStore * store, GtkTreeIter * parent,
- trg_torrent_file_node * node)
+ trg_files_tree_node * node)
{
GtkTreeIter child;
GList *li;
@@ -483,7 +484,7 @@ static void store_add_node(GtkTreeStore * store, GtkTreeIter * parent,
for (li = node->children; li; li = g_list_next(li))
store_add_node(store, node->name ? &child : NULL,
- (trg_torrent_file_node *) li->data);
+ (trg_files_tree_node *) li->data);
}
static void torrent_not_parsed_warning(GtkWindow * parent)
diff --git a/src/util.c b/src/util.c
index 1251ccb..d0b14c8 100644
--- a/src/util.c
+++ b/src/util.c
@@ -534,16 +534,21 @@ evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
#endif
}
-void iter_to_row_reference(GtkTreeModel * model, GtkTreeIter * iter,
- GtkTreeRowReference ** rr)
+GtkTreeRowReference* iter_to_row_reference(GtkTreeModel * model, GtkTreeIter * iter)
{
GtkTreePath *path = gtk_tree_model_get_path(model, iter);
+ GtkTreeRowReference *rr = gtk_tree_row_reference_new(model, path);
+ gtk_tree_path_free(path);
+ return rr;
+}
+void iter_replace_row_reference(GtkTreeModel * model, GtkTreeIter * iter,
+ GtkTreeRowReference ** rr)
+{
if (*rr)
gtk_tree_row_reference_free(*rr);
- *rr = gtk_tree_row_reference_new(model, path);
- gtk_tree_path_free(path);
+ *rr = iter_to_row_reference(model, iter);
}
void rowref_to_iter(GtkTreeModel * model, GtkTreeRowReference * rr,
diff --git a/src/util.h b/src/util.h
index f7d407e..1315529 100644
--- a/src/util.h
+++ b/src/util.h
@@ -89,9 +89,10 @@ GtkWidget *my_scrolledwin_new(GtkWidget * child);
gboolean is_url(gchar * string);
gboolean is_magnet(gchar * string);
GtkWidget *gtr_combo_box_new_enum(const char *text_1, ...);
-void iter_to_row_reference(GtkTreeModel * model, GtkTreeIter * iter,
+void iter_replace_row_reference(GtkTreeModel * model, GtkTreeIter * iter,
GtkTreeRowReference ** rr);
void rowref_to_iter(GtkTreeModel * model, GtkTreeRowReference * rr,
GtkTreeIter * iter);
+GtkTreeRowReference* iter_to_row_reference(GtkTreeModel * model, GtkTreeIter * iter);
#endif /* UTIL_H_ */