Merge merge-requests '495' and '458'
authorKlaus Ethgen <Klaus@Ethgen.de>
Sat, 8 Jul 2017 09:24:19 +0000 (10:24 +0100)
committerKlaus Ethgen <Klaus@Ethgen.de>
Sat, 8 Jul 2017 09:24:19 +0000 (10:24 +0100)
* github/merge-requests/495:
  Avoid c99 feature
  *phew* commented and simplified.
  Hopefully make it not crash
  It compiles!
  Remove all references to "IconData"
  update .gitignore
  Refactor: move view_file implementations to their own subdirectory.

* github/merge-requests/458:
  Add the ability to use regular expressions for Pan View keyword filtering.
  Add pan filtering to all of the pan view modes
  Revamp pan view filtering to support different modes and grouping.
  Move filter code into pan-fiew-filter.{c,h}
  Adds a keyword filtering feature to Timeline PanView.
  Pull the search UI construction code out into a distinct function.
  Start moving pan view search code to its own module

17 files changed:
.gitignore
doc/docbook/GuideOptionsGeneral.xml
doc/docbook/GuideReferenceConfig.xml
src/Makefile.am
src/bar_gps.c
src/cache_maint.c
src/cellrenderericon.c
src/layout_image.c
src/layout_util.c
src/typedefs.h
src/view_file.c
src/view_file/Makefile.am [new file with mode: 0644]
src/view_file/view_file_common.c [new file with mode: 0644]
src/view_file/view_file_icon.c [moved from src/view_file_icon.c with 77% similarity]
src/view_file/view_file_icon.h [moved from src/view_file_icon.h with 96% similarity]
src/view_file/view_file_list.c [moved from src/view_file_list.c with 99% similarity]
src/view_file/view_file_list.h [moved from src/view_file_list.h with 97% similarity]

index 4b906f6..8654fd2 100644 (file)
@@ -73,6 +73,10 @@ Makefile.in
 /src/pan-view/.deps
 /src/pan-view/.dirstamp
 
+# /src/view_file/
+/src/view_file/.deps
+/src/view_file/.dirstamp
+
 /build-stamp
 /debian/geeqie*
 /debian/files
index e6dfd0e..a24dc44 100644 (file)
@@ -68,7 +68,8 @@
         <listitem>\r
           <para>\r
             Enable this to save thumbnails to disk, subsequent requests for a thumbnail will be faster. Thumbnails are cached into:\r
-            <programlisting>$HOME/.cache/.geeqie/thumbnails</programlisting>\r
+            <programlisting>$XDG_CACHE_HOME/geeqie/thumbnails/</programlisting>\r
+            <programlisting>($~/.cache/geeqie/thumbnails/)</programlisting>\r
             Refer to\r
             <link linkend="GuideReferenceThumbnails">Thumbnails Reference</link>\r
             for additional details.\r
index 6be6984..d78fc16 100644 (file)
@@ -2,9 +2,14 @@
 <section id="GuideReferenceConfig">\r
   <title id="titleGuideReferenceConfig">Configuration Files and Locations</title>\r
   <para>The following data lists the locations Geeqie uses for various actions. The uppercase symbols are environment variables. If they are not set on your system the fallback locations are listed in parentheses.</para>\r
+  <para>\r
+    Geqqie will first attempt to load a configuration file from:\r
+    <programlisting xml:space="preserve">/etc/geeqie/geeqierc.xml</programlisting>\r
+  </para>\r
+  <para>It will then continue with the following locations.</para>\r
   <para>\r
     Most of Geeqie's configuration files are contained in the folder, and sub-folders of:\r
-    <programlisting xml:space="preserve">$HOME/$XDG_CONFIG_HOME/geeqie/</programlisting>\r
+    <programlisting xml:space="preserve">$XDG_CONFIG_HOME/geeqie/</programlisting>\r
     <programlisting xml:space="preserve">($~/.config/geeqie/)</programlisting>\r
   </para>\r
   <para>\r
@@ -36,8 +41,9 @@
     <programlisting xml:space="preserve">.../accels</programlisting>\r
   </para>\r
   <para>\r
-    The default location for Collections is in the folder:\r
-    <programlisting xml:space="preserve">$HOME/.local/share/geeqie/collections</programlisting>\r
+    The location for Collections is in the folder:\r
+    <programlisting xml:space="preserve">$XDG_DATA_HOME/geeqie/collections</programlisting>\r
+    <programlisting xml:space="preserve">($~/.local/share/geeqie/collections)</programlisting>\r
   </para>\r
   <para>\r
     The lirc\r
index 3900a39..15bdf1b 100644 (file)
@@ -81,12 +81,14 @@ extra_SLIK = \
        $(extra_ICONS)
 
 include $(srcdir)/pan-view/Makefile.am
+include $(srcdir)/view_file/Makefile.am
 
 bin_PROGRAMS = geeqie
 
 geeqie_SOURCES = \
        $(module_SLIK)  \
        $(module_pan_view)      \
+       $(module_view_file)     \
        ClayRGB1998.icc \
        ClayRGB1998_icc.h \
        advanced_exif.c \
@@ -251,10 +253,6 @@ geeqie_SOURCES = \
        view_dir_tree.h \
        view_file.c     \
        view_file.h     \
-       view_file_list.c        \
-       view_file_list.h        \
-       view_file_icon.c        \
-       view_file_icon.h        \
        window.c        \
        window.h        \
        lua.c           \
