Documentation: Use G_SOURCE_CONTINUE and G_SOURCE_REMOVE
[geeqie.git] / src / dupe.cc
index 5dc07bf..8ea13e9 100644 (file)
 #include "dupe.h"
 
 #include "cache.h"
-#include "collect.h"
 #include "collect-table.h"
 #include "dnd.h"
-#include "editors.h"
 #include "filedata.h"
 #include "history-list.h"
 #include "image-load.h"
 #include "img-view.h"
-#include "layout.h"
 #include "layout-image.h"
 #include "layout-util.h"
 #include "md5-util.h"
@@ -50,9 +47,6 @@
 #include "utilops.h"
 #include "window.h"
 
-#include <gdk/gdkkeysyms.h> /* for keyboard values */
-
-
 #include <math.h>
 
 
@@ -153,20 +147,20 @@ hard_coded_window_keys dupe_window_keys[] = {
        {GDK_CONTROL_MASK, 'R', N_("Rename")},
        {GDK_CONTROL_MASK, 'D', N_("Move to Trash")},
        {GDK_SHIFT_MASK, GDK_KEY_Delete, N_("Delete")},
-       {0, GDK_KEY_Delete, N_("Remove")},
+       {static_cast<GdkModifierType>(0), GDK_KEY_Delete, N_("Remove")},
        {GDK_CONTROL_MASK, GDK_KEY_Delete, N_("Clear")},
        {GDK_CONTROL_MASK, 'A', N_("Select all")},
-       {GDK_CONTROL_MASK + GDK_SHIFT_MASK, 'A', N_("Select none")},
+       {static_cast<GdkModifierType>(GDK_CONTROL_MASK + GDK_SHIFT_MASK), 'A', N_("Select none")},
        {GDK_CONTROL_MASK, 'T', N_("Toggle thumbs")},
        {GDK_CONTROL_MASK, 'W', N_("Close window")},
-       {0, GDK_KEY_Return, N_("View")},
-       {0, 'V', N_("View in new window")},
-       {0, 'C', N_("Collection from selection")},
+       {static_cast<GdkModifierType>(0), GDK_KEY_Return, N_("View")},
+       {static_cast<GdkModifierType>(0), 'V', N_("View in new window")},
+       {static_cast<GdkModifierType>(0), 'C', N_("Collection from selection")},
        {GDK_CONTROL_MASK, 'L', N_("Append list")},
-       {0, '0', N_("Select none")},
-       {0, '1', N_("Select group 1 duplicates")},
-       {0, '2', N_("Select group 2 duplicates")},
-       {0, 0, NULL}
+       {static_cast<GdkModifierType>(0), '0', N_("Select none")},
+       {static_cast<GdkModifierType>(0), '1', N_("Select group 1 duplicates")},
+       {static_cast<GdkModifierType>(0), '2', N_("Select group 2 duplicates")},
+       {static_cast<GdkModifierType>(0), 0, NULL}
 };
 
 /**
@@ -181,8 +175,8 @@ hard_coded_window_keys dupe_window_keys[] = {
  */
 static void dupe_comparison_func(gpointer d1, gpointer d2)
 {
-       DupeQueueItem *dqi = d1;
-       DupeWindow *dw = d2;
+       DupeQueueItem *dqi = static_cast<DupeQueueItem *>(d1);
+       DupeWindow *dw = static_cast<DupeWindow *>(d2);
        DupeSearchMatch *dsm;
        DupeItem *di;
        GList *matches = NULL;
@@ -193,7 +187,7 @@ static void dupe_comparison_func(gpointer d1, gpointer d2)
                GList *work = dqi->work;
                while (work)
                        {
-                       di = work->data;
+                       di = static_cast<DupeItem *>(work->data);
 
                        /* forward for second set, back for simple compare */
                        if (dw->second_set)
@@ -396,7 +390,7 @@ static void widget_set_cursor(GtkWidget *widget, gint icon)
                }
        else
                {
-               cursor = gdk_cursor_new(icon);
+               cursor = gdk_cursor_new(static_cast<GdkCursorType>(icon));
                }
 
        gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
@@ -479,7 +473,7 @@ static void dupe_list_free(GList *list)
        GList *work = list;
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
                work = work->next;
                dupe_item_free(di);
                }
