Use std::swap instead of temporary values
[geeqie.git] / src / view-file / view-file-icon.cc
index 59c699f..fe7c180 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#include "main.h"
 #include "view-file-icon.h"
 
+#include <cstring>
+#include <utility>
+
+#include <glib-object.h>
+
 #include "cellrenderericon.h"
 #include "collect.h"
+#include "compat.h"
+#include "debug.h"
 #include "dnd.h"
+#include "filedata.h"
 #include "img-view.h"
+#include "intl.h"
 #include "layout-image.h"
+#include "main-defines.h"
 #include "metadata.h"
 #include "misc.h"
-#include "utilops.h"
+#include "options.h"
 #include "ui-fileops.h"
 #include "ui-misc.h"
 #include "ui-tree-edit.h"
 #include "uri-utils.h"
+#include "utilops.h"
 #include "view-file.h"
 
+namespace
+{
+
 /* between these, the icon width is increased by thumb_max_width / 2 */
-#define THUMB_MIN_ICON_WIDTH 128
-#define THUMB_MAX_ICON_WIDTH 160
-#define THUMB_MIN_ICON_WIDTH_WITH_MARKS TOGGLE_SPACING * FILEDATA_MARKS_SIZE
+constexpr gint THUMB_MIN_ICON_WIDTH = 128;
+constexpr gint THUMB_MAX_ICON_WIDTH = 160;
+
+constexpr gint THUMB_MIN_ICON_WIDTH_WITH_MARKS = TOGGLE_SPACING * FILEDATA_MARKS_SIZE;
 
-#define VFICON_MAX_COLUMNS 32
-#define THUMB_BORDER_PADDING 2
+constexpr gint VFICON_MAX_COLUMNS = 32;
 
-#define VFICON_TIP_DELAY 500
+constexpr gint THUMB_BORDER_PADDING = 2;
+
+constexpr gint VFICON_TIP_DELAY = 500;
 
 enum {
-       FILE_COLUMN_POINTER = 0,
+       FILE_COLUMN_POINTER = VIEW_FILE_COLUMN_POINTER,
        FILE_COLUMN_COUNT
 };
 
+struct ColumnData
+{
+       ViewFile *vf;
+       gint number;
+};
+
+} // namespace
+
 static void vficon_toggle_filenames(ViewFile *vf);
-static void vficon_selection_remove(ViewFile *vf, FileData *id, SelectionType mask, GtkTreeIter *iter);
+static void vficon_selection_remove(ViewFile *vf, FileData *fd, SelectionType mask, GtkTreeIter *iter);
 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gboolean relative);
 static void vficon_set_focus(ViewFile *vf, FileData *fd);
 static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gboolean force);
@@ -64,7 +87,7 @@ static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gboolean f
  *-----------------------------------------------------------------------------
  */
 
-GList *vficon_selection_get_one(ViewFile *UNUSED(vf), FileData *fd)
+GList *vficon_selection_get_one(ViewFile *, FileData *fd)
 {
        return g_list_prepend(filelist_copy(fd->sidecar_files), file_data_ref(fd));
 }
@@ -81,7 +104,7 @@ GList *vficon_pop_menu_file_list(ViewFile *vf)
        return vficon_selection_get_one(vf, VFICON(vf)->click_fd);
 }
 
-void vficon_pop_menu_view_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_pop_menu_view_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -101,14 +124,14 @@ void vficon_pop_menu_view_cb(GtkWidget *UNUSED(widget), gpointer data)
                }
 }
 
-void vficon_pop_menu_rename_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_pop_menu_rename_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
        file_util_rename(nullptr, vf_pop_menu_file_list(vf), vf->listview);
 }
 
-void vficon_pop_menu_show_names_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_pop_menu_show_names_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -125,21 +148,21 @@ static void vficon_toggle_star_rating(ViewFile *vf)
        vficon_populate_at_new_size(vf, allocation.width, allocation.height, TRUE);
 }
 
-void vficon_pop_menu_show_star_rating_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_pop_menu_show_star_rating_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
        vficon_toggle_star_rating(vf);
 }
 
