GList *vficon_selection_get_list(ViewFile *vf)
{
GList *list = nullptr;
- GList *work, *work2;
- work = VFICON(vf)->selection;
- while (work)
+ for (GList *work = g_list_last(VFICON(vf)->selection); work; work = work->prev)
{
auto fd = static_cast<FileData *>(work->data);
g_assert(fd->magick == FD_MAGICK);
+ list = g_list_prepend(list, filelist_copy(fd->sidecar_files));
list = g_list_prepend(list, file_data_ref(fd));
-
- work2 = fd->sidecar_files;
- while (work2)
- {
- fd = static_cast<FileData *>(work2->data);
- list = g_list_prepend(list, file_data_ref(fd));
- work2 = work2->next;
- }
-
- work = work->next;
}
- list = g_list_reverse(list);
-
return list;
}
*-----------------------------------------------------------------------------
*/
struct ViewFileFindRowData {
- FileData *fd;
+ const FileData *fd;
GtkTreeIter *iter;
gboolean found;
gint row;
return FALSE;
}
-static gint vflist_find_row(ViewFile *vf, FileData *fd, GtkTreeIter *iter)
+static gint vflist_find_row(const ViewFile *vf, const FileData *fd, GtkTreeIter *iter)
{
GtkTreeModel *store;
ViewFileFindRowData data = {fd, iter, FALSE, 0};
GList *vflist_selection_get_one(ViewFile *vf, FileData *fd)
{
- GList *list = g_list_append(nullptr, file_data_ref(fd));
+ GList *list = nullptr;
if (fd->sidecar_files)
{
if (!gtk_tree_view_row_expanded(GTK_TREE_VIEW(vf->listview), tpath))
{
/* unexpanded - add whole group */
- GList *work = fd->sidecar_files;
- while (work)
- {
- auto sfd = static_cast<FileData *>(work->data);
- list = g_list_prepend(list, file_data_ref(sfd));
- work = work->next;
- }
+ list = filelist_copy(fd->sidecar_files);
}
gtk_tree_path_free(tpath);
}
- list = g_list_reverse(list);
}
- return list;
+ return g_list_prepend(list, file_data_ref(fd));
}
GList *vflist_pop_menu_file_list(ViewFile *vf)
GtkTreeSelection *selection;
GList *slist;
GList *list = nullptr;
- GList *work;
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview));
slist = gtk_tree_selection_get_selected_rows(selection, &store);
- work = slist;
- while (work)
+ for (GList *work = g_list_last(slist); work; work = work->prev)
{
auto tpath = static_cast<GtkTreePath *>(work->data);
FileData *fd;
gtk_tree_model_get_iter(store, &iter, tpath);
gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1);
- list = g_list_prepend(list, file_data_ref(fd));
-
if (!fd->parent && !gtk_tree_view_row_expanded(GTK_TREE_VIEW(vf->listview), tpath))
{
/* unexpanded - add whole group */
- GList *work2 = fd->sidecar_files;
- while (work2)
- {
- auto sfd = static_cast<FileData *>(work2->data);
- list = g_list_prepend(list, file_data_ref(sfd));
- work2 = work2->next;
- }
+ list = g_list_prepend(list, filelist_copy(fd->sidecar_files));
}
- work = work->next;
+ list = g_list_prepend(list, file_data_ref(fd));
}
g_list_free_full(slist, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free));
- return g_list_reverse(list);
+ return list;
}
GList *vflist_selection_get_list_by_index(ViewFile *vf)