aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLRN <lrn1986@gmail.com>2012-11-13 06:01:07 +0000
committerLRN <lrn1986@gmail.com>2012-11-13 06:01:07 +0000
commit40d75854135331d537f01a18f146a5796fb841aa (patch)
tree3f406f4f2ceb36416dec536bdfbcdc4fe29be323
parent61fb78563fe73d9c47ca15b6bdb5be7bfa60cbc0 (diff)
downloadgnunet-gtk-40d75854135331d537f01a18f146a5796fb841aa.tar.gz
gnunet-gtk-40d75854135331d537f01a18f146a5796fb841aa.zip
Select next item in the list after starting the download
-rw-r--r--src/fs/gnunet-fs-gtk_common.c29
-rw-r--r--src/fs/gnunet-fs-gtk_common.h21
-rw-r--r--src/fs/gnunet-fs-gtk_event-handler.c6
3 files changed, 55 insertions, 1 deletions
diff --git a/src/fs/gnunet-fs-gtk_common.c b/src/fs/gnunet-fs-gtk_common.c
index 19b9f30e..36b1c897 100644
--- a/src/fs/gnunet-fs-gtk_common.c
+++ b/src/fs/gnunet-fs-gtk_common.c
@@ -545,5 +545,34 @@ GNUNET_GTK_get_reference_from_iter (GtkTreeModel *model, GtkTreeIter *iter)
545 return result; 545 return result;
546} 546}
547 547
548gboolean
549GNUNET_GTK_tree_model_get_next_flat_iter (GtkTreeModel *model, GtkTreeIter *iter, gboolean allow_children, GtkTreeIter *next_iter)
550{
551 GtkTreeIter current_iter = *iter;
552 while (TRUE)
553 {
554 GtkTreeIter tmp_iter;
555
556 tmp_iter = current_iter;
557 if (gtk_tree_model_iter_next (model, &tmp_iter))
558 {
559 *next_iter = tmp_iter;
560 return TRUE;
561 }
562 if (allow_children)
563 {
564 if (gtk_tree_model_iter_children (model, &tmp_iter, &current_iter))
565 {
566 *next_iter = tmp_iter;
567 return TRUE;
568 }
569 }
570 allow_children = FALSE;
571 if (!gtk_tree_model_iter_parent (model, &tmp_iter, &current_iter))
572 return FALSE;
573 current_iter = tmp_iter;
574 }
575 return FALSE;
576}
548 577
549/* end of gnunet-fs-gtk-common.c */ 578/* end of gnunet-fs-gtk-common.c */
diff --git a/src/fs/gnunet-fs-gtk_common.h b/src/fs/gnunet-fs-gtk_common.h
index 1bf4c258..0a13e59d 100644
--- a/src/fs/gnunet-fs-gtk_common.h
+++ b/src/fs/gnunet-fs-gtk_common.h
@@ -194,5 +194,26 @@ GNUNET_GTK_get_iter_from_reference (GtkTreeRowReference *rr, GtkTreeIter *iter);
194GtkTreeRowReference * 194GtkTreeRowReference *
195GNUNET_GTK_get_reference_from_iter (GtkTreeModel *model, GtkTreeIter *iter); 195GNUNET_GTK_get_reference_from_iter (GtkTreeModel *model, GtkTreeIter *iter);
196 196
197/**
198 * Fills "next_iter" with iterator for an item that comes next in the tree
199 * after "iter".
200 * Next item is, in order of precedence:
201 * 1) First child of "iter", if "iter" has children and "allow_children"
202 * is enabled.
203 * 2) Next sibling of "iter", unless "iter" is the last sibling.
204 * If none of those are present, function recursively checks parents of
205 * "iter" until it finds next item or runs out of parents.
206 *
207 * @param model a model to reference
208 * @param iter an iter that points to current row in the model
209 * @param allow_children whether child of "iter" is considered to be next.
210 * @param next_iter will be filled with the next row in the model on success
211 * @return TRUE if next_iter is set to a valid iter,
212 * FALSE if ran out of parents
213 */
214gboolean
215GNUNET_GTK_tree_model_get_next_flat_iter (GtkTreeModel *model,
216 GtkTreeIter *iter, gboolean allow_children, GtkTreeIter *next_iter);
217
197#endif 218#endif
198/* end of gnunet-fs-gtk-common.h */ 219/* end of gnunet-fs-gtk-common.h */
diff --git a/src/fs/gnunet-fs-gtk_event-handler.c b/src/fs/gnunet-fs-gtk_event-handler.c
index 96d88698..56bbbcb4 100644
--- a/src/fs/gnunet-fs-gtk_event-handler.c
+++ b/src/fs/gnunet-fs-gtk_event-handler.c
@@ -964,8 +964,8 @@ start_download2 ()
964 gchar *downloaddir; 964 gchar *downloaddir;
965 struct DownloadEntry *de; 965 struct DownloadEntry *de;
966 guint anonymity; 966 guint anonymity;
967
968 gboolean recursive; 967 gboolean recursive;
968 GtkTreeIter next_item;
969 969
970 tv = GTK_TREE_VIEW (gtk_builder_get_object (st->builder, "_search_result_frame")); 970 tv = GTK_TREE_VIEW (gtk_builder_get_object (st->builder, "_search_result_frame"));
971 sel = gtk_tree_view_get_selection (tv); 971 sel = gtk_tree_view_get_selection (tv);
@@ -1017,6 +1017,10 @@ start_download2 ()
1017 1017
1018 gtk_tree_path_free (path); 1018 gtk_tree_path_free (path);
1019 g_free (downloaddir); 1019 g_free (downloaddir);
1020
1021 if (GNUNET_GTK_tree_model_get_next_flat_iter (model, &iter, !recursive, &next_item))
1022 gtk_tree_selection_select_iter (sel, &next_item);
1023 GNUNET_FS_GTK_search_treeview_cursor_changed (tv, st);
1020} 1024}
1021 1025
1022/** 1026/**