diff options
author | LRN <lrn1986@gmail.com> | 2012-11-13 06:01:07 +0000 |
---|---|---|
committer | LRN <lrn1986@gmail.com> | 2012-11-13 06:01:07 +0000 |
commit | 40d75854135331d537f01a18f146a5796fb841aa (patch) | |
tree | 3f406f4f2ceb36416dec536bdfbcdc4fe29be323 | |
parent | 61fb78563fe73d9c47ca15b6bdb5be7bfa60cbc0 (diff) | |
download | gnunet-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.c | 29 | ||||
-rw-r--r-- | src/fs/gnunet-fs-gtk_common.h | 21 | ||||
-rw-r--r-- | src/fs/gnunet-fs-gtk_event-handler.c | 6 |
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 | ||
548 | gboolean | ||
549 | GNUNET_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, ¤t_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, ¤t_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); | |||
194 | GtkTreeRowReference * | 194 | GtkTreeRowReference * |
195 | GNUNET_GTK_get_reference_from_iter (GtkTreeModel *model, GtkTreeIter *iter); | 195 | GNUNET_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 | */ | ||
214 | gboolean | ||
215 | GNUNET_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 | /** |