-void vficon_pop_menu_refresh_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_pop_menu_refresh_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
        vf_refresh(vf);
 }
 
-void vficon_popup_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_popup_destroy_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
        vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, nullptr);
@@ -232,7 +255,8 @@ static gboolean vficon_find_position(ViewFile *vf, FileData *fd, gint *row, gint
 static gboolean vficon_find_iter(ViewFile *vf, FileData *fd, GtkTreeIter *iter, gint *column)
 {
        GtkTreeModel *store;
-       gint row, col;
+       gint row;
+       gint col;
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
        if (!vficon_find_position(vf, fd, &row, &col)) return FALSE;
@@ -331,7 +355,8 @@ static void vficon_mark_toggled_cb(GtkCellRendererToggle *cell, gchar *path_str,
 static void tip_show(ViewFile *vf)
 {
        GtkWidget *label;
-       gint x, y;
+       gint x;
+       gint y;
        GdkDisplay *display;
        GdkSeat *seat;
        GdkDevice *device;
@@ -353,7 +378,7 @@ static void tip_show(ViewFile *vf)
        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);
+       gq_gtk_container_add(GTK_WIDGET(VFICON(vf)->tip_window), label);
        gtk_widget_show(label);
 
        display = gdk_display_get_default();
@@ -362,13 +387,13 @@ static void tip_show(ViewFile *vf)
        gdk_device_get_position(device, nullptr, &x, &y);
 
        if (!gtk_widget_get_realized(VFICON(vf)->tip_window)) gtk_widget_realize(VFICON(vf)->tip_window);
-       gtk_window_move(GTK_WINDOW(VFICON(vf)->tip_window), x + 16, y + 16);
+       gq_gtk_window_move(GTK_WINDOW(VFICON(vf)->tip_window), x + 16, y + 16);
        gtk_widget_show(VFICON(vf)->tip_window);
 }
 
 static void tip_hide(ViewFile *vf)
 {
-       if (VFICON(vf)->tip_window) gtk_widget_destroy(VFICON(vf)->tip_window);
+       if (VFICON(vf)->tip_window) gq_gtk_widget_destroy(VFICON(vf)->tip_window);
        VFICON(vf)->tip_window = nullptr;
 }
 
@@ -426,11 +451,12 @@ static void tip_update(ViewFile *vf, FileData *fd)
 
        if (VFICON(vf)->tip_window)
                {
-               gint x, y;
+               gint x;
+               gint y;
 
                gdk_device_get_position(device, nullptr, &x, &y);
 
-               gtk_window_move(GTK_WINDOW(VFICON(vf)->tip_window), x + 16, y + 16);
+               gq_gtk_window_move(GTK_WINDOW(VFICON(vf)->tip_window), x + 16, y + 16);
 
                if (fd != VFICON(vf)->tip_fd)
                        {
@@ -461,9 +487,9 @@ static void tip_update(ViewFile *vf, FileData *fd)
  *-------------------------------------------------------------------
  */
 
-static void vficon_dnd_get(GtkWidget *UNUSED(widget), GdkDragContext *UNUSED(context),
-                          GtkSelectionData *selection_data, guint UNUSED(info),
-                          guint UNUSED(time), gpointer data)
+static void vficon_dnd_get(GtkWidget *, GdkDragContext *,
+                          GtkSelectionData *selection_data, guint,
+                          guint, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
        GList *list = nullptr;
@@ -484,9 +510,9 @@ static void vficon_dnd_get(GtkWidget *UNUSED(widget), GdkDragContext *UNUSED(con
        filelist_free(list);
 }
 
-static void vficon_drag_data_received(GtkWidget *UNUSED(entry_widget), GdkDragContext *UNUSED(context),
+static void vficon_drag_data_received(GtkWidget *, GdkDragContext *,
                                      int x, int y, GtkSelectionData *selection,
-                                     guint info, guint UNUSED(time), gpointer data)
+                                     guint info, guint, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -499,7 +525,7 @@ static void vficon_drag_data_received(GtkWidget *UNUSED(entry_widget), GdkDragCo
                        GList *kw_list = string_to_keywords_list(str);
 
                        metadata_append_list(fd, KEYWORD_KEY, kw_list);
-                       string_list_free(kw_list);
+                       g_list_free_full(kw_list, g_free);
                        g_free(str);
                }
        }
@@ -524,7 +550,7 @@ static void vficon_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointe
                }
 }
 
-static void vficon_dnd_end(GtkWidget *UNUSED(widget), GdkDragContext *context, gpointer data)
+static void vficon_dnd_end(GtkWidget *, GdkDragContext *context, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -605,14 +631,14 @@ static void vficon_selection_remove(ViewFile *vf, FileData *fd, SelectionType ma
        vficon_selection_set(vf, fd, static_cast<SelectionType>(fd->selected & ~mask), iter);
 }
 
-void vficon_marks_set(ViewFile *vf, gint UNUSED(enable))
+void vficon_marks_set(ViewFile *vf, gint)
 {
        GtkAllocation allocation;
        gtk_widget_get_allocation(vf->listview, &allocation);
        vficon_populate_at_new_size(vf, allocation.width, allocation.height, TRUE);
 }
 
-void vficon_star_rating_set(ViewFile *vf, gint UNUSED(enable))
+void vficon_star_rating_set(ViewFile *vf, gint)
 {
        GtkAllocation allocation;
        gtk_widget_get_allocation(vf->listview, &allocation);
@@ -743,10 +769,12 @@ static void vficon_select_util(ViewFile *vf, FileData *fd, gboolean select)
 
 static void vficon_select_region_util(ViewFile *vf, FileData *start, FileData *end, gboolean select)
 {
-       gint row1, col1;
-       gint row2, col2;
-       gint t;
-       gint i, j;
+       gint row1;
+       gint col1;
+       gint row2;
+       gint col2;
+       gint i;
+       gint j;
 
        if (!vficon_find_position(vf, start, &row1, &col1) ||
            !vficon_find_position(vf, end, &row2, &col2) ) return;
@@ -759,9 +787,7 @@ static void vficon_select_region_util(ViewFile *vf, FileData *start, FileData *e
 
                if (g_list_index(vf->list, start) > g_list_index(vf->list, end))
                        {
-                       FileData *tmp = start;
-                       start = end;
-                       end = tmp;
+                       std::swap(start, end);
                        }
 
                work = g_list_find(vf->list, start);
@@ -781,15 +807,11 @@ static void vficon_select_region_util(ViewFile *vf, FileData *start, FileData *e
        // rectangular_selection==true.
        if (row2 < row1)
                {
-               t = row1;
-               row1 = row2;
-               row2 = t;
+               std::swap(row1, row2);
                }
        if (col2 < col1)
                {
-               t = col1;
-               col1 = col2;
-               col2 = t;
+               std::swap(col1, col2);
                }
 
        DEBUG_1("table: %d x %d to %d x %d", row1, col1, row2, col2);
@@ -804,14 +826,17 @@ static void vficon_select_region_util(ViewFile *vf, FileData *start, FileData *e
                }
 }
 
-//gboolean vficon_index_is_selected(ViewFile *vf, gint row)
-//{
-       //FileData *fd = g_list_nth_data(vf->list, row);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-function"
+gboolean vficon_index_is_selected_unused(ViewFile *vf, gint row)
+{
+       auto *fd = static_cast<FileData *>(g_list_nth_data(vf->list, row));
 
-       //if (!fd) return FALSE;
+       if (!fd) return FALSE;
 
-       //return (fd->selected & SELECTION_SELECTED);
-//}
+       return (fd->selected & SELECTION_SELECTED);
+}
+#pragma GCC diagnostic pop
 
 guint vficon_selection_count(ViewFile *vf, gint64 *bytes)
 {
@@ -839,29 +864,16 @@ guint vficon_selection_count(ViewFile *vf, gint64 *bytes)
 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_concat(filelist_copy(fd->sidecar_files), list);
                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;
 }
 
@@ -925,7 +937,8 @@ void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
        while (work)
                {
                auto fd = static_cast<FileData *>(work->data);
-               gboolean mark_val, selected;
+               gboolean mark_val;
+               gboolean selected;
 
                g_assert(fd->magick == FD_MAGICK);
 
@@ -1098,7 +1111,8 @@ static void vficon_move_focus(ViewFile *vf, gint row, gint col, gboolean relativ
 static void vficon_set_focus(ViewFile *vf, FileData *fd)
 {
        GtkTreeIter iter;
-       gint row, col;
+       gint row;
+       gint col;
 
        if (g_list_find(vf->list, VFICON(vf)->focus_fd))
                {
@@ -1159,7 +1173,7 @@ static gint page_height(ViewFile *vf)
        gint row_height;
        gint ret;
 
-       adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vf->listview));
+       adj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(vf->listview));
        page_size = static_cast<gint>(gtk_adjustment_get_page_increment(adj));
 
        row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2;
@@ -1309,7 +1323,7 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
  *-------------------------------------------------------------------
  */
 
-static gboolean vficon_motion_cb(GtkWidget *UNUSED(widget), GdkEventMotion *event, gpointer data)
+static gboolean vficon_motion_cb(GtkWidget *, GdkEventMotion *event, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
        FileData *fd;
@@ -1320,7 +1334,7 @@ static gboolean vficon_motion_cb(GtkWidget *UNUSED(widget), GdkEventMotion *even
        return FALSE;
 }
 
-gboolean vficon_press_cb(GtkWidget *UNUSED(widget), GdkEventButton *bevent, gpointer data)
+gboolean vficon_press_cb(GtkWidget *, GdkEventButton *bevent, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
        GtkTreeIter iter;
@@ -1330,36 +1344,39 @@ gboolean vficon_press_cb(GtkWidget *UNUSED(widget), GdkEventButton *bevent, gpoi
 
        fd = vficon_find_data_by_coord(vf, static_cast<gint>(bevent->x), static_cast<gint>(bevent->y), &iter);
 
-       VFICON(vf)->click_fd = fd;
-       vficon_selection_add(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
-
-       switch (bevent->button)
+       if (fd)
                {
-               case MOUSE_BUTTON_LEFT:
-                       if (!gtk_widget_has_focus(vf->listview))
-                               {
-                               gtk_widget_grab_focus(vf->listview);
-                               }
+               VFICON(vf)->click_fd = fd;
+               vficon_selection_add(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
 
-                       if (bevent->type == GDK_2BUTTON_PRESS && vf->layout)
-                               {
-                               if (VFICON(vf)->click_fd->format_class == FORMAT_CLASS_COLLECTION)
+               switch (bevent->button)
+                       {
+                       case MOUSE_BUTTON_LEFT:
+                               if (!gtk_widget_has_focus(vf->listview))
                                        {
-                                       collection_window_new(VFICON(vf)->click_fd->path);
+                                       gtk_widget_grab_focus(vf->listview);
                                        }
-                               else
+
+                               if (bevent->type == GDK_2BUTTON_PRESS && vf->layout)
                                        {
-                                       vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
-                                       layout_image_full_screen_start(vf->layout);
+                                       if (VFICON(vf)->click_fd->format_class == FORMAT_CLASS_COLLECTION)
+                                               {
+                                               collection_window_new(VFICON(vf)->click_fd->path);
+                                               }
+                                       else
+                                               {
+                                               vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
+                                               layout_image_full_screen_start(vf->layout);
+                                               }
                                        }
-                               }
-                       break;
-               case MOUSE_BUTTON_RIGHT:
-                       vf->popup = vf_pop_menu(vf);
-                       gtk_menu_popup_at_pointer(GTK_MENU(vf->popup), nullptr);
-                       break;
-               default:
-                       break;
+                               break;
+                       case MOUSE_BUTTON_RIGHT:
+                               vf->popup = vf_pop_menu(vf);
+                               gtk_menu_popup_at_pointer(GTK_MENU(vf->popup), nullptr);
+                               break;
+                       default:
+                               break;
+                       }
                }
 
        return FALSE;
@@ -1446,7 +1463,7 @@ gboolean vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer d
        return TRUE;
 }
 
-static gboolean vficon_leave_cb(GtkWidget *UNUSED(widget), GdkEventCrossing *UNUSED(event), gpointer data)
+static gboolean vficon_leave_cb(GtkWidget *, GdkEventCrossing *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -1460,7 +1477,7 @@ static gboolean vficon_leave_cb(GtkWidget *UNUSED(widget), GdkEventCrossing *UNU
  *-------------------------------------------------------------------
  */
 
-static gboolean vficon_destroy_node_cb(GtkTreeModel *store, GtkTreePath *UNUSED(tpath), GtkTreeIter *iter, gpointer UNUSED(data))
+static gboolean vficon_destroy_node_cb(GtkTreeModel *store, GtkTreePath *, GtkTreeIter *iter, gpointer)
 {
        GList *list;
 
@@ -1505,7 +1522,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
        GtkTreePath *tpath;
        GList *work;
        FileData *visible_fd = nullptr;
-       gint r, c;
+       gint r;
        gboolean valid;
        GtkTreeIter iter;
 
@@ -1564,7 +1581,6 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                }
 
        r = -1;
-       c = 0;
 
        valid = gtk_tree_model_iter_children(store, &iter, nullptr);
 
@@ -1573,7 +1589,6 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                {
                GList *list;
                r++;
-               c = 0;
                if (valid)
                        {
                        gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
@@ -1592,7 +1607,6 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                                {
                                fd = static_cast<FileData *>(work->data);
                                work = work->next;
-                               c++;
                                }
                        else
                                {
@@ -1640,7 +1654,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
        vf_star_update(vf);
 }
 
-static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint UNUSED(h), gboolean force)
+static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint, gboolean force)
 {
        gint new_cols;
        gint thumb_width;
@@ -1659,7 +1673,7 @@ static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint UNUSED(h), gb
        DEBUG_1("col tab pop cols=%d rows=%d", VFICON(vf)->columns, VFICON(vf)->rows);
 }
 
-static void vficon_sized_cb(GtkWidget *UNUSED(widget), GtkAllocation *allocation, gpointer data)
+static void vficon_sized_cb(GtkWidget *, GtkAllocation *allocation, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -1672,12 +1686,13 @@ static void vficon_sized_cb(GtkWidget *UNUSED(widget), GtkAllocation *allocation
  *-----------------------------------------------------------------------------
  */
 
-void vficon_sort_set(ViewFile *vf, SortType type, gboolean ascend)
+void vficon_sort_set(ViewFile *vf, SortType type, gboolean ascend, gboolean case_sensitive)
 {
-       if (vf->sort_method == type && vf->sort_ascend == ascend) return;
+       if (vf->sort_method == type && vf->sort_ascend == ascend && vf->sort_case == case_sensitive) return;
 
        vf->sort_method = type;
        vf->sort_ascend = ascend;
+       vf->sort_case = case_sensitive;
 
        if (!vf->list) return;
 
@@ -1892,7 +1907,8 @@ gint vficon_index_by_fd(ViewFile *vf, FileData *in_fd)
 static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
 {
        gboolean ret = TRUE;
-       GList *work, *new_work;
+       GList *work;
+       GList *new_work;
        FileData *first_selected = nullptr;
        GList *new_filelist = nullptr;
        GList *new_fd_list = nullptr;
@@ -1914,8 +1930,8 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
 
                }
 
-       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);
+       vf->list = filelist_sort(vf->list, vf->sort_method, vf->sort_ascend, vf->sort_case); /* the list might not be sorted if there were renames */
+       new_filelist = filelist_sort(new_filelist, vf->sort_method, vf->sort_ascend, vf->sort_case);
 
        if (VFICON(vf)->selection)
                {
@@ -2057,21 +2073,14 @@ gboolean vficon_refresh(ViewFile *vf)
  *-----------------------------------------------------------------------------
  */
 
-typedef struct _ColumnData ColumnData;
-struct _ColumnData
-{
-       ViewFile *vf;
-       gint number;
-};
-
-static void vficon_cell_data_cb(GtkTreeViewColumn *UNUSED(tree_column), GtkCellRenderer *cell,
+static void vficon_cell_data_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
                                GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
 {
-       GList *list;
-       FileData *fd;
        auto cd = static_cast<ColumnData *>(data);
-       ViewFile *vf = cd->vf;
+       FileData *fd;
        gchar *star_rating;
+       GList *list;
+       ViewFile *vf = cd->vf;
 
        if (!GQV_IS_CELL_RENDERER_ICON(cell)) return;
 
@@ -2081,12 +2090,12 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *UNUSED(tree_column), GtkCellR
 
        if (fd)
                {
-               GdkColor color_fg;
-               GdkColor color_bg;
-               GtkStyle *style;
-               gchar *name_sidecars = nullptr;
                const gchar *link;
+               gchar *name_sidecars = nullptr;
+               GdkRGBA color_bg;
+               GdkRGBA color_fg;
                GtkStateType state = GTK_STATE_NORMAL;
+               GtkStyle *style;
 
                g_assert(fd->magick == FD_MAGICK);
 
@@ -2141,21 +2150,21 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *UNUSED(tree_column), GtkCellR
                        state = GTK_STATE_SELECTED;
                        }
 
-               memcpy(&color_fg, &style->text[state], sizeof(color_fg));
-               memcpy(&color_bg, &style->base[state], sizeof(color_bg));
+               convert_gdkcolor_to_gdkrgba(&style->text[state], &color_fg);
+               convert_gdkcolor_to_gdkrgba(&style->base[state], &color_bg);
 
                if (fd->selected & SELECTION_PRELIGHT)
                        {
                        shift_color(&color_bg, -1, 0);
                        }
 
-               g_object_set(cell,      "pixbuf", fd->thumb_pixbuf,
+               g_object_set(cell, "pixbuf", fd->thumb_pixbuf,
                                        "text", name_sidecars,
                                        "marks", file_data_get_marks(fd),
                                        "show_marks", vf->marks_enabled,
-                                       "cell-background-gdk", &color_bg,
+                                       "cell-background-rgba", &color_bg,
                                        "cell-background-set", TRUE,
-                                       "foreground-gdk", &color_fg,
+                                       "foreground-rgba", &color_fg,
                                        "foreground-set", TRUE,
                                        "has-focus", (VFICON(vf)->focus_fd == fd), NULL);
                g_free(name_sidecars);
@@ -2173,7 +2182,6 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *UNUSED(tree_column), GtkCellR
 
 static void vficon_append_column(ViewFile *vf, gint n)
 {
-       ColumnData *cd;
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
 
@@ -2192,7 +2200,7 @@ static void vficon_append_column(ViewFile *vf, gint n)
        g_object_set_data(G_OBJECT(column), "column_number", GINT_TO_POINTER(n));
        g_object_set_data(G_OBJECT(renderer), "column_number", GINT_TO_POINTER(n));
 
-       cd = g_new0(ColumnData, 1);
+       auto cd = g_new0(ColumnData, 1);
        cd->vf = vf;
        cd->number = n;
        gtk_tree_view_column_set_cell_data_func(column, renderer, vficon_cell_data_cb, cd, g_free);
@@ -2233,7 +2241,7 @@ gboolean vficon_set_fd(ViewFile *vf, FileData *dir_fd)
        return ret;
 }
 
-void vficon_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
+void vficon_destroy_cb(GtkWidget *, gpointer data)
 {
        auto vf = static_cast<ViewFile *>(data);
 
@@ -2250,7 +2258,7 @@ void vficon_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
        g_list_free(VFICON(vf)->selection);
 }
 
-ViewFile *vficon_new(ViewFile *vf, FileData *UNUSED(dir_fd))
+ViewFile *vficon_new(ViewFile *vf, FileData *)
 {
        GtkListStore *store;
        GtkTreeSelection *selection;