@@ -491,7 +485,7 @@ static DupeItem *dupe_item_find_fd_by_list(FileData *fd, GList *work)
 {
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
 
                if (di->fd == fd) return di;
 
@@ -519,7 +513,7 @@ static DupeItem *dupe_item_find_path_by_list(const gchar *path, GList *work)
 {
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
 
                if (strcmp(di->fd->path, path) == 0) return di;
 
@@ -670,7 +664,7 @@ static void dupe_listview_add(DupeWindow *dw, DupeItem *parent, DupeItem *child)
 
                if (child->group)
                        {
-                       dm = child->group->data;
+                       dm = static_cast<DupeMatch *>(child->group->data);
                        rank = (gint)floor(dm->rank);
                        }
                else
@@ -710,7 +704,7 @@ static void dupe_listview_add(DupeWindow *dw, DupeItem *parent, DupeItem *child)
                text[DUPE_COLUMN_RANK] = g_strdup_printf("%d%s", rank, (di->second) ? " (2)" : "");
                }
 
-       text[DUPE_COLUMN_THUMB] = "";
+       text[DUPE_COLUMN_THUMB] = _("");
        text[DUPE_COLUMN_NAME] = (gchar *)di->fd->name;
        text[DUPE_COLUMN_SIZE] = text_from_size(di->fd->size);
        text[DUPE_COLUMN_DATE] = (gchar *)text_from_time(di->fd->date);
@@ -757,7 +751,7 @@ static void dupe_listview_populate(DupeWindow *dw)
        work = g_list_last(dw->dupes);
        while (work)
                {
-               DupeItem *parent = work->data;
+               DupeItem *parent = static_cast<DupeItem *>(work->data);
                GList *temp;
 
                dupe_listview_add(dw, parent, NULL);
@@ -765,7 +759,7 @@ static void dupe_listview_populate(DupeWindow *dw)
                temp = g_list_last(parent->group);
                while (temp)
                        {
-                       DupeMatch *dm = temp->data;
+                       DupeMatch *dm = static_cast<DupeMatch *>(temp->data);
                        DupeItem *child;
 
                        child = dm->di;
@@ -848,7 +842,7 @@ static GList *dupe_listview_get_selection(DupeWindow *UNUSED(dw), GtkWidget *lis
        work = slist;
        while (work)
                {
-               GtkTreePath *tpath = work->data;
+               GtkTreePath *tpath = static_cast<GtkTreePath *>(work->data);
                DupeItem *di = NULL;
                GtkTreeIter iter;
 
@@ -879,7 +873,7 @@ static gboolean dupe_listview_item_is_selected(DupeWindow *UNUSED(dw), DupeItem
        work = slist;
        while (!found && work)
                {
-               GtkTreePath *tpath = work->data;
+               GtkTreePath *tpath = static_cast<GtkTreePath *>(work->data);
                DupeItem *di_n;
                GtkTreeIter iter;
 
@@ -952,7 +946,7 @@ static DupeMatch *dupe_match_find_match(DupeItem *child, DupeItem *parent)
        work = parent->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                if (dm->di == child) return dm;
                work = work->next;
                }
@@ -1036,7 +1030,7 @@ static void dupe_match_link_clear(DupeItem *parent, gboolean unlink_children)
        work = parent->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                work = work->next;
 
                if (unlink_children) dupe_match_unlink_child(parent, dm->di);
@@ -1096,7 +1090,7 @@ static DupeItem *dupe_match_highest_rank(DupeItem *child)
        work = child->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                if (!dr || dm->rank > dr->rank)
                        {
                        dr = dm;
@@ -1122,7 +1116,7 @@ static void dupe_match_rank_update(DupeItem *parent)
        work = parent->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                work = work->next;
                rank += dm->rank;
                c++;
@@ -1147,7 +1141,7 @@ static DupeItem *dupe_match_find_parent(DupeWindow *dw, DupeItem *child)
        work = child->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                if (g_list_find(dw->dupes, dm->di)) return dm->di;
                work = work->next;
                }
@@ -1166,7 +1160,7 @@ static void dupe_match_reset_list(GList *work)
 {
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
                work = work->next;
 
                dupe_match_link_clear(di, FALSE);
@@ -1183,7 +1177,7 @@ static void dupe_match_reparent(DupeWindow *dw, DupeItem *old_parent, DupeItem *
        work = old_parent->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                dupe_match_unlink_child(old_parent, dm->di);
                dupe_match_link_child(new_parent, dm->di, dm->rank);
                work = work->next;
@@ -1205,7 +1199,7 @@ static void dupe_match_print_group(DupeItem *di)
        work = di->group;
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                work = work->next;
 
                log_printf("  %f %s\n", dm->rank, dm->di->fd->name);
@@ -1221,7 +1215,7 @@ static void dupe_match_print_list(GList *list)
        work = list;
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
                dupe_match_print_group(di);
                work = work->next;
                }
@@ -1257,7 +1251,7 @@ static GList *dupe_match_unlink_by_rank(DupeItem *child, DupeItem *parent, GList
                work = parent->group;
                while (work)
                        {
-                       DupeMatch *dm = work->data;
+                       DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                        DupeItem *orphan;
 
                        work = work->next;
@@ -1307,7 +1301,7 @@ static GList *dupe_match_group_filter(GList *list, DupeItem *di, DupeWindow *dw)
        work = g_list_last(di->group);
        while (work)
                {
-               DupeMatch *dm = work->data;
+               DupeMatch *dm = static_cast<DupeMatch *>(work->data);
                work = work->prev;
                list = dupe_match_unlink_by_rank(di, dm->di, list, dw);
                }
@@ -1332,7 +1326,7 @@ static GList *dupe_match_group_trim(GList *list, DupeWindow *dw)
        work = list;
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
                if (!di->second) list = dupe_match_group_filter(list, di, dw);
                work = work->next;
                if (di->second) list = g_list_remove(list, di);
@@ -1364,7 +1358,7 @@ static void dupe_match_sort_groups(GList *list)
        work = list;
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
                di->group = g_list_sort(di->group, dupe_match_sort_groups_cb);
                work = work->next;
                }
@@ -1419,7 +1413,7 @@ static GList *dupe_match_rank_sort(GList *source_list)
        work = source_list;
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
 
                if (di->group)
                        {
@@ -1636,7 +1630,7 @@ static gboolean dupe_match(DupeItem *a, DupeItem *b, DupeMatchType mask, gdouble
  */
 static DUPE_CHECK_RESULT dupe_match_check(DupeItem *di1, DupeItem *di2, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        DupeMatchType mask = dw->match_mask;
 
        if (mask & DUPE_MATCH_ALL)
@@ -1740,7 +1734,7 @@ static DUPE_CHECK_RESULT dupe_match_check(DupeItem *di1, DupeItem *di2, gpointer
 static gint dupe_match_binary_search_cb(gconstpointer a, gconstpointer b)
 {
        const DupeItem *di1 = *((DupeItem **) a);
-       const DupeItem *di2 = b;
+       const DupeItem *di2 = static_cast<const DupeItem *>(b);
        DupeMatchType mask = param_match_mask;
 
        if (mask & DUPE_MATCH_ALL)
@@ -1800,7 +1794,7 @@ static gint dupe_match_sort_cb(gconstpointer a, gconstpointer b, gpointer data)
 {
        const DupeItem *di1 = *((DupeItem **) a);
        const DupeItem *di2 = *((DupeItem **) b);
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        DupeMatchType mask = dw->match_mask;
 
        if (mask & DUPE_MATCH_ALL)
@@ -1893,7 +1887,7 @@ static void dupe_array_check(DupeWindow *dw )
        work = dw->list;
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
                g_array_append_val(array_set1, di);
                work = work->next;
                }
@@ -1915,12 +1909,12 @@ static void dupe_array_check(DupeWindow *dw )
 
                        for (i_set1 = 0; i_set1 <= (gint)(array_set1->len) - 1; i_set1++)
                                {
-                               DupeItem *di1 = g_array_index(array_set1, gpointer, i_set1);
+                               DupeItem *di1 = static_cast<DupeItem *>(g_array_index(array_set1, gpointer, i_set1));
                                DupeItem *di2 = NULL;
                                /* If multiple identical entries in set 1, use the last one */
                                if (i_set1 < (gint)(array_set1->len) - 2)
                                        {
-                                       di2 = g_array_index(array_set1, gpointer, i_set1 + 1);
+                                       di2 = static_cast<DupeItem *>(g_array_index(array_set1, gpointer, i_set1 + 1));
                                        check_result = dupe_match_check(di1, di2, dw);
                                        if (check_result == DUPE_MATCH || check_result == DUPE_NAME_MATCH)
                                                {
@@ -1936,7 +1930,7 @@ static void dupe_array_check(DupeWindow *dw )
                                match_found = FALSE;
                                for(i=0; i < array_set2->len; i++)
                                        {
-                                       di2 = g_array_index(array_set2,  gpointer, i);
+                                       di2 = static_cast<DupeItem *>(g_array_index(array_set2,  gpointer, i));
                                        check_result = dupe_match_check(di1, di2, dw);
                                        if (check_result == DUPE_MATCH)
                                                {
@@ -1949,7 +1943,7 @@ static void dupe_array_check(DupeWindow *dw )
 
                                if (match_found)
                                        {
-                                       di2 = g_array_index(array_set2, gpointer, out_match_index);
+                                       di2 = static_cast<DupeItem *>(g_array_index(array_set2, gpointer, out_match_index));
 
                                        check_result = dupe_match_check(di1, di2, dw);
                                        if (check_result == DUPE_MATCH || check_result == DUPE_NAME_MATCH)
@@ -1965,7 +1959,7 @@ static void dupe_array_check(DupeWindow *dw )
                                                        break;
                                                        }
                                                /* Look for multiple matches in set 2 for item di1 */
-                                               di2 = g_array_index(array_set2, gpointer, i_set2);
+                                               di2 = static_cast<DupeItem *>(g_array_index(array_set2, gpointer, i_set2));
                                                check_result = dupe_match_check(di1, di2, dw);
                                                while (check_result == DUPE_MATCH || check_result == DUPE_NAME_MATCH)
                                                        {
@@ -1978,7 +1972,7 @@ static void dupe_array_check(DupeWindow *dw )
                                                                {
                                                                break;
                                                                }
-                                                       di2 = g_array_index(array_set2, gpointer, i_set2);
+                                                       di2 = static_cast<DupeItem *>(g_array_index(array_set2, gpointer, i_set2));
                                                        check_result = dupe_match_check(di1, di2, dw);
                                                        }
                                                }
@@ -1996,8 +1990,8 @@ static void dupe_array_check(DupeWindow *dw )
                        {
                        for (i_set1 = 0; i_set1 <= (gint)(array_set1->len) - 2; i_set1++)
                                {
-                               DupeItem *di1 = g_array_index(array_set1, gpointer, i_set1);
-                               DupeItem *di2 = g_array_index(array_set1, gpointer, i_set1 + 1);
+                               DupeItem *di1 = static_cast<DupeItem *>(g_array_index(array_set1, gpointer, i_set1));
+                               DupeItem *di2 = static_cast<DupeItem *>(g_array_index(array_set1, gpointer, i_set1 + 1));
 
                                check_result = dupe_match_check(di1, di2, dw);
                                if (check_result == DUPE_MATCH || check_result == DUPE_NAME_MATCH)
@@ -2013,7 +2007,7 @@ static void dupe_array_check(DupeWindow *dw )
                                                break;
                                                }
                                        /* Look for multiple matches for item di1 */
-                                       di2 = g_array_index(array_set1, gpointer, i_set1 + 1);
+                                       di2 = static_cast<DupeItem *>(g_array_index(array_set1, gpointer, i_set1 + 1));
                                        check_result = dupe_match_check(di1, di2, dw);
                                        while (check_result == DUPE_MATCH || check_result == DUPE_NAME_MATCH)
                                                {
@@ -2027,7 +2021,7 @@ static void dupe_array_check(DupeWindow *dw )
                                                        {
                                                        break;
                                                        }
-                                               di2 = g_array_index(array_set1, gpointer, i_set1 + 1);
+                                               di2 = static_cast<DupeItem *>(g_array_index(array_set1, gpointer, i_set1 + 1));
                                                check_result = dupe_match_check(di1, di2, dw);
                                                }
                                        }
@@ -2114,7 +2108,7 @@ static void dupe_thumb_do(DupeWindow *dw)
 
 static void dupe_thumb_error_cb(ThumbLoader *UNUSED(tl), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_thumb_do(dw);
        dupe_thumb_step(dw);
@@ -2122,7 +2116,7 @@ static void dupe_thumb_error_cb(ThumbLoader *UNUSED(tl), gpointer data)
 
 static void dupe_thumb_done_cb(ThumbLoader *UNUSED(tl), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_thumb_do(dw);
        dupe_thumb_step(dw);
@@ -2252,21 +2246,21 @@ static void dupe_check_stop(DupeWindow *dw)
 
 static void dupe_check_stop_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_check_stop(dw);
 }
 
 static void dupe_loader_done_cb(ImageLoader *il, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GdkPixbuf *pixbuf;
 
        pixbuf = image_loader_get_pixbuf(il);
 
        if (dw->setup_point)
                {
-               DupeItem *di = dw->setup_point->data;
+               DupeItem *di = static_cast<DupeItem *>(dw->setup_point->data);
 
                if (!di->simd)
                        {
@@ -2334,7 +2328,7 @@ static gboolean create_checksums_dimensions(DupeWindow *dw, GList *list)
 
                        while (dw->setup_point)
                                {
-                               DupeItem *di = dw->setup_point->data;
+                               DupeItem *di = static_cast<DupeItem *>(dw->setup_point->data);
 
                                dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
                                dw->setup_n++;
@@ -2371,7 +2365,7 @@ static gboolean create_checksums_dimensions(DupeWindow *dw, GList *list)
 
                        while (dw->setup_point)
                                {
-                               DupeItem *di = dw->setup_point->data;
+                               DupeItem *di = static_cast<DupeItem *>(dw->setup_point->data);
 
                                dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
                                dw->setup_n++;
@@ -2430,12 +2424,12 @@ static gint sort_func(gconstpointer a, gconstpointer b)
  */
 static gboolean dupe_check_cb(gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        DupeSearchMatch *search_match_list_item;
 
        if (!dw->idle_id)
                {
-               return FALSE;
+               return G_SOURCE_REMOVE;
                }
 
        if (!dw->setup_done) /* Clear on 1st entry */
@@ -2444,14 +2438,14 @@ static gboolean dupe_check_cb(gpointer data)
                        {
                        if (create_checksums_dimensions(dw, dw->list))
                                {
-                               return TRUE;
+                               return G_SOURCE_CONTINUE;
                                }
                        }
                if (dw->second_list)
                        {
                        if (create_checksums_dimensions(dw, dw->second_list))
                                {
-                               return TRUE;
+                               return G_SOURCE_CONTINUE;
                                }
                        }
                if ((dw->match_mask & DUPE_MATCH_SIM_HIGH ||
@@ -2465,7 +2459,7 @@ static gboolean dupe_check_cb(gpointer data)
 
                        while (dw->setup_point)
                                {
-                               DupeItem *di = dw->setup_point->data;
+                               DupeItem *di = static_cast<DupeItem *>(dw->setup_point->data);
 
                                if (!di->simd)
                                        {
@@ -2478,7 +2472,7 @@ static gboolean dupe_check_cb(gpointer data)
                                                if (cache_sim_data_filled(di->simd))
                                                        {
                                                        image_sim_alternate_processing(di->simd);
-                                                       return TRUE;
+                                                       return G_SOURCE_CONTINUE;
                                                        }
                                                }
 
@@ -2493,16 +2487,16 @@ static gboolean dupe_check_cb(gpointer data)
                                                di->simd = image_sim_new();
                                                image_loader_free(dw->img_loader);
                                                dw->img_loader = NULL;
-                                               return TRUE;
+                                               return G_SOURCE_CONTINUE;
                                                }
                                        dw->idle_id = 0;
-                                       return FALSE;
+                                       return G_SOURCE_REMOVE;
                                        }
 
                                dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
                                dw->setup_n++;
                                }
-                       dw->setup_mask |= DUPE_MATCH_SIM_MED;
+                       dw->setup_mask = static_cast<DupeMatchType>(dw->setup_mask | DUPE_MATCH_SIM_MED);
                        dupe_setup_reset(dw);
                        }
 
@@ -2529,7 +2523,7 @@ static gboolean dupe_check_cb(gpointer data)
                                {
                                dupe_window_update_progress(dw, _("Comparing..."), 0.0, FALSE);
 
-                               return TRUE;
+                               return G_SOURCE_CONTINUE;
                                }
 
                        if (dw->search_matches_sorted == NULL)
@@ -2542,7 +2536,7 @@ static gboolean dupe_check_cb(gpointer data)
                                {
                                dw->setup_n++;
                                dupe_window_update_progress(dw, _("Sorting..."), 0.0, FALSE);
-                               search_match_list_item = dw->search_matches_sorted->data;
+                               search_match_list_item = static_cast<DupeSearchMatch *>(dw->search_matches_sorted->data);
 
                                if (!dupe_match_link_exists(search_match_list_item->a, search_match_list_item->b))
                                        {
@@ -2553,7 +2547,7 @@ static gboolean dupe_check_cb(gpointer data)
 
                                if (dw->search_matches_sorted != NULL)
                                        {
-                                       return TRUE;
+                                       return G_SOURCE_CONTINUE;
                                        }
                                }
                        g_list_free(dw->search_matches);
@@ -2568,7 +2562,7 @@ static gboolean dupe_check_cb(gpointer data)
                                {
                                dw->setup_count = 0;
                                dupe_window_update_progress(dw, _("Sorting..."), 1.0, TRUE);
-                               return TRUE;
+                               return G_SOURCE_CONTINUE;
                                }
                        }
 
@@ -2585,7 +2579,7 @@ static gboolean dupe_check_cb(gpointer data)
 
                widget_set_cursor(dw->listview, -1);
 
-               return FALSE;
+               return G_SOURCE_REMOVE;
                /* The end */
                }
 
@@ -2613,7 +2607,7 @@ static gboolean dupe_check_cb(gpointer data)
                dupe_array_check(dw);
                }
 
-       return TRUE;
+       return G_SOURCE_CONTINUE;
 }
 
 static void dupe_check_start(DupeWindow *dw)
@@ -2623,7 +2617,7 @@ static void dupe_check_start(DupeWindow *dw)
        dw->setup_count = g_list_length(dw->list);
        if (dw->second_set) dw->setup_count += g_list_length(dw->second_list);
 
-       dw->setup_mask = 0;
+       dw->setup_mask = DUPE_MATCH_NONE;
        dupe_setup_reset(dw);
 
        dw->working = g_list_last(dw->list);
@@ -2642,7 +2636,7 @@ static void dupe_check_start(DupeWindow *dw)
 
 static gboolean dupe_check_start_cb(gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_check_start(dw);
 
@@ -2704,7 +2698,7 @@ static void dupe_item_remove(DupeWindow *dw, DupeItem *di)
                                DupeItem *new_parent;
                                DupeMatch *dm;
 
-                               dm = parent->group->data;
+                               dm = static_cast<DupeMatch *>(parent->group->data);
                                new_parent = dm->di;
                                dupe_match_reparent(dw, parent, new_parent);
                                dupe_listview_remove(dw, parent);
@@ -2758,7 +2752,7 @@ static gboolean dupe_item_remove_by_path(DupeWindow *dw, const gchar *path)
 static gboolean dupe_files_add_queue_cb(gpointer data)
 {
        DupeItem *di = NULL;
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        FileData *fd;
        GList *queue = dw->add_files_queue;
 
@@ -2773,7 +2767,7 @@ static gboolean dupe_files_add_queue_cb(gpointer data)
                return FALSE;
                }
 
-       fd = queue->data;
+       fd = static_cast<FileData *>(queue->data);
        if (fd)
                {
                if (isfile(fd->path))
@@ -2894,7 +2888,7 @@ static void dupe_files_add(DupeWindow *dw, CollectionData *UNUSED(collection), C
        work = g_list_first(dw->list);
        while (work)
                {
-               di_list = work->data;
+               di_list = static_cast<DupeItem *>(work->data);
                if (di_list->fd == di->fd)
                        {
                        return;
@@ -2910,7 +2904,7 @@ static void dupe_files_add(DupeWindow *dw, CollectionData *UNUSED(collection), C
                work = g_list_first(dw->second_list);
                while (work)
                        {
-                       di_list = work->data;
+                       di_list = static_cast<DupeItem *>(work->data);
                        if (di_list->fd == di->fd)
                                {
                                return;
@@ -2939,14 +2933,14 @@ static void dupe_init_list_cache(DupeWindow *dw)
 
        for (GList *i = dw->list; i != NULL; i = i->next)
                {
-                       DupeItem *di = i->data;
+                       DupeItem *di = static_cast<DupeItem *>(i->data);
 
                        g_hash_table_add(dw->list_cache, di->fd);
                }
 
        for (GList *i = dw->second_list; i != NULL; i = i->next)
                {
-                       DupeItem *di = i->data;
+                       DupeItem *di = static_cast<DupeItem *>(i->data);
 
                        g_hash_table_add(dw->second_list_cache, di->fd);
                }
@@ -2998,7 +2992,7 @@ void dupe_window_add_files(DupeWindow *dw, GList *list, gboolean recurse)
        work = list;
        while (work)
                {
-               FileData *fd = work->data;
+               FileData *fd = static_cast<FileData *>(work->data);
                work = work->next;
                if (isdir(fd->path) && !recurse)
                        {
@@ -3091,7 +3085,7 @@ static void dupe_item_update_fd_in_list(DupeWindow *dw, FileData *fd, GList *wor
 {
        while (work)
                {
-               DupeItem *di = work->data;
+               DupeItem *di = static_cast<DupeItem *>(work->data);
 
                if (di->fd == fd)
                        dupe_item_update(dw, di);
@@ -3258,7 +3252,7 @@ static void dupe_window_remove_selection(DupeWindow *dw, GtkWidget *listview)
        work = slist;
        while (work)
                {
-               GtkTreePath *tpath = work->data;
+               GtkTreePath *tpath = static_cast<GtkTreePath *>(work->data);
                DupeItem *di = NULL;
 
                gtk_tree_model_get_iter(store, &iter, tpath);
@@ -3275,7 +3269,7 @@ static void dupe_window_remove_selection(DupeWindow *dw, GtkWidget *listview)
                {
                DupeItem *di;
 
-               di = work->data;
+               di = static_cast<DupeItem *>(work->data);
                work = work->next;
                dupe_item_remove(dw, di);
                }
@@ -3321,21 +3315,21 @@ static void dupe_window_append_file_list(DupeWindow *dw, gint on_second)
 
 static void dupe_menu_view_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->listview, FALSE);
 }
 
 static void dupe_menu_viewnew_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->listview, TRUE);
 }
 
 static void dupe_menu_select_all_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GtkTreeSelection *selection;
 
        options->duplicates_select_type = DUPE_SELECT_NONE;
@@ -3345,7 +3339,7 @@ static void dupe_menu_select_all_cb(GtkWidget *UNUSED(widget), gpointer data)
 
 static void dupe_menu_select_none_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GtkTreeSelection *selection;
 
        options->duplicates_select_type = DUPE_SELECT_NONE;
@@ -3355,7 +3349,7 @@ static void dupe_menu_select_none_cb(GtkWidget *UNUSED(widget), gpointer data)
 
 static void dupe_menu_select_dupes_set1_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->duplicates_select_type = DUPE_SELECT_GROUP1;
        dupe_listview_select_dupes(dw, DUPE_SELECT_GROUP1);
@@ -3363,7 +3357,7 @@ static void dupe_menu_select_dupes_set1_cb(GtkWidget *UNUSED(widget), gpointer d
 
 static void dupe_menu_select_dupes_set2_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->duplicates_select_type = DUPE_SELECT_GROUP2;
        dupe_listview_select_dupes(dw, DUPE_SELECT_GROUP2);
@@ -3372,9 +3366,9 @@ static void dupe_menu_select_dupes_set2_cb(GtkWidget *UNUSED(widget), gpointer d
 static void dupe_menu_edit_cb(GtkWidget *widget, gpointer data)
 {
        DupeWindow *dw;
-       const gchar *key = data;
+       const gchar *key = static_cast<const gchar *>(data);
 
-       dw = submenu_item_get_data(widget);
+       dw = static_cast<DupeWindow *>(submenu_item_get_data(widget));
        if (!dw) return;
 
        dupe_window_edit_selected(dw, key);
@@ -3382,7 +3376,7 @@ static void dupe_menu_edit_cb(GtkWidget *widget, gpointer data)
 
 static void dupe_menu_print_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        FileData *fd;
 
        fd = (dw->click_item) ? dw->click_item->fd : NULL;
@@ -3394,28 +3388,28 @@ static void dupe_menu_print_cb(GtkWidget *UNUSED(widget), gpointer data)
 
 static void dupe_menu_copy_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        file_util_copy(NULL, dupe_listview_get_selection(dw, dw->listview), NULL, dw->window);
 }
 
 static void dupe_menu_move_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        file_util_move(NULL, dupe_listview_get_selection(dw, dw->listview), NULL, dw->window);
 }
 
 static void dupe_menu_rename_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        file_util_rename(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window);
 }
 
 static void dupe_menu_delete_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->file_ops.safe_delete_enable = FALSE;
        file_util_delete_notify_done(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window, delete_finished_cb, dw);
@@ -3423,7 +3417,7 @@ static void dupe_menu_delete_cb(GtkWidget *UNUSED(widget), gpointer data)
 
 static void dupe_menu_move_to_trash_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->file_ops.safe_delete_enable = TRUE;
        file_util_delete_notify_done(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window, delete_finished_cb, dw);
@@ -3431,42 +3425,42 @@ static void dupe_menu_move_to_trash_cb(GtkWidget *UNUSED(widget), gpointer data)
 
 static void dupe_menu_copy_path_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        file_util_copy_path_list_to_clipboard(dupe_listview_get_selection(dw, dw->listview), TRUE);
 }
 
 static void dupe_menu_copy_path_unquoted_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        file_util_copy_path_list_to_clipboard(dupe_listview_get_selection(dw, dw->listview), FALSE);
 }
 
 static void dupe_menu_remove_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_window_remove_selection(dw, dw->listview);
 }
 
 static void dupe_menu_clear_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_window_clear(dw);
 }
 
 static void dupe_menu_close_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_window_close(dw);
 }
 
 static void dupe_menu_popup_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       GList *editmenu_fd_list = data;
+       GList *editmenu_fd_list = static_cast<GList *>(data);
 
        filelist_free(editmenu_fd_list);
 }
@@ -3499,7 +3493,7 @@ static void dupe_pop_menu_collections_cb(GtkWidget *widget, gpointer data)
        DupeWindow *dw;
        GList *selection_list;
 
-       dw = submenu_item_get_data(widget);
+       dw = static_cast<DupeWindow *>(submenu_item_get_data(widget));
        selection_list = dupe_listview_get_selection(dw, dw->listview);
        pop_menu_collections(selection_list, data);
 
@@ -3591,7 +3585,7 @@ static GtkWidget *dupe_menu_popup_main(DupeWindow *dw, DupeItem *di)
 
 static gboolean dupe_listview_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GtkTreeModel *store;
        GtkTreePath *tpath;
        GtkTreeIter iter;
@@ -3674,7 +3668,7 @@ static gboolean dupe_listview_press_cb(GtkWidget *widget, GdkEventButton *bevent
 
 static gboolean dupe_listview_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GtkTreeModel *store;
        GtkTreePath *tpath;
        GtkTreeIter iter;
@@ -3803,14 +3797,14 @@ static void dupe_second_clear(DupeWindow *dw)
 
 static void dupe_second_menu_view_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->second_listview, FALSE);
 }
 
 static void dupe_second_menu_viewnew_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->second_listview, TRUE);
 }
@@ -3818,7 +3812,7 @@ static void dupe_second_menu_viewnew_cb(GtkWidget *UNUSED(widget), gpointer data
 static void dupe_second_menu_select_all_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
        GtkTreeSelection *selection;
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->second_listview));
        gtk_tree_selection_select_all(selection);
@@ -3827,7 +3821,7 @@ static void dupe_second_menu_select_all_cb(GtkWidget *UNUSED(widget), gpointer d
 static void dupe_second_menu_select_none_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
        GtkTreeSelection *selection;
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->second_listview));
        gtk_tree_selection_unselect_all(selection);
@@ -3835,14 +3829,14 @@ static void dupe_second_menu_select_none_cb(GtkWidget *UNUSED(widget), gpointer
 
 static void dupe_second_menu_remove_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_window_remove_selection(dw, dw->second_listview);
 }
 
 static void dupe_second_menu_clear_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_second_clear(dw);
        dupe_window_recompare(dw);
@@ -3885,7 +3879,7 @@ static GtkWidget *dupe_menu_popup_second(DupeWindow *dw, DupeItem *di)
 
 static void dupe_second_set_toggle_cb(GtkWidget *widget, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dw->second_set = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
@@ -3907,7 +3901,7 @@ static void dupe_second_set_toggle_cb(GtkWidget *widget, gpointer data)
 
 static void dupe_sort_totals_toggle_cb(GtkWidget *widget, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->sort_totals = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
        dupe_window_recompare(dw);
@@ -3929,7 +3923,7 @@ static void dupe_listview_show_rank(GtkWidget *listview, gboolean rank);
 
 static void dupe_menu_type_cb(GtkWidget *combo, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GtkTreeModel *store;
        GtkTreeIter iter;
 
@@ -4039,7 +4033,7 @@ static GdkColor *dupe_listview_color_shifted(GtkWidget *widget)
 static void dupe_listview_color_cb(GtkTreeViewColumn *UNUSED(tree_column), GtkCellRenderer *cell,
                                   GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        gboolean set;
 
        gtk_tree_model_get(tree_model, iter, DUPE_COLUMN_COLOR, &set, -1);
@@ -4107,7 +4101,7 @@ static void dupe_listview_set_height(GtkWidget *listview, gboolean thumb)
 
        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
        if (!list) return;
-       cell = list->data;
+       cell = static_cast<GtkCellRenderer *>(list->data);
        g_list_free(list);
 
        g_object_set(G_OBJECT(cell), "height", (thumb) ? options->thumbnails.max_height : -1, NULL);
@@ -4132,7 +4126,7 @@ static void dupe_listview_show_rank(GtkWidget *listview, gboolean rank)
 
 static void dupe_window_show_thumb_cb(GtkWidget *widget, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dw->show_thumbs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
        options->duplicates_thumbnails = dw->show_thumbs;
@@ -4166,7 +4160,7 @@ static void dupe_window_show_thumb_cb(GtkWidget *widget, gpointer data)
 
 static void dupe_window_rotation_invariant_cb(GtkWidget *widget, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->rot_invariant_sim = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
        dupe_window_recompare(dw);
@@ -4174,7 +4168,7 @@ static void dupe_window_rotation_invariant_cb(GtkWidget *widget, gpointer data)
 
 static void dupe_window_custom_threshold_cb(GtkWidget *widget, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        DupeMatchType match_type;
        GtkTreeModel *store;
        gboolean valid;
@@ -4201,7 +4195,7 @@ static void dupe_window_custom_threshold_cb(GtkWidget *widget, gpointer data)
 
 static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        gboolean stop_signal = FALSE;
        gboolean on_second;
        GtkWidget *listview;
@@ -4230,7 +4224,7 @@ static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, g
                GList *last;
 
                last = g_list_last(slist);
-               tpath = last->data;
+               tpath = static_cast<GtkTreePath *>(last->data);
 
                /* last is newest selected file */
                gtk_tree_model_get_iter(store, &iter, tpath);
@@ -4445,7 +4439,7 @@ void dupe_window_close(DupeWindow *dw)
 
 static gint dupe_window_close_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        dupe_window_close(dw);
 
@@ -4454,7 +4448,7 @@ static gint dupe_window_close_cb(GtkWidget *UNUSED(widget), gpointer data)
 
 static gint dupe_window_delete(GtkWidget *UNUSED(widget), GdkEvent *UNUSED(event), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        dupe_window_close(dw);
 
        return TRUE;
@@ -4472,7 +4466,7 @@ static gint default_sort_cb(GtkTreeModel *UNUSED(model), GtkTreeIter *UNUSED(a),
 
 static gint column_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
 {
-       GtkTreeSortable *sortable = data;
+       GtkTreeSortable *sortable = static_cast<GtkTreeSortable *>(data);
        gint ret = 0;
        gchar *rank_str_a, *rank_str_b;
        gint rank_int_a;
@@ -4561,7 +4555,7 @@ static gint column_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
 
 static void column_clicked_cb(GtkWidget *UNUSED(widget),  gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        options->duplicates_match = DUPE_SELECT_NONE;
        dupe_listview_select_dupes(dw, DUPE_SELECT_NONE);
@@ -4615,7 +4609,7 @@ DupeWindow *dupe_window_new()
        geometry.base_width = DUPE_DEF_WIDTH;
        geometry.base_height = DUPE_DEF_HEIGHT;
        gtk_window_set_geometry_hints(GTK_WINDOW(dw->window), NULL, &geometry,
-                                     GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE);
+                                     static_cast<GdkWindowHints>(GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE));
 
        if (lw && options->save_window_positions)
                {
@@ -4877,7 +4871,7 @@ static void confirm_dir_list_cancel(GtkWidget *UNUSED(widget), gpointer UNUSED(d
 
 static void confirm_dir_list_add(GtkWidget *UNUSED(widget), gpointer data)
 {
-       CDupeConfirmD *d = data;
+       CDupeConfirmD *d = static_cast<CDupeConfirmD *>(data);
        GList *work;
 
        dupe_window_add_files(d->dw, d->list, FALSE);
@@ -4885,7 +4879,7 @@ static void confirm_dir_list_add(GtkWidget *UNUSED(widget), gpointer data)
        work = d->list;
        while (work)
                {
-               FileData *fd = work->data;
+               FileData *fd = static_cast<FileData *>(work->data);
                work = work->next;
                if (isdir(fd->path))
                        {
@@ -4904,19 +4898,19 @@ static void confirm_dir_list_add(GtkWidget *UNUSED(widget), gpointer data)
 
 static void confirm_dir_list_recurse(GtkWidget *UNUSED(widget), gpointer data)
 {
-       CDupeConfirmD *d = data;
+       CDupeConfirmD *d = static_cast<CDupeConfirmD *>(data);
        dupe_window_add_files(d->dw, d->list, TRUE);
 }
 
 static void confirm_dir_list_skip(GtkWidget *UNUSED(widget), gpointer data)
 {
-       CDupeConfirmD *d = data;
+       CDupeConfirmD *d = static_cast<CDupeConfirmD *>(data);
        dupe_window_add_files(d->dw, d->list, FALSE);
 }
 
 static void confirm_dir_list_destroy(GtkWidget *UNUSED(widget), gpointer data)
 {
-       CDupeConfirmD *d = data;
+       CDupeConfirmD *d = static_cast<CDupeConfirmD *>(data);
        filelist_free(d->list);
        g_free(d);
 }
@@ -4952,14 +4946,14 @@ static GtkWidget *dupe_confirm_dir_list(DupeWindow *dw, GList *list)
  */
 
 static GtkTargetEntry dupe_drag_types[] = {
-       { "text/uri-list", 0, TARGET_URI_LIST },
-       { "text/plain", 0, TARGET_TEXT_PLAIN }
+       { const_cast<gchar *>("text/uri-list"), 0, TARGET_URI_LIST },
+       { const_cast<gchar *>("text/plain"), 0, TARGET_TEXT_PLAIN }
 };
 static gint n_dupe_drag_types = 2;
 
 static GtkTargetEntry dupe_drop_types[] = {
-       { TARGET_APP_COLLECTION_MEMBER_STRING, 0, TARGET_APP_COLLECTION_MEMBER },
-       { "text/uri-list", 0, TARGET_URI_LIST }
+       { const_cast<gchar *>(TARGET_APP_COLLECTION_MEMBER_STRING), 0, TARGET_APP_COLLECTION_MEMBER },
+       { const_cast<gchar *>("text/uri-list"), 0, TARGET_URI_LIST }
 };
 static gint n_dupe_drop_types = 2;
 
@@ -4967,7 +4961,7 @@ static void dupe_dnd_data_set(GtkWidget *widget, GdkDragContext *UNUSED(context)
                              GtkSelectionData *selection_data, guint info,
                              guint UNUSED(time), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GList *list;
 
        switch (info)
@@ -4989,7 +4983,7 @@ static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
                              GtkSelectionData *selection_data, guint info,
                              guint UNUSED(time), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        GtkWidget *source;
        GList *list = NULL;
        GList *work;
@@ -5016,7 +5010,7 @@ static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
                        work = list;
                        while (work)
                                {
-                               FileData *fd = work->data;
+                               FileData *fd = static_cast<FileData *>(work->data);
                                if (isdir(fd->path))
                                        {
                                        GtkWidget *menu;
@@ -5044,9 +5038,9 @@ static void dupe_dest_set(GtkWidget *widget, gboolean enable)
        if (enable)
                {
                gtk_drag_dest_set(widget,
-                       GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
+                       static_cast<GtkDestDefaults>(GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP),
                        dupe_drop_types, n_dupe_drop_types,
-                       GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK);
+                       static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK));
 
                }
        else
@@ -5057,7 +5051,7 @@ static void dupe_dest_set(GtkWidget *widget, gboolean enable)
 
 static void dupe_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        dupe_dest_set(dw->listview, FALSE);
        dupe_dest_set(dw->second_listview, FALSE);
 
@@ -5097,16 +5091,16 @@ static void dupe_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer
 
 static void dupe_dnd_end(GtkWidget *UNUSED(widget), GdkDragContext *UNUSED(context), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
        dupe_dest_set(dw->listview, TRUE);
        dupe_dest_set(dw->second_listview, TRUE);
 }
 
 static void dupe_dnd_init(DupeWindow *dw)
 {
-       gtk_drag_source_set(dw->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
+       gtk_drag_source_set(dw->listview, static_cast<GdkModifierType>(GDK_BUTTON1_MASK | GDK_BUTTON2_MASK),
                            dupe_drag_types, n_dupe_drag_types,
-                           GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
+                           static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK));
        g_signal_connect(G_OBJECT(dw->listview), "drag_data_get",
                         G_CALLBACK(dupe_dnd_data_set), dw);
        g_signal_connect(G_OBJECT(dw->listview), "drag_begin",
@@ -5118,9 +5112,9 @@ static void dupe_dnd_init(DupeWindow *dw)
        g_signal_connect(G_OBJECT(dw->listview), "drag_data_received",
                         G_CALLBACK(dupe_dnd_data_get), dw);
 
-       gtk_drag_source_set(dw->second_listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
+       gtk_drag_source_set(dw->second_listview, static_cast<GdkModifierType>(GDK_BUTTON1_MASK | GDK_BUTTON2_MASK),
                            dupe_drag_types, n_dupe_drag_types,
-                           GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
+                           static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK));
        g_signal_connect(G_OBJECT(dw->second_listview), "drag_data_get",
                         G_CALLBACK(dupe_dnd_data_set), dw);
        g_signal_connect(G_OBJECT(dw->second_listview), "drag_begin",
@@ -5141,7 +5135,7 @@ static void dupe_dnd_init(DupeWindow *dw)
 
 static void dupe_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
 
@@ -5177,7 +5171,7 @@ static void dupe_notify_cb(FileData *fd, NotifyType type, gpointer data)
  */
 static void delete_finished_cb(gboolean success, const gchar *UNUSED(dest_path), gpointer data)
 {
-       DupeWindow *dw = data;
+       DupeWindow *dw = static_cast<DupeWindow *>(data);
 
        if (!success)
                {
@@ -5214,14 +5208,14 @@ static void export_duplicates_close(ExportDupesData *edd)
 
 static void export_duplicates_data_cancel_cb(FileDialog *UNUSED(fdlg), gpointer data)
 {
-       ExportDupesData *edd = data;
+       ExportDupesData *edd = static_cast<ExportDupesData *>(data);
 
        export_duplicates_close(edd);
 }
 
 static void export_duplicates_data_save_cb(FileDialog *fdlg, gpointer data)
 {
-       ExportDupesData *edd = data;
+       ExportDupesData *edd = static_cast<ExportDupesData *>(data);
        GError *error = NULL;
        GtkTreeModel *store;
        GtkTreeIter iter;
@@ -5261,7 +5255,7 @@ static void export_duplicates_data_save_cb(FileDialog *fdlg, gpointer data)
        slist = gtk_tree_selection_get_selected_rows(selection, &store);
        work = slist;
 
-       tpath = work->data;
+       tpath = static_cast<GtkTreePath *>(work->data);
        gtk_tree_model_get_iter(store, &iter, tpath);
        gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, DUPE_COLUMN_COLOR, &color_new, -1);
        color_old = !color_new;
@@ -5269,7 +5263,7 @@ static void export_duplicates_data_save_cb(FileDialog *fdlg, gpointer data)
 
        while (work)
                {
-               tpath = work->data;
+               tpath = static_cast<GtkTreePath *>(work->data);
                gtk_tree_model_get_iter(store, &iter, tpath);
 
                gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, DUPE_COLUMN_POINTER, &di, -1);
@@ -5327,7 +5321,7 @@ static void export_duplicates_data_save_cb(FileDialog *fdlg, gpointer data)
                output_string = g_string_append(output_string, sep);
                g_free(name);
 
-               output_string = g_string_append(output_string, g_strdup_printf("%"PRIu64, di->fd->size));
+               output_string = g_string_append(output_string, g_strdup_printf("%" PRIu64, di->fd->size));
                output_string = g_string_append(output_string, sep);
                output_string = g_string_append(output_string, text_from_time(di->fd->date));
                output_string = g_string_append(output_string, sep);
@@ -5354,9 +5348,9 @@ static void export_duplicates_data_save_cb(FileDialog *fdlg, gpointer data)
 static void pop_menu_export(GList *UNUSED(selection_list), gpointer dupe_window, gpointer data)
 {
        const gint index = GPOINTER_TO_INT(data);
-       DupeWindow *dw = dupe_window;
-       gchar *title = "Export duplicates data";
-       gchar *default_path = "/tmp/";
+       DupeWindow *dw = static_cast<DupeWindow *>(dupe_window);
+       const gchar *title = "Export duplicates data";
+       const gchar *default_path = "/tmp/";
        gchar *file_extension;
        const gchar *stock_id;
        ExportDupesData *edd;
@@ -5400,7 +5394,7 @@ static void dupe_pop_menu_export_cb(GtkWidget *widget, gpointer data)
        DupeWindow *dw;
        GList *selection_list;
 
-       dw = submenu_item_get_data(widget);
+       dw = static_cast<DupeWindow *>(submenu_item_get_data(widget));
        selection_list = dupe_listview_get_selection(dw, dw->listview);
        pop_menu_export(selection_list, dw, data);