index 40bb368..fa0213d 100644 (file)
@@ -230,7 +230,7 @@ static void bar_pane_gps_close_save_cb(GenericDialog *gd, gpointer data)
 
        if (info == TARGET_TEXT_PLAIN)
                {
-               location = decode_geo_parameters(gtk_selection_data_get_data(selection_data));
+               location = decode_geo_parameters((gchar *)gtk_selection_data_get_data(selection_data));
                if (!(g_strstr_len(location,-1,"Error")))
                        {
                        latlong = g_strsplit(location, " ", 2);
index 07aa4c3..ed92b54 100644 (file)
@@ -138,6 +138,7 @@ static gboolean cache_maintain_home_cb(gpointer data)
        gboolean still_have_a_file = TRUE;
        gsize base_length;
        const gchar *cache_folder;
+       gboolean filter_disable;
 
        if (cm->metadata)
                {
@@ -162,6 +163,13 @@ static gboolean cache_maintain_home_cb(gpointer data)
 
        DEBUG_1("purge chk (%d) \"%s\"", (cm->clear && !cm->metadata), fd->path);
 
+/**
+ * It is necessary to disable the file filter when clearing the cache,
+ * otherwise the .sim (file similarity) files are not deleted.
+ */
+       filter_disable = options->file_filter.disable;
+       options->file_filter.disable = TRUE;
+
        if (g_list_find(cm->done_list, fd) == NULL)
                {
                cm->done_list = g_list_prepend(cm->done_list, fd);
@@ -198,6 +206,8 @@ static gboolean cache_maintain_home_cb(gpointer data)
                                }
                        }
                }
+       options->file_filter.disable = filter_disable;
+
        filelist_free(list);
 
        cm->list = g_list_concat(dlist, cm->list);
@@ -1222,7 +1232,7 @@ void cache_manager_show(void)
        button = pref_table_button(table, 0, 1, GTK_STOCK_DELETE, _("Clear cache"), FALSE,
                                   G_CALLBACK(cache_manager_main_clear_cb), cache_manager);
        gtk_size_group_add_widget(sizegroup, button);
-       pref_table_label(table, 1, 1, _("Delete all cached thumbnails."), 0.0);
+       pref_table_label(table, 1, 1, _("Delete all cached data."), 0.0);
 
 
        group = pref_group_new(gd->vbox, FALSE, _("Shared thumbnail cache"), GTK_ORIENTATION_VERTICAL);
index cc815ec..5f42e1c 100644 (file)
@@ -683,7 +683,11 @@ gqv_cell_renderer_icon_render(GtkCellRenderer              *cell,
        GdkPixbuf *pixbuf;
        const gchar *text;
        GdkRectangle cell_rect;
+#if GTK_CHECK_VERSION(3,0,0)
+       GtkStateFlags state;
+#else
        GtkStateType state;
+#endif
        gint xpad, ypad;
 
 
@@ -712,16 +716,28 @@ gqv_cell_renderer_icon_render(GtkCellRenderer             *cell,
        if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
                {
                if (gtk_widget_has_focus(widget))
+#if GTK_CHECK_VERSION(3,0,0)
+                       state = GTK_STATE_FLAG_SELECTED;
+               else
+                       state = GTK_STATE_FLAG_ACTIVE;
+#else
                        state = GTK_STATE_SELECTED;
                else
                        state = GTK_STATE_ACTIVE;
+#endif
                }
        else
                {
                if (gtk_widget_get_state(widget) == GTK_STATE_INSENSITIVE)
+#if GTK_CHECK_VERSION(3,0,0)
+                       state = GTK_STATE_FLAG_INSENSITIVE;
+               else
+                       state = GTK_STATE_FLAG_NORMAL;
+#else
                        state = GTK_STATE_INSENSITIVE;
                else
                        state = GTK_STATE_NORMAL;
+#endif
                }
 
 #if GTK_CHECK_VERSION(3,0,0)
index 0872612..8289cb7 100644 (file)
@@ -1070,7 +1070,6 @@ void layout_image_alter_orientation(LayoutWindow *lw, AlterType type)
        GtkTreePath *tpath;
        FileData *fd_n;
        GtkTreeIter iter;
-       IconData *id;
 
        if (!lw || !lw->vf) return;
 
@@ -1089,8 +1088,7 @@ void layout_image_alter_orientation(LayoutWindow *lw, AlterType type)
                {
                if (lw->vf->type == FILEVIEW_ICON)
                        {
-                       id = work->data;
-                       fd_n = id->fd;
+                       fd_n = work->data;
                        work = work->next;
                        }
                else
@@ -1120,7 +1118,6 @@ void layout_image_rating(LayoutWindow *lw, const gchar *rating)
        GtkTreePath *tpath;
        FileData *fd_n;
        GtkTreeIter iter;
-       IconData *id;
 
        if (!lw || !lw->vf) return;
 
@@ -1139,8 +1136,7 @@ void layout_image_rating(LayoutWindow *lw, const gchar *rating)
                {
                if (lw->vf->type == FILEVIEW_ICON)
                        {
-                       id = work->data;
-                       fd_n = id->fd;
+                       fd_n = work->data;
                        work = work->next;
                        }
                else
index fc431c8..106f8dc 100644 (file)
@@ -463,7 +463,6 @@ static void layout_menu_write_rotate(GtkToggleAction *action, gpointer data, gbo
        GtkTreePath *tpath;
        FileData *fd_n;
        GtkTreeIter iter;
-       IconData *id;
        gchar *rotation;
        gchar *command;
        gint run_result;
@@ -489,8 +488,7 @@ static void layout_menu_write_rotate(GtkToggleAction *action, gpointer data, gbo
                {
                if (lw->vf->type == FILEVIEW_ICON)
                        {
-                       id = work->data;
-                       fd_n = id->fd;
+                       fd_n = work->data;
                        work = work->next;
                        }
                else
index f7725f2..9d7db51 100644 (file)
@@ -252,6 +252,13 @@ typedef enum {
 
 #define MAX_SPLIT_IMAGES 4
 
+typedef enum {
+       SELECTION_NONE          = 0,
+       SELECTION_SELECTED      = 1 << 0,
+       SELECTION_PRELIGHT      = 1 << 1,
+       SELECTION_FOCUS         = 1 << 2
+} SelectionType;
+
 typedef struct _ImageLoader ImageLoader;
 typedef struct _ThumbLoader ThumbLoader;
 
@@ -575,6 +582,8 @@ struct _FileData {
        GHashTable *modified_xmp; // hash table which contains unwritten xmp metadata in format: key->list of string values
        GList *cached_metadata;
        gint rating;
+
+       SelectionType selected;  // Used by view_file_icon.
 };
 
 struct _LayoutOptions
@@ -823,6 +832,7 @@ struct _ViewDirInfoTree
 struct _ViewFile
 {
        FileViewType type;
+       // TODO(xsdg): Turn this into a union (see VFLIST and VFICON from view_file.h).
        gpointer info;
 
        GtkWidget *widget;
@@ -876,20 +886,6 @@ struct _ViewFileInfoList
        guint select_idle_id; /* event source id */
 };
 
-typedef enum {
-       SELECTION_NONE          = 0,
-       SELECTION_SELECTED      = 1 << 0,
-       SELECTION_PRELIGHT      = 1 << 1,
-       SELECTION_FOCUS         = 1 << 2
-} SelectionType;
-
-typedef struct _IconData IconData;
-struct _IconData
-{
-       SelectionType selected;
-       FileData *fd;
-};
-
 struct _ViewFileInfoIcon
 {
        /* table stuff */
@@ -897,15 +893,15 @@ struct _ViewFileInfoIcon
        gint rows;
 
        GList *selection;
-       struct _IconData *prev_selection;
+       FileData *prev_selection;
 
        GtkWidget *tip_window;
        guint tip_delay_id; /* event source id */
-       struct _IconData *tip_id;
+       FileData *tip_fd;
 
-       struct _IconData *click_id;
+       FileData *click_fd;
 
-       struct _IconData *focus_id;
+       FileData *focus_fd;
        gint focus_row;
        gint focus_column;
 
index 7fc5017..cd4cf09 100644 (file)
@@ -31,8 +31,8 @@
 #include "ui_menu.h"
 #include "ui_fileops.h"
 #include "utilops.h"
-#include "view_file_list.h"
-#include "view_file_icon.h"
+#include "view_file/view_file_list.h"
+#include "view_file/view_file_icon.h"
 
 /*
  *-----------------------------------------------------------------------------
@@ -555,7 +555,7 @@ GtkWidget *vf_pop_menu(ViewFile *vf)
                active = (VFLIST(vf)->click_fd != NULL);
                break;
        case FILEVIEW_ICON:
-               active = (VFICON(vf)->click_id != NULL);
+               active = (VFICON(vf)->click_fd != NULL);
                break;
        }
 
diff --git a/src/view_file/Makefile.am b/src/view_file/Makefile.am
new file mode 100644 (file)
index 0000000..6837e72
--- /dev/null
@@ -0,0 +1,5 @@
+module_view_file = \
+       %D%/view_file_icon.c    \
+       %D%/view_file_icon.h    \
+       %D%/view_file_list.c    \
+       %D%/view_file_list.h
diff --git a/src/view_file/view_file_common.c b/src/view_file/view_file_common.c
new file mode 100644 (file)
index 0000000..959aa66
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ *  This file is a part of Geeqie project (http://www.geeqie.org/).
+ *  Copyright (C) 2008 - 2016 The Geeqie Team
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the Free
+ *  Software Foundation; either version 2 of the License, or (at your option)
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but WITHOUT
+ *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ *  more details.
+ */
+
+guint vfcommon_count(ViewFile *vf, gint64 *bytes)
+{
+       if (bytes)
+               {
+               gint64 b = 0;
+               GList *work;
+
+               work = vf->list;
+               while (work)
+                       {
+                       FileData *fd = work->data;
+                       work = work->next;
+
+                       b += fd->size;
+                       }
+
+               *bytes = b;
+               }
+
+       return g_list_length(vf->list);
+}
+
similarity index 77%
rename from src/view_file_icon.c
rename to src/view_file/view_file_icon.c
index 52e13e9..6fbc7d2 100644 (file)
@@ -60,61 +60,10 @@ enum {
        FILE_COLUMN_COUNT
 };
 
-static gint vficon_index_by_id(ViewFile *vf, IconData *in_id);
-
-static IconData *vficon_icon_data(ViewFile *vf, FileData *fd)
-{
-       IconData *id = NULL;
-       GList *work;
-
-       if (!fd) return NULL;
-       work = vf->list;
-       while (work && !id)
-               {
-               IconData *chk = work->data;
-               work = work->next;
-               if (chk->fd == fd) id = chk;
-               }
-       return id;
-}
-
-static void iconlist_free(GList *list)
-{
-       GList *work = list;
-       while (work)
-               {
-               IconData *id = work->data;
-               file_data_unref(id->fd);
-               g_free(id);
-               work = work->next;
-               }
-
-       g_list_free(list);
-
-}
-
-gint iconlist_sort_file_cb(gpointer a, gpointer b)
-{
-       IconData *ida = a;
-       IconData *idb = b;
-       return filelist_sort_compare_filedata(ida->fd, idb->fd);
-}
-
-GList *iconlist_sort(GList *list, SortType method, gboolean ascend)
-{
-       return filelist_sort_full(list, method, ascend, (GCompareFunc) iconlist_sort_file_cb);
-}
-
-GList *iconlist_insert_sort(GList *list, IconData *id, SortType method, gboolean ascend)
-{
-       return filelist_insert_sort_full(list, id, method, ascend, (GCompareFunc) iconlist_sort_file_cb);
-}
-
-
 static void vficon_toggle_filenames(ViewFile *vf);
-static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter);
+static void vficon_selection_remove(ViewFile *vf, FileData *id, SelectionType mask, GtkTreeIter *iter);
 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gboolean relative);
-static void vficon_set_focus(ViewFile *vf, IconData *id);
+static void vficon_set_focus(ViewFile *vf, FileData *fd);
 static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gboolean force);
 
 
@@ -131,23 +80,23 @@ GList *vficon_selection_get_one(ViewFile *vf, FileData *fd)
 
 GList *vficon_pop_menu_file_list(ViewFile *vf)
 {
-       if (!VFICON(vf)->click_id) return NULL;
+       if (!VFICON(vf)->click_fd) return NULL;
 
-       if (VFICON(vf)->click_id->selected & SELECTION_SELECTED)
+       if (VFICON(vf)->click_fd->selected & SELECTION_SELECTED)
                {
                return vf_selection_get_list(vf);
                }
 
-       return vficon_selection_get_one(vf, VFICON(vf)->click_id->fd);
+       return vficon_selection_get_one(vf, VFICON(vf)->click_fd);
 }
 
 void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data)
 {
        ViewFile *vf = data;
 
-       if (!VFICON(vf)->click_id) return;
+       if (!VFICON(vf)->click_fd) return;
 
-       if (VFICON(vf)->click_id->selected & SELECTION_SELECTED)
+       if (VFICON(vf)->click_fd->selected & SELECTION_SELECTED)
                {
                GList *list;
 
@@ -157,7 +106,7 @@ void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data)
                }
        else
                {
-               view_window_new(VFICON(vf)->click_id->fd);
+               view_window_new(VFICON(vf)->click_fd);
                }
 }
 
@@ -185,8 +134,8 @@ void vficon_pop_menu_refresh_cb(GtkWidget *widget, gpointer data)
 void vficon_popup_destroy_cb(GtkWidget *widget, gpointer data)
 {
        ViewFile *vf = data;
-       vficon_selection_remove(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, NULL);
-       VFICON(vf)->click_id = NULL;
+       vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, NULL);
+       VFICON(vf)->click_fd = NULL;
        vf->popup = NULL;
 }
 
@@ -196,15 +145,15 @@ void vficon_popup_destroy_cb(GtkWidget *widget, gpointer data)
  *-------------------------------------------------------------------
  */
 
-static void vficon_send_layout_select(ViewFile *vf, IconData *id)
+static void vficon_send_layout_select(ViewFile *vf, FileData *fd)
 {
        FileData *read_ahead_fd = NULL;
        FileData *sel_fd;
        FileData *cur_fd;
 
-       if (!vf->layout || !id || !id->fd) return;
+       if (!vf->layout || !fd) return;
 
-       sel_fd = id->fd;
+       sel_fd = fd;
 
        cur_fd = layout_image_get_fd(vf->layout);
        if (sel_fd == cur_fd) return; /* no change */
@@ -213,7 +162,7 @@ static void vficon_send_layout_select(ViewFile *vf, IconData *id)
                {
                gint row;
 
-               row = g_list_index(vf->list, id);
+               row = g_list_index(vf->list, fd);
                if (row > vficon_index_by_fd(vf, cur_fd) &&
                    (guint) (row + 1) < vf_count(vf, NULL))
                        {
@@ -257,11 +206,11 @@ static gint vficon_get_icon_width(ViewFile *vf)
  *-------------------------------------------------------------------
  */
 
-static gboolean vficon_find_position(ViewFile *vf, IconData *id, gint *row, gint *col)
+static gboolean vficon_find_position(ViewFile *vf, FileData *fd, gint *row, gint *col)
 {
        gint n;
 
-       n = g_list_index(vf->list, id);
+       n = g_list_index(vf->list, fd);
 
        if (n < 0) return FALSE;
 
@@ -271,20 +220,20 @@ static gboolean vficon_find_position(ViewFile *vf, IconData *id, gint *row, gint
        return TRUE;
 }
 
-static gboolean vficon_find_iter(ViewFile *vf, IconData *id, GtkTreeIter *iter, gint *column)
+static gboolean vficon_find_iter(ViewFile *vf, FileData *fd, GtkTreeIter *iter, gint *column)
 {
        GtkTreeModel *store;
        gint row, col;
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
-       if (!vficon_find_position(vf, id, &row, &col)) return FALSE;
+       if (!vficon_find_position(vf, fd, &row, &col)) return FALSE;
        if (!gtk_tree_model_iter_nth_child(store, iter, NULL, row)) return FALSE;
        if (column) *column = col;
 
        return TRUE;
 }
 
-static IconData *vficon_find_data(ViewFile *vf, gint row, gint col, GtkTreeIter *iter)
+static FileData *vficon_find_data(ViewFile *vf, gint row, gint col, GtkTreeIter *iter)
 {
        GtkTreeModel *store;
        GtkTreeIter p;
@@ -307,7 +256,7 @@ static IconData *vficon_find_data(ViewFile *vf, gint row, gint col, GtkTreeIter
        return NULL;
 }
 
-static IconData *vficon_find_data_by_coord(ViewFile *vf, gint x, gint y, GtkTreeIter *iter)
+static FileData *vficon_find_data_by_coord(ViewFile *vf, gint x, gint y, GtkTreeIter *iter)
 {
        GtkTreePath *tpath;
        GtkTreeViewColumn *column;
@@ -346,21 +295,19 @@ static void vficon_mark_toggled_cb(GtkCellRendererToggle *cell, gchar *path_str,
        gint column;
        GList *list;
        guint toggled_mark;
-       IconData *id;
+       FileData *fd;
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
-       if (!path || !gtk_tree_model_get_iter(store, &row, path))
-               return;
+       if (!path || !gtk_tree_model_get_iter(store, &row, path)) return;
 
        gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1);
 
        column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column_number"));
        g_object_get(G_OBJECT(cell), "toggled_mark", &toggled_mark, NULL);
 
-       id = g_list_nth_data(list, column);
-       if (id)
+       fd = g_list_nth_data(list, column);
+       if (fd)
                {
-               FileData *fd = id->fd;
                file_data_set_mark(fd, toggled_mark, !file_data_get_mark(fd, toggled_mark));
                }
 }
@@ -394,14 +341,14 @@ static void tip_show(ViewFile *vf)
        gdk_window_get_pointer(gtk_tree_view_get_bin_window(GTK_TREE_VIEW(vf->listview)), &x, &y, NULL);
 #endif
 
-       VFICON(vf)->tip_id = vficon_find_data_by_coord(vf, x, y, NULL);
-       if (!VFICON(vf)->tip_id) return;
+       VFICON(vf)->tip_fd = vficon_find_data_by_coord(vf, x, y, NULL);
+       if (!VFICON(vf)->tip_fd) return;
 
        VFICON(vf)->tip_window = gtk_window_new(GTK_WINDOW_POPUP);
        gtk_window_set_resizable(GTK_WINDOW(VFICON(vf)->tip_window), FALSE);
        gtk_container_set_border_width(GTK_CONTAINER(VFICON(vf)->tip_window), 2);
 
-       label = gtk_label_new(VFICON(vf)->tip_id->fd->name);
+       label = gtk_label_new(VFICON(vf)->tip_fd->name);
 
        g_object_set_data(G_OBJECT(VFICON(vf)->tip_window), "tip_label", label);
        gtk_container_add(GTK_CONTAINER(VFICON(vf)->tip_window), label);
@@ -473,7 +420,7 @@ static void tip_unschedule(ViewFile *vf)
                }
 }
 
-static void tip_update(ViewFile *vf, IconData *id)
+static void tip_update(ViewFile *vf, FileData *fd)
 {
 #if GTK_CHECK_VERSION(3,0,0)
        GdkDisplay *display = gdk_display_get_default();
@@ -492,13 +439,13 @@ static void tip_update(ViewFile *vf, IconData *id)
 #endif
                gtk_window_move(GTK_WINDOW(VFICON(vf)->tip_window), x + 16, y + 16);
 
-               if (id != VFICON(vf)->tip_id)
+               if (fd != VFICON(vf)->tip_fd)
                        {
                        GtkWidget *label;
 
-                       VFICON(vf)->tip_id = id;
+                       VFICON(vf)->tip_fd = fd;
 
-                       if (!VFICON(vf)->tip_id)
+                       if (!VFICON(vf)->tip_fd)
                                {
                                tip_hide(vf);
                                tip_schedule(vf);
@@ -506,7 +453,7 @@ static void tip_update(ViewFile *vf, IconData *id)
                                }
 
                        label = g_object_get_data(G_OBJECT(VFICON(vf)->tip_window), "tip_label");
-                       gtk_label_set_text(GTK_LABEL(label), VFICON(vf)->tip_id->fd->name);
+                       gtk_label_set_text(GTK_LABEL(label), VFICON(vf)->tip_fd->name);
                        }
                }
        else
@@ -528,15 +475,15 @@ static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context,
        ViewFile *vf = data;
        GList *list = NULL;
 
-       if (!VFICON(vf)->click_id) return;
+       if (!VFICON(vf)->click_fd) return;
 
-       if (VFICON(vf)->click_id->selected & SELECTION_SELECTED)
+       if (VFICON(vf)->click_fd->selected & SELECTION_SELECTED)
                {
                list = vf_selection_get_list(vf);
                }
        else
                {
-               list = g_list_append(NULL, file_data_ref(VFICON(vf)->click_id->fd));
+               list = g_list_append(NULL, file_data_ref(VFICON(vf)->click_fd));
                }
 
        if (!list) return;
@@ -551,11 +498,10 @@ static void vficon_drag_data_received(GtkWidget *entry_widget, GdkDragContext *c
        ViewFile *vf = data;
 
        if (info == TARGET_TEXT_PLAIN) {
-               IconData *id = vficon_find_data_by_coord(vf, x, y, NULL);
+               FileData *fd = vficon_find_data_by_coord(vf, x, y, NULL);
 
-               if (id && id->fd) {
+               if (fd) {
                        /* Add keywords to file */
-                       FileData *fd = id->fd;
                        gchar *str = (gchar *) gtk_selection_data_get_text(selection);
                        GList *kw_list = string_to_keywords_list(str);
 
@@ -572,16 +518,16 @@ static void vficon_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointe
 
        tip_unschedule(vf);
 
-       if (VFICON(vf)->click_id && VFICON(vf)->click_id->fd->thumb_pixbuf)
+       if (VFICON(vf)->click_fd && VFICON(vf)->click_fd->thumb_pixbuf)
                {
                gint items;
 
-               if (VFICON(vf)->click_id->selected & SELECTION_SELECTED)
+               if (VFICON(vf)->click_fd->selected & SELECTION_SELECTED)
                        items = g_list_length(VFICON(vf)->selection);
                else
                        items = 1;
 
-               dnd_set_drag_icon(widget, context, VFICON(vf)->click_id->fd->thumb_pixbuf, items);
+               dnd_set_drag_icon(widget, context, VFICON(vf)->click_fd->thumb_pixbuf, items);
                }
 }
 
@@ -589,7 +535,7 @@ static void vficon_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer
 {
        ViewFile *vf = data;
 
-       vficon_selection_remove(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, NULL);
+       vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, NULL);
 
        if (gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE)
                {
@@ -624,16 +570,15 @@ void vficon_dnd_init(ViewFile *vf)
  *-------------------------------------------------------------------
  */
 
-static void vficon_selection_set(ViewFile *vf, IconData *id, SelectionType value, GtkTreeIter *iter)
+static void vficon_selection_set(ViewFile *vf, FileData *fd, SelectionType value, GtkTreeIter *iter)
 {
        GtkTreeModel *store;
        GList *list;
 
-       if (!id) return;
-
+       if (!fd) return;
 
-       if (id->selected == value) return;
-       id->selected = value;
+       if (fd->selected == value) return;
+       fd->selected = value;
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
        if (iter)
@@ -645,7 +590,7 @@ static void vficon_selection_set(ViewFile *vf, IconData *id, SelectionType value
                {
                GtkTreeIter row;
 
-               if (vficon_find_iter(vf, id, &row, NULL))
+               if (vficon_find_iter(vf, fd, &row, NULL))
                        {
                        gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1);
                        if (list) gtk_list_store_set(GTK_LIST_STORE(store), &row, FILE_COLUMN_POINTER, list, -1);
@@ -653,18 +598,18 @@ static void vficon_selection_set(ViewFile *vf, IconData *id, SelectionType value
                }
 }
 
-static void vficon_selection_add(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter)
+static void vficon_selection_add(ViewFile *vf, FileData *fd, SelectionType mask, GtkTreeIter *iter)
 {
-       if (!id) return;
+       if (!fd) return;
 
-       vficon_selection_set(vf, id, id->selected | mask, iter);
+       vficon_selection_set(vf, fd, fd->selected | mask, iter);
 }
 
-static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter)
+static void vficon_selection_remove(ViewFile *vf, FileData *fd, SelectionType mask, GtkTreeIter *iter)
 {
-       if (!id) return;
+       if (!fd) return;
 
-       vficon_selection_set(vf, id, id->selected & ~mask, iter);
+       vficon_selection_set(vf, fd, fd->selected & ~mask, iter);
 }
 
 void vficon_marks_set(ViewFile *vf, gint enable)
@@ -687,12 +632,12 @@ static void vficon_verify_selections(ViewFile *vf)
        work = VFICON(vf)->selection;
        while (work)
                {
-               IconData *id = work->data;
+               FileData *fd = work->data;
                work = work->next;
 
-               if (vficon_index_by_id(vf, id) >= 0) continue;
+               if (vficon_index_by_fd(vf, fd) >= 0) continue;
 
-               VFICON(vf)->selection = g_list_remove(VFICON(vf)->selection, id);
+               VFICON(vf)->selection = g_list_remove(VFICON(vf)->selection, fd);
                }
 }
 
@@ -706,11 +651,11 @@ void vficon_select_all(ViewFile *vf)
        work = vf->list;
        while (work)
                {
-               IconData *id = work->data;
+               FileData *fd = work->data;
                work = work->next;
 
-               VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, id);
-               vficon_selection_add(vf, id, SELECTION_SELECTED, NULL);
+               VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, fd);
+               vficon_selection_add(vf, fd, SELECTION_SELECTED, NULL);
                }
 
        vf_send_update(vf);
@@ -723,10 +668,10 @@ void vficon_select_none(ViewFile *vf)
        work = VFICON(vf)->selection;
        while (work)
                {
-               IconData *id = work->data;
+               FileData *fd = work->data;
                work = work->next;
 
-               vficon_selection_remove(vf, id, SELECTION_SELECTED, NULL);
+               vficon_selection_remove(vf, fd, SELECTION_SELECTED, NULL);
                }
 
        g_list_free(VFICON(vf)->selection);
@@ -742,61 +687,61 @@ void vficon_select_invert(ViewFile *vf)
        work = vf->list;
        while (work)
                {
-               IconData *id = work->data;
+               FileData *fd = work->data;
                work = work->next;
 
-               if (id->selected & SELECTION_SELECTED)
+               if (fd->selected & SELECTION_SELECTED)
                        {
-                       VFICON(vf)->selection = g_list_remove(VFICON(vf)->selection, id);
-                       vficon_selection_remove(vf, id, SELECTION_SELECTED, NULL);
+                       VFICON(vf)->selection = g_list_remove(VFICON(vf)->selection, fd);
+                       vficon_selection_remove(vf, fd, SELECTION_SELECTED, NULL);
                        }
                else
                        {
-                       VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, id);
-                       vficon_selection_add(vf, id, SELECTION_SELECTED, NULL);
+                       VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, fd);
+                       vficon_selection_add(vf, fd, SELECTION_SELECTED, NULL);
                        }
                }
 
        vf_send_update(vf);
 }
 
-static void vficon_select(ViewFile *vf, IconData *id)
+static void vficon_select(ViewFile *vf, FileData *fd)
 {
-       VFICON(vf)->prev_selection = id;
+       VFICON(vf)->prev_selection = fd;
 
-       if (!id || id->selected & SELECTION_SELECTED) return;
+       if (!fd || fd->selected & SELECTION_SELECTED) return;
 
-       VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, id);
-       vficon_selection_add(vf, id, SELECTION_SELECTED, NULL);
+       VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, fd);
+       vficon_selection_add(vf, fd, SELECTION_SELECTED, NULL);
 
        vf_send_update(vf);
 }
 
-static void vficon_unselect(ViewFile *vf, IconData *id)
+static void vficon_unselect(ViewFile *vf, FileData *fd)
 {
-       VFICON(vf)->prev_selection = id;
+       VFICON(vf)->prev_selection = fd;
 
-       if (!id || !(id->selected & SELECTION_SELECTED) ) return;
+       if (!fd || !(fd->selected & SELECTION_SELECTED) ) return;
 
-       VFICON(vf)->selection = g_list_remove(VFICON(vf)->selection, id);
-       vficon_selection_remove(vf, id, SELECTION_SELECTED, NULL);
+       VFICON(vf)->selection = g_list_remove(VFICON(vf)->selection, fd);
+       vficon_selection_remove(vf, fd, SELECTION_SELECTED, NULL);
 
        vf_send_update(vf);
 }
 
-static void vficon_select_util(ViewFile *vf, IconData *id, gboolean select)
+static void vficon_select_util(ViewFile *vf, FileData *fd, gboolean select)
 {
        if (select)
                {
-               vficon_select(vf, id);
+               vficon_select(vf, fd);
                }
        else
                {
-               vficon_unselect(vf, id);
+               vficon_unselect(vf, fd);
                }
 }
 
-static void vficon_select_region_util(ViewFile *vf, IconData *start, IconData *end, gboolean select)
+static void vficon_select_region_util(ViewFile *vf, FileData *start, FileData *end, gboolean select)
 {
        gint row1, col1;
        gint row2, col2;
@@ -811,20 +756,19 @@ static void vficon_select_region_util(ViewFile *vf, IconData *start, IconData *e
        if (!options->collections.rectangular_selection)
                {
                GList *work;
-               IconData *id;
 
                if (g_list_index(vf->list, start) > g_list_index(vf->list, end))
                        {
-                       id = start;
+                       FileData *tmp = start;
                        start = end;
-                       end = id;
+                       end = tmp;
                        }
 
                work = g_list_find(vf->list, start);
                while (work)
                        {
-                       id = work->data;
-                       vficon_select_util(vf, id, select);
+                       FileData *fd = work->data;
+                       vficon_select_util(vf, fd, select);
 
                        if (work->data != end)
                                work = work->next;
@@ -834,6 +778,7 @@ static void vficon_select_region_util(ViewFile *vf, IconData *start, IconData *e
                return;
                }
 
+       // rectangular_selection==true.
        if (row2 < row1)
                {
                t = row1;
@@ -853,19 +798,19 @@ static void vficon_select_region_util(ViewFile *vf, IconData *start, IconData *e
                {
                for (j = col1; j <= col2; j++)
                        {
-                       IconData *id = vficon_find_data(vf, i, j, NULL);
-                       if (id) vficon_select_util(vf, id, select);
+                       FileData *fd = vficon_find_data(vf, i, j, NULL);
+                       if (fd) vficon_select_util(vf, fd, select);
                        }
                }
 }
 
 gboolean vficon_index_is_selected(ViewFile *vf, gint row)
 {
-       IconData *id = g_list_nth_data(vf->list, row);
+       FileData *fd = g_list_nth_data(vf->list, row);
 
-       if (!id) return FALSE;
+       if (!fd) return FALSE;
 
-       return (id->selected & SELECTION_SELECTED);
+       return (fd->selected & SELECTION_SELECTED);
 }
 
 guint vficon_selection_count(ViewFile *vf, gint64 *bytes)
@@ -878,8 +823,7 @@ guint vficon_selection_count(ViewFile *vf, gint64 *bytes)
                work = VFICON(vf)->selection;
                while (work)
                        {
-                       IconData *id = work->data;
-                       FileData *fd = id->fd;
+                       FileData *fd = work->data;
                        g_assert(fd->magick == FD_MAGICK);
                        b += fd->size;
 
@@ -900,8 +844,7 @@ GList *vficon_selection_get_list(ViewFile *vf)
        work = VFICON(vf)->selection;
        while (work)
                {
-               IconData *id = work->data;
-               FileData *fd = id->fd;
+               FileData *fd = work->data;
                g_assert(fd->magick == FD_MAGICK);
 
                list = g_list_prepend(list, file_data_ref(fd));
@@ -937,33 +880,18 @@ GList *vficon_selection_get_list_by_index(ViewFile *vf)
        return g_list_reverse(list);
 }
 
-static void vficon_select_by_id(ViewFile *vf, IconData *id)
+void vficon_select_by_fd(ViewFile *vf, FileData *fd)
 {
-       if (!id) return;
+       if (!fd) return;
+       if (!g_list_find(vf->list, fd)) return;
 
-       if (!(id->selected & SELECTION_SELECTED))
+       if (!(fd->selected & SELECTION_SELECTED))
                {
                vf_select_none(vf);
-               vficon_select(vf, id);
+               vficon_select(vf, fd);
                }
 
-       vficon_set_focus(vf, id);
-}
-
-void vficon_select_by_fd(ViewFile *vf, FileData *fd)
-{
-       IconData *id = NULL;
-       GList *work;
-
-       if (!fd) return;
-       work = vf->list;
-       while (work && !id)
-               {
-               IconData *chk = work->data;
-               work = work->next;
-               if (chk->fd == fd) id = chk;
-               }
-       vficon_select_by_id(vf, id);
+       vficon_set_focus(vf, fd);
 }
 
 void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
@@ -976,14 +904,13 @@ void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
        work = vf->list;
        while (work)
                {
-               IconData *id = work->data;
-               FileData *fd = id->fd;
+               FileData *fd = work->data;
                gboolean mark_val, selected;
 
                g_assert(fd->magick == FD_MAGICK);
 
                mark_val = file_data_get_mark(fd, n);
-               selected = (id->selected & SELECTION_SELECTED);
+               selected = fd->selected & SELECTION_SELECTED;
 
                switch (mode)
                        {
@@ -997,7 +924,7 @@ void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
                                break;
                        }
 
-               vficon_select_util(vf, id, selected);
+               vficon_select_util(vf, fd, selected);
 
                work = work->next;
                }
@@ -1034,7 +961,7 @@ void vficon_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode)
 static void vficon_select_closest(ViewFile *vf, FileData *sel_fd)
 {
        GList *work;
-       IconData *id = NULL;
+       FileData *fd = NULL;
 
        if (sel_fd->parent) sel_fd = sel_fd->parent;
        work = vf->list;
@@ -1042,10 +969,8 @@ static void vficon_select_closest(ViewFile *vf, FileData *sel_fd)
        while (work)
                {
                gint match;
-               FileData *fd;
 
-               id = work->data;
-               fd = id->fd;
+               fd = work->data;
                work = work->next;
 
                match = filelist_sort_compare_filedata_full(fd, sel_fd, vf->sort_method, vf->sort_ascend);
@@ -1053,10 +978,10 @@ static void vficon_select_closest(ViewFile *vf, FileData *sel_fd)
                if (match >= 0) break;
                }
 
-       if (id)
+       if (fd)
                {
-               vficon_select(vf, id);
-               vficon_send_layout_select(vf, id);
+               vficon_select(vf, fd);
+               vficon_send_layout_select(vf, fd);
                }
 }
 
@@ -1150,46 +1075,46 @@ static void vficon_move_focus(ViewFile *vf, gint row, gint col, gboolean relativ
        vficon_set_focus(vf, vficon_find_data(vf, new_row, new_col, NULL));
 }
 
-static void vficon_set_focus(ViewFile *vf, IconData *id)
+static void vficon_set_focus(ViewFile *vf, FileData *fd)
 {
        GtkTreeIter iter;
        gint row, col;
 
-       if (g_list_find(vf->list, VFICON(vf)->focus_id))
+       if (g_list_find(vf->list, VFICON(vf)->focus_fd))
                {
-               if (id == VFICON(vf)->focus_id)
+               if (fd == VFICON(vf)->focus_fd)
                        {
                        /* ensure focus row col are correct */
-                       vficon_find_position(vf, VFICON(vf)->focus_id, &VFICON(vf)->focus_row, &VFICON(vf)->focus_column);
+                       vficon_find_position(vf, VFICON(vf)->focus_fd, &VFICON(vf)->focus_row, &VFICON(vf)->focus_column);
 #if GTK_CHECK_VERSION(3,0,0)
 /* FIXME: Refer to issue #467 on Github. The thumbnail position is not
  * preserved when the icon view is refreshed. Caused by an unknown call from
  * the idle loop. This patch hides the problem.
  */
-                       if (vficon_find_iter(vf, VFICON(vf)->focus_id, &iter, NULL))
+                       if (vficon_find_iter(vf, VFICON(vf)->focus_fd, &iter, NULL))
                                {
                                tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, FALSE);
                                }
 #endif
                        return;
                        }
-               vficon_selection_remove(vf, VFICON(vf)->focus_id, SELECTION_FOCUS, NULL);
+               vficon_selection_remove(vf, VFICON(vf)->focus_fd, SELECTION_FOCUS, NULL);
                }
 
-       if (!vficon_find_position(vf, id, &row, &col))
+       if (!vficon_find_position(vf, fd, &row, &col))
                {
-               VFICON(vf)->focus_id = NULL;
+               VFICON(vf)->focus_fd = NULL;
                VFICON(vf)->focus_row = -1;
                VFICON(vf)->focus_column = -1;
                return;
                }
 
-       VFICON(vf)->focus_id = id;
+       VFICON(vf)->focus_fd = fd;
        VFICON(vf)->focus_row = row;
        VFICON(vf)->focus_column = col;
-       vficon_selection_add(vf, VFICON(vf)->focus_id, SELECTION_FOCUS, NULL);
+       vficon_selection_add(vf, VFICON(vf)->focus_fd, SELECTION_FOCUS, NULL);
 
-       if (vficon_find_iter(vf, VFICON(vf)->focus_id, &iter, NULL))
+       if (vficon_find_iter(vf, VFICON(vf)->focus_fd, &iter, NULL))
                {
                GtkTreePath *tpath;
                GtkTreeViewColumn *column;
@@ -1241,7 +1166,7 @@ static void vfi_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push
        GtkTreePath *tpath;
        gint cw, ch;
 
-       if (!vficon_find_iter(vf, VFICON(vf)->click_id, &iter, &column)) return;
+       if (!vficon_find_iter(vf, VFICON(vf)->click_fd, &iter, &column)) return;
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
        tpath = gtk_tree_model_get_path(store, &iter);
        tree_view_get_cell_clamped(GTK_TREE_VIEW(vf->listview), tpath, column, FALSE, x, y, &cw, &ch);
@@ -1255,7 +1180,7 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
        ViewFile *vf = data;
        gint focus_row = 0;
        gint focus_col = 0;
-       IconData *id;
+       FileData *fd;
        gboolean stop_signal;
 
        stop_signal = TRUE;
@@ -1288,38 +1213,38 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                        focus_col = VFICON(vf)->columns - 1 - VFICON(vf)->focus_column;
                        break;
                case GDK_KEY_space:
-                       id = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
-                       if (id)
+                       fd = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
+                       if (fd)
                                {
-                               VFICON(vf)->click_id = id;
+                               VFICON(vf)->click_fd = fd;
                                if (event->state & GDK_CONTROL_MASK)
                                        {
                                        gint selected;
 
-                                       selected = id->selected & SELECTION_SELECTED;
+                                       selected = fd->selected & SELECTION_SELECTED;
                                        if (selected)
                                                {
-                                               vficon_unselect(vf, id);
+                                               vficon_unselect(vf, fd);
                                                }
                                        else
                                                {
-                                               vficon_select(vf, id);
-                                               vficon_send_layout_select(vf, id);
+                                               vficon_select(vf, fd);
+                                               vficon_send_layout_select(vf, fd);
                                                }
                                        }
                                else
                                        {
                                        vf_select_none(vf);
-                                       vficon_select(vf, id);
-                                       vficon_send_layout_select(vf, id);
+                                       vficon_select(vf, fd);
+                                       vficon_send_layout_select(vf, fd);
                                        }
                                }
                        break;
                case GDK_KEY_Menu:
-                       id = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
-                       VFICON(vf)->click_id = id;
+                       fd = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
+                       VFICON(vf)->click_fd = fd;
 
-                       vficon_selection_add(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, NULL);
+                       vficon_selection_add(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, NULL);
                        tip_unschedule(vf);
 
                        vf->popup = vf_pop_menu(vf);
@@ -1332,38 +1257,38 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
 
        if (focus_row != 0 || focus_col != 0)
                {
-               IconData *new_id;
-               IconData *old_id;
+               FileData *new_fd;
+               FileData *old_fd;
 
-               old_id = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
+               old_fd = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
                vficon_move_focus(vf, focus_row, focus_col, TRUE);
-               new_id = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
+               new_fd = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
 
-               if (new_id != old_id)
+               if (new_fd != old_fd)
                        {
                        if (event->state & GDK_SHIFT_MASK)
                                {
                                if (!options->collections.rectangular_selection)
                                        {
-                                       vficon_select_region_util(vf, old_id, new_id, FALSE);
+                                       vficon_select_region_util(vf, old_fd, new_fd, FALSE);
                                        }
                                else
                                        {
-                                       vficon_select_region_util(vf, VFICON(vf)->click_id, old_id, FALSE);
+                                       vficon_select_region_util(vf, VFICON(vf)->click_fd, old_fd, FALSE);
                                        }
-                               vficon_select_region_util(vf, VFICON(vf)->click_id, new_id, TRUE);
-                               vficon_send_layout_select(vf, new_id);
+                               vficon_select_region_util(vf, VFICON(vf)->click_fd, new_fd, TRUE);
+                               vficon_send_layout_select(vf, new_fd);
                                }
                        else if (event->state & GDK_CONTROL_MASK)
                                {
-                               VFICON(vf)->click_id = new_id;
+                               VFICON(vf)->click_fd = new_fd;
                                }
                        else
                                {
-                               VFICON(vf)->click_id = new_id;
+                               VFICON(vf)->click_fd = new_fd;
                                vf_select_none(vf);
-                               vficon_select(vf, new_id);
-                               vficon_send_layout_select(vf, new_id);
+                               vficon_select(vf, new_fd);
+                               vficon_send_layout_select(vf, new_fd);
                                }
                        }
                }
@@ -1385,10 +1310,10 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
 static gboolean vficon_motion_cb(GtkWidget *widget, GdkEventMotion *event, gpointer data)
 {
        ViewFile *vf = data;
-       IconData *id;
+       FileData *fd;
 
-       id = vficon_find_data_by_coord(vf, (gint)event->x, (gint)event->y, NULL);
-       tip_update(vf, id);
+       fd = vficon_find_data_by_coord(vf, (gint)event->x, (gint)event->y, NULL);
+       tip_update(vf, fd);
 
        return FALSE;
 }
@@ -1397,14 +1322,14 @@ gboolean vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
 {
        ViewFile *vf = data;
        GtkTreeIter iter;
-       IconData *id;
+       FileData *fd;
 
        tip_unschedule(vf);
 
-       id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter);
+       fd = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter);
 
-       VFICON(vf)->click_id = id;
-       vficon_selection_add(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, &iter);
+       VFICON(vf)->click_fd = fd;
+       vficon_selection_add(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
 
        switch (bevent->button)
                {
@@ -1414,10 +1339,9 @@ gboolean vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
                                gtk_widget_grab_focus(vf->listview);
                                }
 
-                       if (bevent->type == GDK_2BUTTON_PRESS &&
-                           vf->layout)
+                       if (bevent->type == GDK_2BUTTON_PRESS && vf->layout)
                                {
-                               vficon_selection_remove(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, &iter);
+                               vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
                                layout_image_full_screen_start(vf->layout);
                                }
                        break;
@@ -1436,43 +1360,43 @@ gboolean vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer d
 {
        ViewFile *vf = data;
        GtkTreeIter iter;
-       IconData *id = NULL;
+       FileData *fd = NULL;
        gboolean was_selected;
 
        tip_schedule(vf);
 
        if ((gint)bevent->x != 0 || (gint)bevent->y != 0)
                {
-               id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter);
+               fd = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter);
                }
 
-       if (VFICON(vf)->click_id)
+       if (VFICON(vf)->click_fd)
                {
-               vficon_selection_remove(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, NULL);
+               vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, NULL);
                }
 
-       if (!id || VFICON(vf)->click_id != id) return TRUE;
+       if (!fd || VFICON(vf)->click_fd != fd) return TRUE;
 
-       was_selected = !!(id->selected & SELECTION_SELECTED);
+       was_selected = !!(fd->selected & SELECTION_SELECTED);
 
        switch (bevent->button)
                {
                case MOUSE_BUTTON_LEFT:
                        {
-                       vficon_set_focus(vf, id);
+                       vficon_set_focus(vf, fd);
 
                        if (bevent->state & GDK_CONTROL_MASK)
                                {
                                gboolean select;
 
-                               select = !(id->selected & SELECTION_SELECTED);
+                               select = !(fd->selected & SELECTION_SELECTED);
                                if ((bevent->state & GDK_SHIFT_MASK) && VFICON(vf)->prev_selection)
                                        {
-                                       vficon_select_region_util(vf, VFICON(vf)->prev_selection, id, select);
+                                       vficon_select_region_util(vf, VFICON(vf)->prev_selection, fd, select);
                                        }
                                else
                                        {
-                                       vficon_select_util(vf, id, select);
+                                       vficon_select_util(vf, fd, select);
                                        }
                                }
                        else
@@ -1481,11 +1405,11 @@ gboolean vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer d
 
                                if ((bevent->state & GDK_SHIFT_MASK) && VFICON(vf)->prev_selection)
                                        {
-                                       vficon_select_region_util(vf, VFICON(vf)->prev_selection, id, TRUE);
+                                       vficon_select_region_util(vf, VFICON(vf)->prev_selection, fd, TRUE);
                                        }
                                else
                                        {
-                                       vficon_select_util(vf, id, TRUE);
+                                       vficon_select_util(vf, fd, TRUE);
                                        was_selected = FALSE;
                                        }
                                }
@@ -1493,16 +1417,16 @@ gboolean vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer d
                        break;
                case MOUSE_BUTTON_MIDDLE:
                        {
-                       vficon_select_util(vf, id, !(id->selected & SELECTION_SELECTED));
+                       vficon_select_util(vf, fd, !(fd->selected & SELECTION_SELECTED));
                        }
                        break;
                default:
                        break;
                }
 
-       if (!was_selected && (id->selected & SELECTION_SELECTED))
+       if (!was_selected && (fd->selected & SELECTION_SELECTED))
                {
-               vficon_send_layout_select(vf, id);
+               vficon_send_layout_select(vf, fd);
                }
 
        return TRUE;
@@ -1566,7 +1490,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
        GtkTreeModel *store;
        GtkTreePath *tpath;
        GList *work;
-       IconData *visible_id = NULL;
+       FileData *visible_fd = NULL;
        gint r, c;
        gboolean valid;
        GtkTreeIter iter;
@@ -1585,7 +1509,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                gtk_tree_path_free(tpath);
 
                gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
-               if (list) visible_id = list->data;
+               if (list) visible_fd = list->data;
                }
 
 
@@ -1648,20 +1572,20 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
 
                while (list)
                        {
-                       IconData *id;
+                       FileData *fd;
 
                        if (work)
                                {
-                               id = work->data;
+                               fd = work->data;
                                work = work->next;
                                c++;
                                }
                        else
                                {
-                               id = NULL;
+                               fd = NULL;
                                }
 
-                       list->data = id;
+                       list->data = fd;
                        list = list->next;
                        }
                if (valid) valid = gtk_tree_model_iter_next(store, &iter);
@@ -1679,7 +1603,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
 
        VFICON(vf)->rows = r;
 
-       if (visible_id &&
+       if (visible_fd &&
            gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
                {
                GtkTreeIter iter;
@@ -1689,8 +1613,8 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                gtk_tree_path_free(tpath);
 
                gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
-               if (g_list_find(list, visible_id) == NULL &&
-                   vficon_find_iter(vf, visible_id, &iter, NULL))
+               if (g_list_find(list, visible_fd) == NULL &&
+                   vficon_find_iter(vf, visible_fd, &iter, NULL))
                        {
                        tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, FALSE);
                        }
@@ -1756,8 +1680,7 @@ void vficon_thumb_progress_count(GList *list, gint *count, gint *done)
        GList *work = list;
        while (work)
                {
-               IconData *id = work->data;
-               FileData *fd = id->fd;
+               FileData *fd = work->data;
                work = work->next;
 
                if (fd->thumb_pixbuf) (*done)++;
@@ -1771,7 +1694,8 @@ void vficon_set_thumb_fd(ViewFile *vf, FileData *fd)
        GtkTreeIter iter;
        GList *list;
 
-       if (!vficon_find_iter(vf, vficon_icon_data(vf, fd), &iter, NULL)) return;
+       if (!g_list_find(vf->list, fd)) return;
+       if (!vficon_find_iter(vf, fd, &iter, NULL)) return;
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
 
@@ -1779,12 +1703,12 @@ void vficon_set_thumb_fd(ViewFile *vf, FileData *fd)
        gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1);
 }
 
-
+/* Returns the next fd without a loaded pixbuf, so the thumb-loader can load the pixbuf for it. */
 FileData *vficon_thumb_next_fd(ViewFile *vf)
 {
        GtkTreePath *tpath;
-       FileData *fd = NULL;
 
+       /* First see if there are visible files that don't have a loaded thumb... */
        if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
                {
                GtkTreeModel *store;
@@ -1794,40 +1718,36 @@ FileData *vficon_thumb_next_fd(ViewFile *vf)
                store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
                gtk_tree_model_get_iter(store, &iter, tpath);
                gtk_tree_path_free(tpath);
+               tpath = NULL;
 
-               while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vf->listview), &iter, FALSE) == 0)
+               while (valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vf->listview), &iter, FALSE) == 0)
                        {
                        GList *list;
-
                        gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
 
-                       while (!fd && list)
+                       // TODO(xsdg): for loop here.
+                       for (; list; list = list->next)
                                {
-                               IconData *id = list->data;
-                               if (id && !id->fd->thumb_pixbuf) fd = id->fd;
-                               list = list->next;
+                               FileData *fd = list->data;
+                               if (fd && !fd->thumb_pixbuf) return fd;
                                }
 
                        valid = gtk_tree_model_iter_next(store, &iter);
                        }
                }
 
-       /* then find first undone */
-
-       if (!fd)
+       /* Then iterate through the entire list to load all of them. */
+       GList *work;
+       for (work = vf->list; work; work = work->next)
                {
-               GList *work = vf->list;
-               while (work && !fd)
-                       {
-                       IconData *id = work->data;
-                       FileData *fd_p = id->fd;
-                       work = work->next;
+               FileData *fd = work->data;
 
-                       if (!fd_p->thumb_pixbuf) fd = fd_p;
-                       }
+               // Note: This implementation differs from view_file_list.c because sidecar files are not
+               // distinct list elements here, as they are in the list view.
+               if (!fd->thumb_pixbuf) return fd;
                }
 
-       return fd;
+       return NULL;
 }
 
 void vficon_thumb_reset_all(ViewFile *vf)
@@ -1836,8 +1756,7 @@ void vficon_thumb_reset_all(ViewFile *vf)
 
        while (work)
                {
-               IconData *id = work->data;
-               FileData *fd = id->fd;
+               FileData *fd = work->data;
                if (fd->thumb_pixbuf)
                        {
                        g_object_unref(fd->thumb_pixbuf);
@@ -1856,10 +1775,10 @@ void vficon_thumb_reset_all(ViewFile *vf)
 
 FileData *vficon_index_get_data(ViewFile *vf, gint row)
 {
-       IconData *id;
+       FileData *fd;
 
-       id = g_list_nth_data(vf->list, row);
-       return id ? id->fd : NULL;
+       fd = g_list_nth_data(vf->list, row);
+       return fd ? fd : NULL;
 }
 
 
@@ -1873,8 +1792,7 @@ gint vficon_index_by_fd(ViewFile *vf, FileData *in_fd)
        work = vf->list;
        while (work)
                {
-               IconData *id = work->data;
-               FileData *fd = id->fd;
+               FileData *fd = work->data;
                if (fd == in_fd) return p;
                work = work->next;
                p++;
@@ -1883,25 +1801,6 @@ gint vficon_index_by_fd(ViewFile *vf, FileData *in_fd)
        return -1;
 }
 
-static gint vficon_index_by_id(ViewFile *vf, IconData *in_id)
-{
-       gint p = 0;
-       GList *work;
-
-       if (!in_id) return -1;
-
-       work = vf->list;
-       while (work)
-               {
-               IconData *id = work->data;
-               if (id == in_id) return p;
-               work = work->next;
-               p++;
-               }
-
-       return -1;
-}
-
 guint vficon_count(ViewFile *vf, gint64 *bytes)
 {
        if (bytes)
@@ -1912,8 +1811,7 @@ guint vficon_count(ViewFile *vf, gint64 *bytes)
                work = vf->list;
                while (work)
                        {
-                       IconData *id = work->data;
-                       FileData *fd = id->fd;
+                       FileData *fd = work->data;
                        work = work->next;
 
                        b += fd->size;
@@ -1933,8 +1831,7 @@ GList *vficon_get_list(ViewFile *vf)
        work = vf->list;
        while (work)
                {
-               IconData *id = work->data;
-               FileData *fd = id->fd;
+               FileData *fd = work->data;
                work = work->next;
 
                list = g_list_prepend(list, file_data_ref(fd));
@@ -1952,13 +1849,13 @@ GList *vficon_get_list(ViewFile *vf)
 static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
 {
        gboolean ret = TRUE;
-       GList *work, *work_fd;
-       IconData *focus_id;
-       GList *new_filelist = NULL;
+       GList *work, *new_work;
+       FileData *focus_fd;
        FileData *first_selected = NULL;
-       GList *new_iconlist = NULL;
+       GList *new_filelist = NULL;
+       GList *new_fd_list = NULL;
 
-       focus_id = VFICON(vf)->focus_id;
+       focus_fd = VFICON(vf)->focus_fd;
 
        if (vf->dir_fd)
                {
@@ -1966,44 +1863,39 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                new_filelist = file_data_filter_marks_list(new_filelist, vf_marks_get_filter(vf));
                }
 
-       vf->list = iconlist_sort(vf->list, vf->sort_method, vf->sort_ascend); /* the list might not be sorted if there were renames */
+       vf->list = filelist_sort(vf->list, vf->sort_method, vf->sort_ascend); /* the list might not be sorted if there were renames */
        new_filelist = filelist_sort(new_filelist, vf->sort_method, vf->sort_ascend);
 
        if (VFICON(vf)->selection)
                {
-               first_selected = ((IconData *)(VFICON(vf)->selection->data))->fd;
+               first_selected = VFICON(vf)->selection->data;
                file_data_ref(first_selected);
                g_list_free(VFICON(vf)->selection);
                VFICON(vf)->selection = NULL;
-
-
                }
 
-       /* check for same files from old_list */
+       /* iterate old list and new list, looking for differences */
        work = vf->list;
-       work_fd = new_filelist;
-       while (work || work_fd)
+       new_work = new_filelist;
+       while (work || new_work)
                {
-               IconData *id = NULL;
                FileData *fd = NULL;
                FileData *new_fd = NULL;
                gint match;
 
-               if (work && work_fd)
+               if (work && new_work)
                        {
-                       id = work->data;
-                       fd = id->fd;
-
-                       new_fd = work_fd->data;
+                       fd = work->data;
+                       new_fd = new_work->data;
 
                        if (fd == new_fd)
                                {
                                /* not changed, go to next */
                                work = work->next;
-                               work_fd = work_fd->next;
-                               if (id->selected & SELECTION_SELECTED)
+                               new_work = new_work->next;
+                               if (fd->selected & SELECTION_SELECTED)
                                        {
-                                       VFICON(vf)->selection = g_list_prepend(VFICON(vf)->selection, id);
+                                       VFICON(vf)->selection = g_list_prepend(VFICON(vf)->selection, fd);
                                        }
                                continue;
                                }
@@ -2013,13 +1905,14 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                        }
                else if (work)
                        {
-                       id = work->data;
-                       fd = id->fd;
+                       /* old item was deleted */
+                       fd = work->data;
                        match = -1;
                        }
-               else /* work_fd */
+               else
                        {
-                       new_fd = work_fd->data;
+                       /* new item was added */
+                       new_fd = new_work->data;
                        match = 1;
                        }
 
@@ -2028,32 +1921,33 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                        /* file no longer exists, delete from vf->list */
                        GList *to_delete = work;
                        work = work->next;
-                       if (id == VFICON(vf)->prev_selection) VFICON(vf)->prev_selection = NULL;
-                       if (id == VFICON(vf)->click_id) VFICON(vf)->click_id = NULL;
+                       if (fd == VFICON(vf)->prev_selection) VFICON(vf)->prev_selection = NULL;
+                       if (fd == VFICON(vf)->click_fd) VFICON(vf)->click_fd = NULL;
                        file_data_unref(fd);
-                       g_free(id);
                        vf->list = g_list_delete_link(vf->list, to_delete);
                        }
                else
                        {
                        /* new file, add to vf->list */
-                       id = g_new0(IconData, 1);
-
-                       id->selected = SELECTION_NONE;
-                       id->fd = file_data_ref(new_fd);
+                       file_data_ref(new_fd);
+                       new_fd->selected = SELECTION_NONE;
                        if (work)
-                               vf->list = g_list_insert_before(vf->list, work, id);
+                               {
+                               vf->list = g_list_insert_before(vf->list, work, new_fd);
+                               }
                        else
-                               new_iconlist = g_list_prepend(new_iconlist, id); /* it is faster to append all new entries together later */
+                               {
+                               /* it is faster to append all new entries together later */
+                               new_fd_list = g_list_prepend(new_fd_list, new_fd);
+                               }
 
-                       work_fd = work_fd->next;
+                       new_work = new_work->next;
                        }
-
                }
 
-       if (new_iconlist)
+       if (new_fd_list)
                {
-               vf->list = g_list_concat(vf->list, g_list_reverse(new_iconlist));
+               vf->list = g_list_concat(vf->list, g_list_reverse(new_fd_list));
                }
 
        VFICON(vf)->selection = g_list_reverse(VFICON(vf)->selection);
@@ -2070,9 +1964,9 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
        file_data_unref(first_selected);
 
        /* attempt to keep focus on same icon when refreshing */
-       if (focus_id && g_list_find(vf->list, focus_id))
+       if (focus_fd && g_list_find(vf->list, focus_fd))
                {
-               vficon_set_focus(vf, focus_id);
+               vficon_set_focus(vf, focus_fd);
                }
 
        return ret;
@@ -2100,7 +1994,7 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
                                GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
 {
        GList *list;
-       IconData *id;
+       FileData *fd;
        ColumnData *cd = data;
        ViewFile *vf = cd->vf;
 
@@ -2108,9 +2002,9 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
 
        gtk_tree_model_get(tree_model, iter, FILE_COLUMN_POINTER, &list, -1);
 
-       id = g_list_nth_data(list, cd->number);
+       fd = g_list_nth_data(list, cd->number);
 
-       if (id)
+       if (fd)
                {
                GdkColor color_fg;
                GdkColor color_bg;
@@ -2119,23 +2013,23 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
                gchar *link;
                GtkStateType state = GTK_STATE_NORMAL;
 
-               g_assert(id->fd->magick == FD_MAGICK);
+               g_assert(fd->magick == FD_MAGICK);
 
-               link = islink(id->fd->path) ? GQ_LINK_STR : "";
-               if (id->fd->sidecar_files)
+               link = islink(fd->path) ? GQ_LINK_STR : "";
+               if (fd->sidecar_files)
                        {
-                       gchar *sidecars = file_data_sc_list_to_string(id->fd);
-                       name_sidecars = g_strdup_printf("%s%s %s", link, id->fd->name, sidecars);
+                       gchar *sidecars = file_data_sc_list_to_string(fd);
+                       name_sidecars = g_strdup_printf("%s%s %s", link, fd->name, sidecars);
                        g_free(sidecars);
                        }
                else
                        {
-                       gchar *disabled_grouping = id->fd->disable_grouping ? _(" [NO GROUPING]") : "";
-                       name_sidecars = g_strdup_printf("%s%s%s", link, id->fd->name, disabled_grouping);
+                       gchar *disabled_grouping = fd->disable_grouping ? _(" [NO GROUPING]") : "";
+                       name_sidecars = g_strdup_printf("%s%s%s", link, fd->name, disabled_grouping);
                        }
 
                style = gtk_widget_get_style(vf->listview);
-               if (id->selected & SELECTION_SELECTED)
+               if (fd->selected & SELECTION_SELECTED)
                        {
                        state = GTK_STATE_SELECTED;
                        }
@@ -2143,20 +2037,20 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
                memcpy(&color_fg, &style->text[state], sizeof(color_fg));
                memcpy(&color_bg, &style->base[state], sizeof(color_bg));
 
-               if (id->selected & SELECTION_PRELIGHT)
+               if (fd->selected & SELECTION_PRELIGHT)
                        {
                        shift_color(&color_bg, -1, 0);
                        }
 
-               g_object_set(cell,      "pixbuf", id->fd->thumb_pixbuf,
+               g_object_set(cell,      "pixbuf", fd->thumb_pixbuf,
                                        "text", name_sidecars,
-                                       "marks", file_data_get_marks(id->fd),
+                                       "marks", file_data_get_marks(fd),
                                        "show_marks", vf->marks_enabled,
                                        "cell-background-gdk", &color_bg,
                                        "cell-background-set", TRUE,
                                        "foreground-gdk", &color_fg,
                                        "foreground-set", TRUE,
-                                       "has-focus", (VFICON(vf)->focus_id == id), NULL);
+                                       "has-focus", (VFICON(vf)->focus_fd == fd), NULL);
                g_free(name_sidecars);
                }
        else
@@ -2220,13 +2114,13 @@ gboolean vficon_set_fd(ViewFile *vf, FileData *dir_fd)
        g_list_free(VFICON(vf)->selection);
        VFICON(vf)->selection = NULL;
 
-       iconlist_free(vf->list);
+       g_list_free(vf->list);
        vf->list = NULL;
 
        /* NOTE: populate will clear the store for us */
        ret = vficon_refresh_real(vf, FALSE);
 
-       VFICON(vf)->focus_id = NULL;
+       VFICON(vf)->focus_fd = NULL;
        vficon_move_focus(vf, 0, 0, FALSE);
 
        return ret;
@@ -2244,7 +2138,7 @@ void vficon_destroy_cb(GtkWidget *widget, gpointer data)
 
        vf_thumb_cleanup(vf);
 
-       iconlist_free(vf->list);
+       g_list_free(vf->list);
        g_list_free(VFICON(vf)->selection);
 }
 
similarity index 96%
rename from src/view_file_icon.h
rename to src/view_file/view_file_icon.h
index 086491b..0ca75b5 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef VIEW_FILE_ICON_H
-#define VIEW_FILE_ICON_H
+#ifndef VIEW_FILE_VIEW_FILE_ICON_H
+#define VIEW_FILE_VIEW_FILE_ICON_H
+
+#include "filedata.h"
 
 gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data);
 gboolean vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
similarity index 99%
rename from src/view_file_list.c
rename to src/view_file/view_file_list.c
index bee6bfc..38be2a9 100644 (file)
@@ -1102,6 +1102,7 @@ FileData *vflist_thumb_next_fd(ViewFile *vf)
                store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
                gtk_tree_model_get_iter(store, &iter, tpath);
                gtk_tree_path_free(tpath);
+               tpath = NULL;
 
                while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vf->listview), &iter, FALSE) == 0)
                        {
similarity index 97%
rename from src/view_file_list.h
rename to src/view_file/view_file_list.h
index ca9e75d..38bc829 100644 (file)
@@ -19,9 +19,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef VIEW_FILE_LIST_H
-#define VIEW_FILE_LIST_H
-
+#ifndef VIEW_FILE_VIEW_FILE_LIST_H
+#define VIEW_FILE_VIEW_FILE_LIST_H
 
 #include "filedata.h"