summaryrefslogtreecommitdiff
path: root/src/trg-torrent-tree-view.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-02-08 10:14:46 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-02-08 10:14:46 +0000
commit2a1c6fc96ff03c84723ca1fb7d3a48e0cd3df115 (patch)
treedd4eec987c7dcb2b7f0c361831c697c95901f4c9 /src/trg-torrent-tree-view.c
parent3938a1340d62d6e207b117e0bc84ddb4f62cf6c8 (diff)
if the torrent selection changes as a result of an update, was possible that it would select another item which has no JSON but isn't removed from the model yet. use updateSerial and updateMutex to ignore these.
Diffstat (limited to 'src/trg-torrent-tree-view.c')
-rw-r--r--src/trg-torrent-tree-view.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/trg-torrent-tree-view.c b/src/trg-torrent-tree-view.c
index 9fc0a41..43a49db 100644
--- a/src/trg-torrent-tree-view.c
+++ b/src/trg-torrent-tree-view.c
@@ -60,14 +60,15 @@ static void trg_torrent_tree_view_init(TrgTorrentTreeView * tv)
TORRENT_COLUMN_RATIO, -1);
}
-gint get_first_selected(TrgTorrentTreeView * view, GtkTreeIter * iter,
+gint get_first_selected(trg_client *client, TrgTorrentTreeView * view, GtkTreeIter * iter,
JsonObject ** json)
{
GtkTreeModel *model;
GtkTreeSelection *selection;
GList *selectionList;
GList *firstNode;
- gint id = -1;
+ gint64 id = -1;
+ gint64 updateSerial = -1;
model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
@@ -76,9 +77,18 @@ gint get_first_selected(TrgTorrentTreeView * view, GtkTreeIter * iter,
if ((firstNode = g_list_first(selectionList)) != NULL) {
if (gtk_tree_model_get_iter(model, iter, firstNode->data) == TRUE) {
- gtk_tree_model_get(model, iter,
+ gboolean locked;
+ gtk_tree_model_get(model, iter,
TORRENT_COLUMN_JSON, json,
- TORRENT_COLUMN_ID, &id, -1);
+ TORRENT_COLUMN_ID, &id,
+ TORRENT_COLUMN_UPDATESERIAL, &updateSerial, -1);
+
+ locked = g_mutex_trylock(client->updateMutex);
+ if (locked)
+ g_mutex_unlock(client->updateMutex);
+
+ if (updateSerial < (locked ? client->updateSerial-1 : client->updateSerial))
+ id = -1;
}
}
@@ -94,7 +104,7 @@ trg_torrent_model_get_json_id_array_foreach(GtkTreeModel * model,
gpointer data)
{
JsonArray *output = (JsonArray *) data;
- gint id;
+ gint64 id;
gtk_tree_model_get(model, iter, TORRENT_COLUMN_ID, &id, -1);
json_array_add_int_element(output, id);
}