Fix build with LTO
authorArkadiy Illarionov <qarkai@gmail.com>
Mon, 4 Mar 2024 22:20:45 +0000 (01:20 +0300)
committerColin Clark <colin.clark@cclark.uk>
Tue, 5 Mar 2024 11:14:42 +0000 (11:14 +0000)
* Move structs and some functions to anonymous namespace
* Replace some defines and enums with constants
* Replace macro with inline function

src/bar-exif.cc
src/bar-keywords.cc
src/collect-table.cc
src/layout-config.cc
src/layout-config.h
src/layout.cc
src/view-file/view-file-icon.cc

index 47940a8..f1c9587 100644 (file)
 #include "ui-misc.h"
 #include "ui-utildlg.h"
 
-enum {
-       MIN_HEIGHT = 25
-};
+namespace
+{
+
+constexpr gint MIN_HEIGHT = 25;
+
 /*
  *-------------------------------------------------------------------
  * EXIF widget
@@ -101,14 +103,14 @@ struct ConfDialogData
        gboolean editable;
 };
 
-static void bar_pane_exif_entry_dnd_init(GtkWidget *entry);
-static void bar_pane_exif_entry_update_title(ExifEntry *ee);
-static void bar_pane_exif_update(PaneExifData *ped);
-static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
-static void bar_pane_exif_notify_cb(FileData *fd, NotifyType type, gpointer data);
-static gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+void bar_pane_exif_entry_dnd_init(GtkWidget *entry);
+void bar_pane_exif_entry_update_title(ExifEntry *ee);
+void bar_pane_exif_update(PaneExifData *ped);
+gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+void bar_pane_exif_notify_cb(FileData *fd, NotifyType type, gpointer data);
+gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
 
-static void bar_pane_exif_entry_changed(GtkEntry *, gpointer data)
+void bar_pane_exif_entry_changed(GtkEntry *, gpointer data)
 {
        auto ee = static_cast<ExifEntry *>(data);
        gchar *text;
@@ -119,7 +121,7 @@ static void bar_pane_exif_entry_changed(GtkEntry *, gpointer data)
        g_free(text);
 }
 
-static void bar_pane_exif_entry_destroy(GtkWidget *, gpointer data)
+void bar_pane_exif_entry_destroy(GtkWidget *, gpointer data)
 {
        auto ee = static_cast<ExifEntry *>(data);
 
@@ -128,7 +130,7 @@ static void bar_pane_exif_entry_destroy(GtkWidget *, gpointer data)
        g_free(ee);
 }
 
-static void bar_pane_exif_setup_entry_box(PaneExifData *ped, ExifEntry *ee)
+void bar_pane_exif_setup_entry_box(PaneExifData *ped, ExifEntry *ee)
 {
        gboolean horizontal = !ee->editable;
        gboolean editable = ee->editable;
@@ -168,7 +170,7 @@ static void bar_pane_exif_setup_entry_box(PaneExifData *ped, ExifEntry *ee)
        gtk_widget_show(ee->value_widget);
 }
 
-static GtkWidget *bar_pane_exif_add_entry(PaneExifData *ped, const gchar *key, const gchar *title, gboolean if_set, gboolean editable)
+GtkWidget *bar_pane_exif_add_entry(PaneExifData *ped, const gchar *key, const gchar *title, gboolean if_set, gboolean editable)
 {
        auto ee = g_new0(ExifEntry, 1);
 
@@ -207,7 +209,7 @@ static GtkWidget *bar_pane_exif_add_entry(PaneExifData *ped, const gchar *key, c
        return ee->ebox;
 }
 
-static void bar_pane_exif_reparent_entry(GtkWidget *entry, GtkWidget *pane)
+void bar_pane_exif_reparent_entry(GtkWidget *entry, GtkWidget *pane)
 {
        auto ped = static_cast<PaneExifData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
        PaneExifData *old_ped;
@@ -227,7 +229,7 @@ static void bar_pane_exif_reparent_entry(GtkWidget *entry, GtkWidget *pane)
        gq_gtk_box_pack_start(GTK_BOX(ped->vbox), entry, FALSE, FALSE, 0);
 }
 
-static void bar_pane_exif_entry_update_title(ExifEntry *ee)
+void bar_pane_exif_entry_update_title(ExifEntry *ee)
 {
        gchar *markup;
 
@@ -236,7 +238,7 @@ static void bar_pane_exif_entry_update_title(ExifEntry *ee)
        g_free(markup);
 }
 
-static void bar_pane_exif_update_entry(PaneExifData *ped, GtkWidget *entry, gboolean update_title)
+void bar_pane_exif_update_entry(PaneExifData *ped, GtkWidget *entry, gboolean update_title)
 {
        gchar *text;
        auto ee = static_cast<ExifEntry *>(g_object_get_data(G_OBJECT(entry), "entry_data"));
@@ -281,7 +283,7 @@ static void bar_pane_exif_update_entry(PaneExifData *ped, GtkWidget *entry, gboo
        if (update_title) bar_pane_exif_entry_update_title(ee);
 }
 
-static void bar_pane_exif_update(PaneExifData *ped)
+void bar_pane_exif_update(PaneExifData *ped)
 {
        GList *list;
        GList *work;
@@ -302,7 +304,7 @@ static void bar_pane_exif_update(PaneExifData *ped)
        gtk_widget_set_sensitive(ped->pane.title, !ped->all_hidden);
 }
 
-static void bar_pane_exif_set_fd(GtkWidget *widget, FileData *fd)
+void bar_pane_exif_set_fd(GtkWidget *widget, FileData *fd)
 {
        PaneExifData *ped;
 
@@ -315,7 +317,7 @@ static void bar_pane_exif_set_fd(GtkWidget *widget, FileData *fd)
        bar_pane_exif_update(ped);
 }
 
-static gint bar_pane_exif_event(GtkWidget *bar, GdkEvent *event)
+gint bar_pane_exif_event(GtkWidget *bar, GdkEvent *event)
 {
        PaneExifData *ped;
        gboolean ret = FALSE;
@@ -339,7 +341,7 @@ static gint bar_pane_exif_event(GtkWidget *bar, GdkEvent *event)
        return ret;
 }
 
-static void bar_pane_exif_notify_cb(FileData *fd, NotifyType type, gpointer data)
+void bar_pane_exif_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        auto ped = static_cast<PaneExifData *>(data);
        if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == ped->fd)
@@ -356,20 +358,22 @@ static void bar_pane_exif_notify_cb(FileData *fd, NotifyType type, gpointer data
  *-------------------------------------------------------------------
  */
 
-static GtkTargetEntry bar_pane_exif_drag_types[] = {
+// @todo Use std::array
+constexpr GtkTargetEntry bar_pane_exif_drag_types[] = {
        { const_cast<gchar *>(TARGET_APP_EXIF_ENTRY_STRING), GTK_TARGET_SAME_APP, TARGET_APP_EXIF_ENTRY },
        { const_cast<gchar *>("text/plain"), 0, TARGET_TEXT_PLAIN }
 };
-static gint n_exif_entry_drag_types = 2;
+constexpr gint n_exif_entry_drag_types = 2;
 
-static GtkTargetEntry bar_pane_exif_drop_types[] = {
+// @todo Use std::array
+constexpr GtkTargetEntry bar_pane_exif_drop_types[] = {
        { const_cast<gchar *>(TARGET_APP_EXIF_ENTRY_STRING), GTK_TARGET_SAME_APP, TARGET_APP_EXIF_ENTRY },
        { const_cast<gchar *>("text/plain"), 0, TARGET_TEXT_PLAIN }
 };
-static gint n_exif_entry_drop_types = 2;
+constexpr gint n_exif_entry_drop_types = 2;
 
 
-static void bar_pane_exif_entry_dnd_get(GtkWidget *entry, GdkDragContext *,
+void bar_pane_exif_entry_dnd_get(GtkWidget *entry, GdkDragContext *,
                                     GtkSelectionData *selection_data, guint info,
                                     guint, gpointer)
 {
@@ -390,7 +394,7 @@ static void bar_pane_exif_entry_dnd_get(GtkWidget *entry, GdkDragContext *,
 
 }
 
-static void bar_pane_exif_dnd_receive(GtkWidget *pane, GdkDragContext *,
+void bar_pane_exif_dnd_receive(GtkWidget *pane, GdkDragContext *,
                                          gint x, gint y,
                                          GtkSelectionData *selection_data, guint info,
                                          guint, gpointer)
@@ -443,7 +447,7 @@ static void bar_pane_exif_dnd_receive(GtkWidget *pane, GdkDragContext *,
        gtk_box_reorder_child(GTK_BOX(ped->vbox), new_entry, pos);
 }
 
-static void bar_pane_exif_entry_dnd_begin(GtkWidget *entry, GdkDragContext *context, gpointer)
+void bar_pane_exif_entry_dnd_begin(GtkWidget *entry, GdkDragContext *context, gpointer)
 {
        auto ee = static_cast<ExifEntry *>(g_object_get_data(G_OBJECT(entry), "entry_data"));
 
@@ -451,11 +455,11 @@ static void bar_pane_exif_entry_dnd_begin(GtkWidget *entry, GdkDragContext *cont
        dnd_set_drag_label(entry, context, ee->key);
 }
 
-static void bar_pane_exif_entry_dnd_end(GtkWidget *, GdkDragContext *, gpointer)
+void bar_pane_exif_entry_dnd_end(GtkWidget *, GdkDragContext *, gpointer)
 {
 }
 
-static void bar_pane_exif_entry_dnd_init(GtkWidget *entry)
+void bar_pane_exif_entry_dnd_init(GtkWidget *entry)
 {
        auto ee = static_cast<ExifEntry *>(g_object_get_data(G_OBJECT(entry), "entry_data"));
 
@@ -471,7 +475,7 @@ static void bar_pane_exif_entry_dnd_init(GtkWidget *entry)
                         G_CALLBACK(bar_pane_exif_entry_dnd_end), ee);
 }
 
-static void bar_pane_exif_dnd_init(GtkWidget *pane)
+void bar_pane_exif_dnd_init(GtkWidget *pane)
 {
        gtk_drag_dest_set(pane,
                          static_cast<GtkDestDefaults>(GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP),
@@ -481,24 +485,24 @@ static void bar_pane_exif_dnd_init(GtkWidget *pane)
                         G_CALLBACK(bar_pane_exif_dnd_receive), NULL);
 }
 
-static void bar_pane_exif_edit_close_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_edit_close_cb(GtkWidget *, gpointer data)
 {
        auto gd = static_cast<GenericDialog *>(data);
        generic_dialog_close(gd);
 }
 
-static void bar_pane_exif_edit_destroy_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_edit_destroy_cb(GtkWidget *, gpointer data)
 {
        auto cdd = static_cast<ConfDialogData *>(data);
        g_signal_handlers_disconnect_by_func(cdd->widget, (gpointer)(bar_pane_exif_edit_close_cb), cdd->gd);
        g_free(cdd);
 }
 
-static void bar_pane_exif_edit_cancel_cb(GenericDialog *, gpointer)
+void bar_pane_exif_edit_cancel_cb(GenericDialog *, gpointer)
 {
 }
 
-static void bar_pane_exif_edit_ok_cb(GenericDialog *, gpointer data)
+void bar_pane_exif_edit_ok_cb(GenericDialog *, gpointer data)
 {
        auto cdd = static_cast<ConfDialogData *>(data);
 
@@ -554,7 +558,7 @@ static void bar_pane_exif_edit_ok_cb(GenericDialog *, gpointer data)
                }
 }
 
-static void bar_pane_exif_conf_dialog(GtkWidget *widget)
+void bar_pane_exif_conf_dialog(GtkWidget *widget)
 {
        ConfDialogData *cdd;
        GenericDialog *gd;
@@ -612,25 +616,25 @@ static void bar_pane_exif_conf_dialog(GtkWidget *widget)
        gtk_widget_show(gd->dialog);
 }
 
-static void bar_pane_exif_conf_dialog_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_conf_dialog_cb(GtkWidget *, gpointer data)
 {
        auto widget = static_cast<GtkWidget *>(data);
        bar_pane_exif_conf_dialog(widget);
 }
 
-static void bar_pane_exif_delete_entry_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_delete_entry_cb(GtkWidget *, gpointer data)
 {
        auto entry = static_cast<GtkWidget *>(data);
        gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(entry)), entry);
 }
 
 #if HAVE_GTK4
-static void bar_pane_exif_copy_entry_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_copy_entry_cb(GtkWidget *, gpointer data)
 {
 /* @FIXME GTK4 stub */
 }
 #else
-static void bar_pane_exif_copy_entry_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_copy_entry_cb(GtkWidget *, gpointer data)
 {
        auto widget = static_cast<GtkWidget *>(data);
        GtkClipboard *clipboard;
@@ -644,14 +648,14 @@ static void bar_pane_exif_copy_entry_cb(GtkWidget *, gpointer data)
 }
 #endif
 
-static void bar_pane_exif_toggle_show_all_cb(GtkWidget *, gpointer data)
+void bar_pane_exif_toggle_show_all_cb(GtkWidget *, gpointer data)
 {
        auto ped = static_cast<PaneExifData *>(data);
        ped->show_all = !ped->show_all;
        bar_pane_exif_update(ped);
 }
 
-static void bar_pane_exif_menu_popup(GtkWidget *widget, PaneExifData *ped)
+void bar_pane_exif_menu_popup(GtkWidget *widget, PaneExifData *ped)
 {
        GtkWidget *menu;
        /* the widget can be either ExifEntry (for editing) or Pane (for new entry)
@@ -683,7 +687,7 @@ static void bar_pane_exif_menu_popup(GtkWidget *widget, PaneExifData *ped)
        gtk_menu_popup_at_pointer(GTK_MENU(menu), nullptr);
 }
 
-static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
 {
        auto ped = static_cast<PaneExifData *>(data);
        if (bevent->button == MOUSE_BUTTON_RIGHT)
@@ -695,13 +699,13 @@ static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent,
 }
 
 #if HAVE_GTK4
-static gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer)
+gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer)
 {
 /* @FIXME GTK4 stub */
        return FALSE;
 }
 #else
-static gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer)
+gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer)
 {
        const gchar *value;
        GtkClipboard *clipboard;
@@ -721,7 +725,7 @@ static gboolean bar_pane_exif_copy_cb(GtkWidget *widget, GdkEventButton *bevent,
 }
 #endif
 
-static void bar_pane_exif_entry_write_config(GtkWidget *entry, GString *outstr, gint indent)
+void bar_pane_exif_entry_write_config(GtkWidget *entry, GString *outstr, gint indent)
 {
        auto ee = static_cast<ExifEntry *>(g_object_get_data(G_OBJECT(entry), "entry_data"));
        if (!ee) return;
@@ -734,7 +738,7 @@ static void bar_pane_exif_entry_write_config(GtkWidget *entry, GString *outstr,
        WRITE_STRING("/>");
 }
 
-static void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint indent)
+void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint indent)
 {
        PaneExifData *ped;
        GList *work;
@@ -765,56 +769,7 @@ static void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint in
        WRITE_NL(); WRITE_STRING("</pane_exif>");
 }
 
-GList * bar_pane_exif_list()
-{
-       PaneExifData *ped;
-       GList *list;
-       GList *work_windows;
-       GList *exif_list = nullptr;
-       LayoutWindow *lw;
-       GtkWidget *bar;
-       GtkWidget *pane;
-       GtkWidget *entry;
-       ExifEntry *ee;
-
-       work_windows = layout_window_list;
-       lw = static_cast<LayoutWindow *>(work_windows->data);
-       bar = lw->bar;
-       pane = bar_find_pane_by_id(bar, PANE_EXIF, "exif");
-       if (pane)
-               {
-               ped = static_cast<PaneExifData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
-
-               list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));
-               GList *work = list;
-               while (work)
-                       {
-                       entry = static_cast<GtkWidget *>(work->data);
-                       work = work->next;
-                       ee = static_cast<ExifEntry *>(g_object_get_data(G_OBJECT(entry), "entry_data"));
-                       exif_list = g_list_append(exif_list, g_strdup(ee->title));
-                       exif_list = g_list_append(exif_list, g_strdup(ee->key));
-                       }
-
-               g_list_free(list);
-               }
-       return exif_list;
-}
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-function"
-void bar_pane_exif_close_unused(GtkWidget *widget)
-{
-       PaneExifData *ped;
-
-       ped = static_cast<PaneExifData *>(g_object_get_data(G_OBJECT(widget), "pane_data"));
-       if (!ped) return;
-
-       g_object_unref(ped->vbox);
-}
-#pragma GCC diagnostic pop
-
-static void bar_pane_exif_destroy(GtkWidget *, gpointer data)
+void bar_pane_exif_destroy(GtkWidget *, gpointer data)
 {
        auto ped = static_cast<PaneExifData *>(data);
 
@@ -827,7 +782,7 @@ static void bar_pane_exif_destroy(GtkWidget *, gpointer data)
 
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-function"
-static void bar_pane_exif_size_request_unused(GtkWidget *, GtkRequisition *requisition, gpointer data)
+void bar_pane_exif_size_request_unused(GtkWidget *, GtkRequisition *requisition, gpointer data)
 {
        auto *ped = static_cast<PaneExifData *>(data);
        if (requisition->height < ped->min_height)
@@ -837,14 +792,14 @@ static void bar_pane_exif_size_request_unused(GtkWidget *, GtkRequisition *requi
 }
 #pragma GCC diagnostic pop
 
-static void bar_pane_exif_size_allocate(GtkWidget *, GtkAllocation *alloc, gpointer data)
+void bar_pane_exif_size_allocate(GtkWidget *, GtkAllocation *alloc, gpointer data)
 {
        auto ped = static_cast<PaneExifData *>(data);
        ped->min_height = alloc->height;
        gtk_widget_set_size_request(ped->widget, -1, ped->min_height);
 }
 
-static GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolean expanded, gboolean show_all)
+GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolean expanded, gboolean show_all)
 {
        PaneExifData *ped;
 
@@ -883,6 +838,57 @@ static GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolea
        return ped->widget;
 }
 
+} // namespace
+
+GList * bar_pane_exif_list()
+{
+       PaneExifData *ped;
+       GList *list;
+       GList *work_windows;
+       GList *exif_list = nullptr;
+       LayoutWindow *lw;
+       GtkWidget *bar;
+       GtkWidget *pane;
+       GtkWidget *entry;
+       ExifEntry *ee;
+
+       work_windows = layout_window_list;
+       lw = static_cast<LayoutWindow *>(work_windows->data);
+       bar = lw->bar;
+       pane = bar_find_pane_by_id(bar, PANE_EXIF, "exif");
+       if (pane)
+               {
+               ped = static_cast<PaneExifData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
+
+               list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));
+               GList *work = list;
+               while (work)
+                       {
+                       entry = static_cast<GtkWidget *>(work->data);
+                       work = work->next;
+                       ee = static_cast<ExifEntry *>(g_object_get_data(G_OBJECT(entry), "entry_data"));
+                       exif_list = g_list_append(exif_list, g_strdup(ee->title));
+                       exif_list = g_list_append(exif_list, g_strdup(ee->key));
+                       }
+
+               g_list_free(list);
+               }
+       return exif_list;
+}
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-function"
+void bar_pane_exif_close_unused(GtkWidget *widget)
+{
+       PaneExifData *ped;
+
+       ped = static_cast<PaneExifData *>(g_object_get_data(G_OBJECT(widget), "pane_data"));
+       if (!ped) return;
+
+       g_object_unref(ped->vbox);
+}
+#pragma GCC diagnostic pop
+
 GtkWidget *bar_pane_exif_new_from_config(const gchar **attribute_names, const gchar **attribute_values)
 {
        gchar *title = nullptr;
index b745b2e..5cc9315 100644 (file)
 #include "ui-misc.h"
 #include "ui-utildlg.h"
 
-static void bar_pane_keywords_changed(GtkTextBuffer *buffer, gpointer data);
+namespace
+{
+
+GtkListStore *keyword_store = nullptr;
+
+void bar_pane_keywords_changed(GtkTextBuffer *buffer, gpointer data);
 
-static void autocomplete_keywords_list_load(const gchar *path);
-static GtkListStore *keyword_store = nullptr;
-static gboolean autocomplete_keywords_list_save(gchar *path);
-static gboolean autocomplete_activate_cb(GtkWidget *widget, gpointer data);
+void autocomplete_keywords_list_load(const gchar *path);
+gboolean autocomplete_keywords_list_save(gchar *path);
+gboolean autocomplete_activate_cb(GtkWidget *widget, gpointer data);
 
 /*
  *-------------------------------------------------------------------
@@ -59,21 +63,7 @@ static gboolean autocomplete_activate_cb(GtkWidget *widget, gpointer data);
  *-------------------------------------------------------------------
  */
 
-
-GList *keyword_list_pull(GtkWidget *text_widget)
-{
-       GList *list;
-       gchar *text;
-
-       text = text_widget_text_pull(text_widget);
-       list = string_to_keywords_list(text);
-
-       g_free(text);
-
-       return list;
-}
-
-static GList *keyword_list_pull_selected(GtkWidget *text_widget)
+GList *keyword_list_pull_selected(GtkWidget *text_widget)
 {
        GList *list;
        gchar *text;
@@ -87,7 +77,7 @@ static GList *keyword_list_pull_selected(GtkWidget *text_widget)
 }
 
 /* the "changed" signal should be blocked before calling this */
-static void keyword_list_push(GtkWidget *textview, GList *list)
+void keyword_list_push(GtkWidget *textview, GList *list)
 {
        GtkTextBuffer *buffer;
        GtkTextIter start;
@@ -127,7 +117,7 @@ enum {
        FILTER_KEYWORD_COLUMN_COUNT
 };
 
-static GType filter_keyword_column_types[] = {G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN};
+GType filter_keyword_column_types[] = {G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN};
 
 struct PaneKeywordsData
 {
@@ -167,7 +157,7 @@ struct ConfDialogData
 };
 
 
-static void bar_pane_keywords_write(PaneKeywordsData *pkd)
+void bar_pane_keywords_write(PaneKeywordsData *pkd)
 {
        GList *list;
 
@@ -180,7 +170,7 @@ static void bar_pane_keywords_write(PaneKeywordsData *pkd)
        g_list_free_full(list, g_free);
 }
 
-static gboolean bar_keyword_tree_expand_if_set_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+gboolean bar_keyword_tree_expand_if_set_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        gboolean set;
@@ -194,7 +184,7 @@ static gboolean bar_keyword_tree_expand_if_set_cb(GtkTreeModel *model, GtkTreePa
        return FALSE;
 }
 
-static gboolean bar_keyword_tree_collapse_if_unset_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+gboolean bar_keyword_tree_collapse_if_unset_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        gboolean set;
@@ -208,7 +198,7 @@ static gboolean bar_keyword_tree_collapse_if_unset_cb(GtkTreeModel *model, GtkTr
        return FALSE;
 }
 
-static void bar_keyword_tree_sync(PaneKeywordsData *pkd)
+void bar_keyword_tree_sync(PaneKeywordsData *pkd)
 {
        GtkTreeModel *model;
 
@@ -229,7 +219,7 @@ static void bar_keyword_tree_sync(PaneKeywordsData *pkd)
        if (pkd->collapse_unchecked) gtk_tree_model_foreach(model, bar_keyword_tree_collapse_if_unset_cb, pkd);
 }
 
-static void bar_pane_keywords_update(PaneKeywordsData *pkd)
+void bar_pane_keywords_update(PaneKeywordsData *pkd)
 {
        GList *keywords = nullptr;
        GList *orig_keywords = nullptr;
@@ -262,7 +252,7 @@ static void bar_pane_keywords_update(PaneKeywordsData *pkd)
        g_list_free_full(orig_keywords, g_free);
 }
 
-static void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd)
+void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd)
 {
        PaneKeywordsData *pkd;
 
@@ -275,7 +265,7 @@ static void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd)
        bar_pane_keywords_update(pkd);
 }
 
-static void bar_keyword_tree_get_expanded_cb(GtkTreeView *keyword_treeview, GtkTreePath *path,  gpointer data)
+void bar_keyword_tree_get_expanded_cb(GtkTreeView *keyword_treeview, GtkTreePath *path,  gpointer data)
 {
        auto expanded = static_cast<GList **>(data);
        GtkTreeModel *model;
@@ -291,7 +281,7 @@ static void bar_keyword_tree_get_expanded_cb(GtkTreeView *keyword_treeview, GtkT
        g_free(path_string);
 }
 
-static void bar_pane_keywords_entry_write_config(gchar *entry, GString *outstr, gint indent)
+void bar_pane_keywords_entry_write_config(gchar *entry, GString *outstr, gint indent)
 {
        struct {
                gchar *path;
@@ -304,7 +294,7 @@ static void bar_pane_keywords_entry_write_config(gchar *entry, GString *outstr,
        WRITE_STRING("/>");
 }
 
-static void bar_pane_keywords_write_config(GtkWidget *pane, GString *outstr, gint indent)
+void bar_pane_keywords_write_config(GtkWidget *pane, GString *outstr, gint indent)
 {
        PaneKeywordsData *pkd;
        GList *path_expanded = nullptr;
@@ -342,7 +332,7 @@ static void bar_pane_keywords_write_config(GtkWidget *pane, GString *outstr, gin
        WRITE_STRING("</pane_keywords>");
 }
 
-static gint bar_pane_keywords_event(GtkWidget *bar, GdkEvent *event)
+gint bar_pane_keywords_event(GtkWidget *bar, GdkEvent *event)
 {
        PaneKeywordsData *pkd;
 
@@ -358,7 +348,7 @@ static gint bar_pane_keywords_event(GtkWidget *bar, GdkEvent *event)
        return FALSE;
 }
 
-static void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *, const gchar *path, gpointer data)
+void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *, const gchar *path, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -399,7 +389,7 @@ static void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *, const gcha
        bar_pane_keywords_changed(keyword_buffer, pkd);
 }
 
-static void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GValue *value, gint column, gpointer data)
+void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GValue *value, gint column, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
@@ -433,14 +423,14 @@ static void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *it
                }
 }
 
-static gboolean bar_pane_keywords_filter_visible(GtkTreeModel *keyword_tree, GtkTreeIter *iter, gpointer data)
+gboolean bar_pane_keywords_filter_visible(GtkTreeModel *keyword_tree, GtkTreeIter *iter, gpointer data)
 {
        auto filter = static_cast<GtkTreeModel *>(data);
 
        return !keyword_is_hidden_in(keyword_tree, iter, filter);
 }
 
-static void bar_pane_keywords_set_selection(PaneKeywordsData *pkd, gboolean append)
+void bar_pane_keywords_set_selection(PaneKeywordsData *pkd, gboolean append)
 {
        GList *keywords = nullptr;
        GList *list = nullptr;
@@ -471,21 +461,21 @@ static void bar_pane_keywords_set_selection(PaneKeywordsData *pkd, gboolean appe
        g_list_free_full(keywords, g_free);
 }
 
-static void bar_pane_keywords_sel_add_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_sel_add_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
        bar_pane_keywords_set_selection(pkd, TRUE);
 }
 
-static void bar_pane_keywords_sel_replace_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_sel_replace_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
        bar_pane_keywords_set_selection(pkd, FALSE);
 }
 
-static void bar_pane_keywords_populate_popup_cb(GtkTextView *, GtkMenu *menu, gpointer data)
+void bar_pane_keywords_populate_popup_cb(GtkTextView *, GtkMenu *menu, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
@@ -495,7 +485,7 @@ static void bar_pane_keywords_populate_popup_cb(GtkTextView *, GtkMenu *menu, gp
 }
 
 
-static void bar_pane_keywords_notify_cb(FileData *fd, NotifyType type, gpointer data)
+void bar_pane_keywords_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pkd->fd)
@@ -505,7 +495,7 @@ static void bar_pane_keywords_notify_cb(FileData *fd, NotifyType type, gpointer
                }
 }
 
-static gboolean bar_pane_keywords_changed_idle_cb(gpointer data)
+gboolean bar_pane_keywords_changed_idle_cb(gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
@@ -515,7 +505,7 @@ static gboolean bar_pane_keywords_changed_idle_cb(gpointer data)
        return G_SOURCE_REMOVE;
 }
 
-static void bar_pane_keywords_changed(GtkTextBuffer *, gpointer data)
+void bar_pane_keywords_changed(GtkTextBuffer *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
@@ -531,22 +521,22 @@ static void bar_pane_keywords_changed(GtkTextBuffer *, gpointer data)
  *-------------------------------------------------------------------
  */
 
-
-static GtkTargetEntry bar_pane_keywords_drag_types[] = {
+// @todo Use std::array
+constexpr GtkTargetEntry bar_pane_keywords_drag_types[] = {
        { const_cast<gchar *>(TARGET_APP_KEYWORD_PATH_STRING), GTK_TARGET_SAME_WIDGET, TARGET_APP_KEYWORD_PATH },
        { const_cast<gchar *>("text/plain"), 0, TARGET_TEXT_PLAIN }
 };
-static gint n_keywords_drag_types = 2;
-
+constexpr gint n_keywords_drag_types = 2;
 
-static GtkTargetEntry bar_pane_keywords_drop_types[] = {
+// @todo Use std::array
+constexpr GtkTargetEntry bar_pane_keywords_drop_types[] = {
        { const_cast<gchar *>(TARGET_APP_KEYWORD_PATH_STRING), GTK_TARGET_SAME_WIDGET, TARGET_APP_KEYWORD_PATH },
        { const_cast<gchar *>("text/plain"), 0, TARGET_TEXT_PLAIN }
 };
-static gint n_keywords_drop_types = 2;
+constexpr gint n_keywords_drop_types = 2;
 
 
-static void bar_pane_keywords_dnd_get(GtkWidget *tree_view, GdkDragContext *,
+void bar_pane_keywords_dnd_get(GtkWidget *tree_view, GdkDragContext *,
                                     GtkSelectionData *selection_data, guint info,
                                     guint, gpointer)
 {
@@ -583,7 +573,7 @@ static void bar_pane_keywords_dnd_get(GtkWidget *tree_view, GdkDragContext *,
                }
 }
 
-static void bar_pane_keywords_dnd_begin(GtkWidget *tree_view, GdkDragContext *context, gpointer)
+void bar_pane_keywords_dnd_begin(GtkWidget *tree_view, GdkDragContext *context, gpointer)
 {
        GtkTreeIter iter;
        GtkTreeModel *model;
@@ -605,12 +595,12 @@ static void bar_pane_keywords_dnd_begin(GtkWidget *tree_view, GdkDragContext *co
 
 }
 
-static void bar_pane_keywords_dnd_end(GtkWidget *, GdkDragContext *, gpointer)
+void bar_pane_keywords_dnd_end(GtkWidget *, GdkDragContext *, gpointer)
 {
 }
 
 
-static gboolean bar_pane_keywords_dnd_can_move(GtkTreeModel *keyword_tree, GtkTreeIter *src_kw_iter, GtkTreeIter *dest_kw_iter)
+gboolean bar_pane_keywords_dnd_can_move(GtkTreeModel *keyword_tree, GtkTreeIter *src_kw_iter, GtkTreeIter *dest_kw_iter)
 {
        gchar *src_name;
        GtkTreeIter parent;
@@ -634,7 +624,7 @@ static gboolean bar_pane_keywords_dnd_can_move(GtkTreeModel *keyword_tree, GtkTr
        return TRUE;
 }
 
-static gboolean bar_pane_keywords_dnd_skip_existing(GtkTreeModel *keyword_tree, GtkTreeIter *dest_kw_iter, GList **keywords)
+gboolean bar_pane_keywords_dnd_skip_existing(GtkTreeModel *keyword_tree, GtkTreeIter *dest_kw_iter, GList **keywords)
 {
        /* we have to find at least one keyword that does not already exist as a sibling of dest_kw_iter */
        GList *work = *keywords;
@@ -656,7 +646,7 @@ static gboolean bar_pane_keywords_dnd_skip_existing(GtkTreeModel *keyword_tree,
        return !!*keywords;
 }
 
-static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *,
+void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *,
                                          gint x, gint y,
                                          GtkSelectionData *selection_data, guint info,
                                          guint, gpointer data)
@@ -789,7 +779,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
        bar_keyword_tree_sync(pkd);
 }
 
-static gint bar_pane_keywords_dnd_motion(GtkWidget *tree_view, GdkDragContext *context,
+gint bar_pane_keywords_dnd_motion(GtkWidget *tree_view, GdkDragContext *context,
                                        gint x, gint y, guint time, gpointer)
 {
        GtkTreePath *tpath = nullptr;
@@ -825,7 +815,7 @@ static gint bar_pane_keywords_dnd_motion(GtkWidget *tree_view, GdkDragContext *c
  *-------------------------------------------------------------------
  */
 
-static void bar_pane_keywords_edit_destroy_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_edit_destroy_cb(GtkWidget *, gpointer data)
 {
        auto cdd = static_cast<ConfDialogData *>(data);
        gtk_tree_path_free(cdd->click_tpath);
@@ -833,12 +823,12 @@ static void bar_pane_keywords_edit_destroy_cb(GtkWidget *, gpointer data)
 }
 
 
-static void bar_pane_keywords_edit_cancel_cb(GenericDialog *, gpointer)
+void bar_pane_keywords_edit_cancel_cb(GenericDialog *, gpointer)
 {
 }
 
 
-static void bar_pane_keywords_edit_ok_cb(GenericDialog *, gpointer data)
+void bar_pane_keywords_edit_ok_cb(GenericDialog *, gpointer data)
 {
        auto cdd = static_cast<ConfDialogData *>(data);
        PaneKeywordsData *pkd = cdd->pkd;
@@ -910,13 +900,13 @@ static void bar_pane_keywords_edit_ok_cb(GenericDialog *, gpointer data)
        g_list_free_full(keywords, g_free);
 }
 
-static void bar_pane_keywords_conf_set_helper(GtkWidget *, gpointer data)
+void bar_pane_keywords_conf_set_helper(GtkWidget *, gpointer data)
 {
        auto cdd = static_cast<ConfDialogData *>(data);
        cdd->is_keyword = FALSE;
 }
 
-static void bar_pane_keywords_conf_set_kw(GtkWidget *, gpointer data)
+void bar_pane_keywords_conf_set_kw(GtkWidget *, gpointer data)
 {
        auto cdd = static_cast<ConfDialogData *>(data);
        cdd->is_keyword = TRUE;
@@ -924,7 +914,7 @@ static void bar_pane_keywords_conf_set_kw(GtkWidget *, gpointer data)
 
 
 
-static void bar_pane_keywords_edit_dialog(PaneKeywordsData *pkd, gboolean edit_existing)
+void bar_pane_keywords_edit_dialog(PaneKeywordsData *pkd, gboolean edit_existing)
 {
        ConfDialogData *cdd;
        GenericDialog *gd;
@@ -1003,27 +993,25 @@ static void bar_pane_keywords_edit_dialog(PaneKeywordsData *pkd, gboolean edit_e
 }
 
 
-
-
 /*
  *-------------------------------------------------------------------
  * popup menu
  *-------------------------------------------------------------------
  */
 
-static void bar_pane_keywords_edit_dialog_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_edit_dialog_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        bar_pane_keywords_edit_dialog(pkd, TRUE);
 }
 
-static void bar_pane_keywords_add_dialog_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_add_dialog_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        bar_pane_keywords_edit_dialog(pkd, FALSE);
 }
 
-static void bar_pane_keywords_connect_mark_cb(GtkWidget *menu_widget, gpointer data)
+void bar_pane_keywords_connect_mark_cb(GtkWidget *menu_widget, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
@@ -1046,17 +1034,17 @@ static void bar_pane_keywords_connect_mark_cb(GtkWidget *menu_widget, gpointer d
        meta_data_connect_mark_with_keyword(keyword_tree, &kw_iter, mark);
 }
 
-static void bar_pane_keywords_disconnect_marks_ok_cb(GenericDialog *, gpointer)
+void bar_pane_keywords_disconnect_marks_ok_cb(GenericDialog *, gpointer)
 {
        keyword_tree_disconnect_marks();
 }
 
-static void dummy_cancel_cb(GenericDialog *, gpointer)
+void dummy_cancel_cb(GenericDialog *, gpointer)
 {
        /* no op, only so cancel button appears */
 }
 
-static void bar_pane_keywords_disconnect_marks_cb(GtkWidget *menu_widget, gpointer data)
+void bar_pane_keywords_disconnect_marks_cb(GtkWidget *menu_widget, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
@@ -1071,7 +1059,7 @@ static void bar_pane_keywords_disconnect_marks_cb(GtkWidget *menu_widget, gpoint
        gtk_widget_show(gd->dialog);
 }
 
-static void bar_pane_keywords_delete_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_delete_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1091,7 +1079,7 @@ static void bar_pane_keywords_delete_cb(GtkWidget *, gpointer data)
        keyword_delete(GTK_TREE_STORE(keyword_tree), &kw_iter);
 }
 
-static void bar_pane_keywords_hide_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_hide_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1111,7 +1099,7 @@ static void bar_pane_keywords_hide_cb(GtkWidget *, gpointer data)
        keyword_hide_in(GTK_TREE_STORE(keyword_tree), &kw_iter, model);
 }
 
-static void bar_pane_keywords_show_all_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_show_all_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1134,7 +1122,7 @@ static void bar_pane_keywords_show_all_cb(GtkWidget *, gpointer data)
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_revert_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_revert_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GList *work;
@@ -1156,7 +1144,7 @@ static void bar_pane_keywords_revert_cb(GtkWidget *, gpointer data)
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_expand_checked_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_expand_checked_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1165,7 +1153,7 @@ static void bar_pane_keywords_expand_checked_cb(GtkWidget *, gpointer data)
        gtk_tree_model_foreach(model, bar_keyword_tree_expand_if_set_cb, pkd);
 }
 
-static void bar_pane_keywords_collapse_all_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_collapse_all_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
@@ -1179,7 +1167,7 @@ static void bar_pane_keywords_collapse_all_cb(GtkWidget *, gpointer data)
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_revert_hidden_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_revert_hidden_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1193,7 +1181,7 @@ static void bar_pane_keywords_revert_hidden_cb(GtkWidget *, gpointer data)
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_collapse_unchecked_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_collapse_unchecked_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1202,7 +1190,7 @@ static void bar_pane_keywords_collapse_unchecked_cb(GtkWidget *, gpointer data)
        gtk_tree_model_foreach(model, bar_keyword_tree_collapse_if_unset_cb, pkd);
 }
 
-static void bar_pane_keywords_hide_unchecked_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_hide_unchecked_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeModel *model;
@@ -1219,21 +1207,21 @@ static void bar_pane_keywords_hide_unchecked_cb(GtkWidget *, gpointer data)
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_expand_checked_toggle_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_expand_checked_toggle_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        pkd->expand_checked = !pkd->expand_checked;
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_collapse_unchecked_toggle_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_collapse_unchecked_toggle_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        pkd->collapse_unchecked = !pkd->collapse_unchecked;
        bar_keyword_tree_sync(pkd);
 }
 
-static void bar_pane_keywords_hide_unchecked_toggle_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_hide_unchecked_toggle_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        pkd->hide_unchecked = !pkd->hide_unchecked;
@@ -1243,7 +1231,7 @@ static void bar_pane_keywords_hide_unchecked_toggle_cb(GtkWidget *, gpointer dat
 /**
  * @brief Callback for adding selected keyword to all selected images.
  */
-static void bar_pane_keywords_add_to_selected_cb(GtkWidget *, gpointer data)
+void bar_pane_keywords_add_to_selected_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        GtkTreeIter iter; /* This is the iter which initial holds the current keyword */
@@ -1297,7 +1285,7 @@ static void bar_pane_keywords_add_to_selected_cb(GtkWidget *, gpointer data)
        g_list_free_full(keywords, g_free);
 }
 
-static void bar_pane_keywords_menu_popup(GtkWidget *, PaneKeywordsData *pkd, gint x, gint y)
+void bar_pane_keywords_menu_popup(GtkWidget *, PaneKeywordsData *pkd, gint x, gint y)
 {
        GtkWidget *menu;
        GtkWidget *item;
@@ -1411,8 +1399,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *, PaneKeywordsData *pkd, gin
        gtk_menu_popup_at_pointer(GTK_MENU(menu), nullptr);
 }
 
-
-static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        if (bevent->button == MOUSE_BUTTON_RIGHT)
@@ -1429,21 +1416,7 @@ static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bev
  *-------------------------------------------------------------------
  */
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-function"
-void bar_pane_keywords_close_unused(GtkWidget *bar)
-{
-       PaneKeywordsData *pkd;
-
-       pkd = static_cast<PaneKeywordsData *>(g_object_get_data(G_OBJECT(bar), "pane_data"));
-       if (!pkd) return;
-
-       g_free(pkd->pane.id);
-       g_object_unref(pkd->widget);
-}
-#pragma GCC diagnostic pop
-
-static void bar_pane_keywords_destroy(GtkWidget *, gpointer data)
+void bar_pane_keywords_destroy(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        gchar *path;
@@ -1463,7 +1436,7 @@ static void bar_pane_keywords_destroy(GtkWidget *, gpointer data)
 }
 
 
-static GtkWidget *bar_pane_keywords_new(const gchar *id, const gchar *title, const gchar *key, gboolean expanded, gint height)
+GtkWidget *bar_pane_keywords_new(const gchar *id, const gchar *title, const gchar *key, gboolean expanded, gint height)
 {
        PaneKeywordsData *pkd;
        GtkWidget *hbox;
@@ -1643,107 +1616,13 @@ static GtkWidget *bar_pane_keywords_new(const gchar *id, const gchar *title, con
        return pkd->widget;
 }
 
-GtkWidget *bar_pane_keywords_new_from_config(const gchar **attribute_names, const gchar **attribute_values)
-{
-       gchar *id = g_strdup("keywords");
-       gchar *title = nullptr;
-       gchar *key = g_strdup(COMMENT_KEY);
-       gboolean expanded = TRUE;
-       gint height = 200;
-       GtkWidget *ret;
-
-       while (*attribute_names)
-               {
-               const gchar *option = *attribute_names++;
-               const gchar *value = *attribute_values++;
-
-               if (READ_CHAR_FULL("id", id)) continue;
-               if (READ_CHAR_FULL("title", title)) continue;
-               if (READ_CHAR_FULL("key", key)) continue;
-               if (READ_BOOL_FULL("expanded", expanded)) continue;
-               if (READ_INT_FULL("height", height)) continue;
-
-
-               log_printf("unknown attribute %s = %s\n", option, value);
-               }
-
-       options->info_keywords.height = height;
-       bar_pane_translate_title(PANE_KEYWORDS, id, &title);
-       ret = bar_pane_keywords_new(id, title, key, expanded, height);
-       g_free(id);
-       g_free(title);
-       g_free(key);
-       return ret;
-}
-
-void bar_pane_keywords_update_from_config(GtkWidget *pane, const gchar **attribute_names, const gchar **attribute_values)
-{
-       PaneKeywordsData *pkd;
-
-       pkd = static_cast<PaneKeywordsData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
-       if (!pkd) return;
-
-       gchar *title = nullptr;
-
-       while (*attribute_names)
-               {
-               const gchar *option = *attribute_names++;
-               const gchar *value = *attribute_values++;
-
-               if (READ_CHAR_FULL("title", title)) continue;
-               if (READ_CHAR_FULL("key", pkd->key)) continue;
-               if (READ_BOOL_FULL("expanded", pkd->pane.expanded)) continue;
-               if (READ_CHAR_FULL("id", pkd->pane.id)) continue;
-
-
-               log_printf("unknown attribute %s = %s\n", option, value);
-               }
-
-       if (title)
-               {
-               bar_pane_translate_title(PANE_KEYWORDS, pkd->pane.id, &title);
-               gtk_label_set_text(GTK_LABEL(pkd->pane.title), title);
-               g_free(title);
-               }
-
-       bar_update_expander(pane);
-       bar_pane_keywords_update(pkd);
-}
-
-
-void bar_pane_keywords_entry_add_from_config(GtkWidget *pane, const gchar **attribute_names, const gchar **attribute_values)
-{
-       PaneKeywordsData *pkd;
-       gchar *path = nullptr;
-       GtkTreePath *tree_path;
-
-       pkd = static_cast<PaneKeywordsData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
-       if (!pkd) return;
-
-       while (*attribute_names)
-               {
-               const gchar *option = *attribute_names++;
-               const gchar *value = *attribute_values++;
-
-               if (READ_CHAR_FULL("path", path))
-                       {
-                       tree_path = gtk_tree_path_new_from_string(path);
-                       gtk_tree_view_expand_to_path(GTK_TREE_VIEW(pkd->keyword_treeview), tree_path);
-                       gtk_tree_path_free(tree_path);
-                       pkd->expanded_rows = g_list_append(pkd->expanded_rows, g_strdup(path));
-                       continue;
-                       }
-               log_printf("unknown attribute %s = %s\n", option, value);
-               }
-}
-
 /*
  *-----------------------------------------------------------------------------
  * Autocomplete keywords
  *-----------------------------------------------------------------------------
  */
 
-static gboolean autocomplete_activate_cb(GtkWidget *, gpointer data)
+gboolean autocomplete_activate_cb(GtkWidget *, gpointer data)
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
        gchar *entry_text;
@@ -1798,7 +1677,7 @@ static gboolean autocomplete_activate_cb(GtkWidget *, gpointer data)
        return FALSE;
 }
 
-static gint autocomplete_sort_iter_compare_func (GtkTreeModel *model,
+gint autocomplete_sort_iter_compare_func (GtkTreeModel *model,
                                                                        GtkTreeIter *a,
                                                                        GtkTreeIter *b,
                                                                        gpointer)
@@ -1832,7 +1711,7 @@ static gint autocomplete_sort_iter_compare_func (GtkTreeModel *model,
        return ret;
 }
 
-static void autocomplete_keywords_list_load(const gchar *path)
+void autocomplete_keywords_list_load(const gchar *path)
 {
        FILE *f;
        gchar s_buf[1024];
@@ -1888,7 +1767,7 @@ static void autocomplete_keywords_list_load(const gchar *path)
        fclose(f);
 }
 
-static gboolean autocomplete_keywords_list_save(gchar *path)
+gboolean autocomplete_keywords_list_save(gchar *path)
 {
        SecureSaveInfo *ssi;
        gchar *pathl;
@@ -1926,6 +1805,141 @@ static gboolean autocomplete_keywords_list_save(gchar *path)
        return (secure_close(ssi) == 0);
 }
 
+} // namespace
+
+/*
+ *-------------------------------------------------------------------
+ * init
+ *-------------------------------------------------------------------
+ */
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-function"
+void bar_pane_keywords_close_unused(GtkWidget *bar)
+{
+       PaneKeywordsData *pkd;
+
+       pkd = static_cast<PaneKeywordsData *>(g_object_get_data(G_OBJECT(bar), "pane_data"));
+       if (!pkd) return;
+
+       g_free(pkd->pane.id);
+       g_object_unref(pkd->widget);
+}
+#pragma GCC diagnostic pop
+
+GtkWidget *bar_pane_keywords_new_from_config(const gchar **attribute_names, const gchar **attribute_values)
+{
+       gchar *id = g_strdup("keywords");
+       gchar *title = nullptr;
+       gchar *key = g_strdup(COMMENT_KEY);
+       gboolean expanded = TRUE;
+       gint height = 200;
+       GtkWidget *ret;
+
+       while (*attribute_names)
+               {
+               const gchar *option = *attribute_names++;
+               const gchar *value = *attribute_values++;
+
+               if (READ_CHAR_FULL("id", id)) continue;
+               if (READ_CHAR_FULL("title", title)) continue;
+               if (READ_CHAR_FULL("key", key)) continue;
+               if (READ_BOOL_FULL("expanded", expanded)) continue;
+               if (READ_INT_FULL("height", height)) continue;
+
+
+               log_printf("unknown attribute %s = %s\n", option, value);
+               }
+
+       options->info_keywords.height = height;
+       bar_pane_translate_title(PANE_KEYWORDS, id, &title);
+       ret = bar_pane_keywords_new(id, title, key, expanded, height);
+       g_free(id);
+       g_free(title);
+       g_free(key);
+       return ret;
+}
+
+void bar_pane_keywords_update_from_config(GtkWidget *pane, const gchar **attribute_names, const gchar **attribute_values)
+{
+       PaneKeywordsData *pkd;
+
+       pkd = static_cast<PaneKeywordsData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
+       if (!pkd) return;
+
+       gchar *title = nullptr;
+
+       while (*attribute_names)
+               {
+               const gchar *option = *attribute_names++;
+               const gchar *value = *attribute_values++;
+
+               if (READ_CHAR_FULL("title", title)) continue;
+               if (READ_CHAR_FULL("key", pkd->key)) continue;
+               if (READ_BOOL_FULL("expanded", pkd->pane.expanded)) continue;
+               if (READ_CHAR_FULL("id", pkd->pane.id)) continue;
+
+
+               log_printf("unknown attribute %s = %s\n", option, value);
+               }
+
+       if (title)
+               {
+               bar_pane_translate_title(PANE_KEYWORDS, pkd->pane.id, &title);
+               gtk_label_set_text(GTK_LABEL(pkd->pane.title), title);
+               g_free(title);
+               }
+
+       bar_update_expander(pane);
+       bar_pane_keywords_update(pkd);
+}
+
+
+void bar_pane_keywords_entry_add_from_config(GtkWidget *pane, const gchar **attribute_names, const gchar **attribute_values)
+{
+       PaneKeywordsData *pkd;
+       gchar *path = nullptr;
+       GtkTreePath *tree_path;
+
+       pkd = static_cast<PaneKeywordsData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
+       if (!pkd) return;
+
+       while (*attribute_names)
+               {
+               const gchar *option = *attribute_names++;
+               const gchar *value = *attribute_values++;
+
+               if (READ_CHAR_FULL("path", path))
+                       {
+                       tree_path = gtk_tree_path_new_from_string(path);
+                       gtk_tree_view_expand_to_path(GTK_TREE_VIEW(pkd->keyword_treeview), tree_path);
+                       gtk_tree_path_free(tree_path);
+                       pkd->expanded_rows = g_list_append(pkd->expanded_rows, g_strdup(path));
+                       continue;
+                       }
+               log_printf("unknown attribute %s = %s\n", option, value);
+               }
+}
+
+/*
+ *-------------------------------------------------------------------
+ * keyword / comment utils
+ *-------------------------------------------------------------------
+ */
+
+GList *keyword_list_pull(GtkWidget *text_widget)
+{
+       GList *list;
+       gchar *text;
+
+       text = text_widget_text_pull(text_widget);
+       list = string_to_keywords_list(text);
+
+       g_free(text);
+
+       return list;
+}
+
 GList *keyword_list_get()
 {
        GList *ret_list = nullptr;
index 65702f3..874d15d 100644 (file)
 #include "utilops.h"
 #include "view-file.h"
 
+namespace
+{
+
 /* between these, the icon width is increased by thumb_max_width / 2 */
-enum {
-       THUMB_MIN_ICON_WIDTH = 128,
-       THUMB_MAX_ICON_WIDTH = 150
-};
+constexpr gint THUMB_MIN_ICON_WIDTH = 128;
+constexpr gint THUMB_MAX_ICON_WIDTH = 150;
 
-enum {
-       COLLECT_TABLE_MAX_COLUMNS = 32,
-       THUMB_BORDER_PADDING = 2
-};
+constexpr gint COLLECT_TABLE_MAX_COLUMNS = 32;
 
-enum {
-       COLLECT_TABLE_TIP_DELAY = 500,
-       COLLECT_TABLE_TIP_DELAY_PATH = 850
-};
+constexpr gint THUMB_BORDER_PADDING = 2;
+
+constexpr gint COLLECT_TABLE_TIP_DELAY = 500;
+constexpr gint COLLECT_TABLE_TIP_DELAY_PATH = 850;
 
 enum {
        CTABLE_COLUMN_POINTER = 0,
        CTABLE_COLUMN_COUNT
 };
 
-#define INFO_SELECTED(x) ((x)->flag_mask & SELECTION_SELECTED)
+struct ColumnData
+{
+       CollectTable *ct;
+       gint number;
+};
+
+inline gboolean info_selected(const CollectInfo *info)
+{
+       return info->flag_mask & SELECTION_SELECTED;
+}
 
+} // namespace
 
 static void collection_table_populate_at_new_size(CollectTable *ct, gint w, gint h, gboolean force);
 
@@ -441,7 +449,7 @@ static void collection_table_select_invert_all(CollectTable *ct)
                {
                auto info = static_cast<CollectInfo *>(work->data);
 
-               if (INFO_SELECTED(info))
+               if (info_selected(info))
                        {
                        collection_table_selection_remove(ct, info, SELECTION_SELECTED, nullptr);
                        }
@@ -465,7 +473,7 @@ void collection_table_select(CollectTable *ct, CollectInfo *info)
 {
        ct->prev_selection = info;
 
-       if (!info || INFO_SELECTED(info)) return;
+       if (!info || info_selected(info)) return;
 
        ct->selection = g_list_append(ct->selection, info);
        collection_table_selection_add(ct, info, SELECTION_SELECTED, nullptr);
@@ -477,7 +485,7 @@ static void collection_table_unselect(CollectTable *ct, CollectInfo *info)
 {
        ct->prev_selection = info;
 
-       if (!info || !INFO_SELECTED(info) ) return;
+       if (!info || !info_selected(info) ) return;
 
        ct->selection = g_list_remove(ct->selection, info);
        collection_table_selection_remove(ct, info, SELECTION_SELECTED, nullptr);
@@ -726,7 +734,7 @@ static GList *collection_table_popup_file_list(CollectTable *ct)
 {
        if (!ct->click_info) return nullptr;
 
-       if (INFO_SELECTED(ct->click_info))
+       if (info_selected(ct->click_info))
                {
                return collection_table_selection_get_list(ct);
                }
@@ -878,7 +886,7 @@ static void collection_table_popup_remove_cb(GtkWidget *, gpointer data)
 
        if (!ct->click_info) return;
 
-       if (INFO_SELECTED(ct->click_info))
+       if (info_selected(ct->click_info))
                {
                list = g_list_copy(ct->selection);
                }
@@ -1310,7 +1318,7 @@ static gboolean collection_table_press_key_cb(GtkWidget *widget, GdkEventKey *ev
                                ct->click_info = info;
                                if (event->state & GDK_CONTROL_MASK)
                                        {
-                                       collection_table_select_util(ct, info, !INFO_SELECTED(info));
+                                       collection_table_select_util(ct, info, !info_selected(info));
                                        }
                                else
                                        {
@@ -1770,7 +1778,7 @@ static gboolean collection_table_release_cb(GtkWidget *, GdkEventButton *bevent,
 
                if (bevent->state & GDK_CONTROL_MASK)
                        {
-                       gboolean select = !INFO_SELECTED(info);
+                       gboolean select = !info_selected(info);
 
                        if ((bevent->state & GDK_SHIFT_MASK) && ct->prev_selection)
                                {
@@ -1799,7 +1807,7 @@ static gboolean collection_table_release_cb(GtkWidget *, GdkEventButton *bevent,
        else if (bevent->button == MOUSE_BUTTON_MIDDLE &&
                 info && ct->click_info == info)
                {
-               collection_table_select_util(ct, info, !INFO_SELECTED(info));
+               collection_table_select_util(ct, info, !info_selected(info));
                }
 
        return TRUE;
@@ -2166,7 +2174,7 @@ void collection_table_file_insert(CollectTable *ct, CollectInfo *)
 
 void collection_table_file_remove(CollectTable *ct, CollectInfo *ci)
 {
-       if (ci && INFO_SELECTED(ci))
+       if (ci && info_selected(ci))
                {
                ct->selection = g_list_remove(ct->selection, ci);
                }
@@ -2301,7 +2309,7 @@ static void collection_table_dnd_get(GtkWidget *, GdkDragContext *,
 
        if (!ct->click_info) return;
 
-       selected = INFO_SELECTED(ct->click_info);
+       selected = info_selected(ct->click_info);
 
        switch (info)
                {
@@ -2433,7 +2441,7 @@ static void collection_table_dnd_begin(GtkWidget *widget, GdkDragContext *contex
                {
                gint items;
 
-               if (INFO_SELECTED(ct->click_info))
+               if (info_selected(ct->click_info))
                        items = g_list_length(ct->selection);
                else
                        items = 1;
@@ -2498,12 +2506,6 @@ static void collection_table_dnd_init(CollectTable *ct)
  *-----------------------------------------------------------------------------
  */
 
-struct ColumnData
-{
-       CollectTable *ct;
-       gint number;
-};
-
 static void collection_table_cell_data_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
                                          GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
 {
index 46da2f3..ab98a54 100644 (file)
 #include "intl.h"
 #include "ui-misc.h"
 
+namespace
+{
 
 enum {
        COLUMN_TEXT = 0,
        COLUMN_KEY
 };
 
-
 struct LayoutStyle
 {
        LayoutLocation a, b, c;
@@ -55,8 +56,10 @@ struct LayoutConfig
        gint a, b, c;
 };
 
+constexpr gint LAYOUT_STYLE_SIZE = 48;
 
-static LayoutStyle layout_config_styles[] = {
+// @todo Use std::array
+constexpr LayoutStyle layout_config_styles[] = {
        /* 1, 2, 3 */
        { static_cast<LayoutLocation>(LAYOUT_LEFT | LAYOUT_TOP), static_cast<LayoutLocation>(LAYOUT_LEFT | LAYOUT_BOTTOM), LAYOUT_RIGHT },
        { static_cast<LayoutLocation>(LAYOUT_LEFT | LAYOUT_TOP), static_cast<LayoutLocation>(LAYOUT_RIGHT | LAYOUT_TOP), LAYOUT_BOTTOM },
@@ -64,12 +67,12 @@ static LayoutStyle layout_config_styles[] = {
        { LAYOUT_TOP, static_cast<LayoutLocation>(LAYOUT_LEFT | LAYOUT_BOTTOM), static_cast<LayoutLocation>(LAYOUT_RIGHT | LAYOUT_BOTTOM) }
 };
 
-static gint layout_config_style_count = sizeof(layout_config_styles) / sizeof(LayoutStyle);
+constexpr gint layout_config_style_count = sizeof(layout_config_styles) / sizeof(LayoutStyle);
 
-static const gchar *layout_titles[] = { N_("Tools"), N_("Files"), N_("Image") };
+const gchar *layout_titles[] = { N_("Tools"), N_("Files"), N_("Image") };
 
 
-static void layout_config_destroy(GtkWidget *, gpointer data)
+void layout_config_destroy(GtkWidget *, gpointer data)
 {
        auto lc = static_cast<LayoutConfig *>(data);
 
@@ -77,7 +80,7 @@ static void layout_config_destroy(GtkWidget *, gpointer data)
        g_free(lc);
 }
 
-static void layout_config_set_order(LayoutLocation l, gint n,
+void layout_config_set_order(LayoutLocation l, gint n,
                                    LayoutLocation *a, LayoutLocation *b, LayoutLocation *c)
 {
        switch (n)
@@ -94,7 +97,7 @@ static void layout_config_set_order(LayoutLocation l, gint n,
                }
 }
 
-static void layout_config_from_data(gint style, gint oa, gint ob, gint oc,
+void layout_config_from_data(gint style, gint oa, gint ob, gint oc,
                                    LayoutLocation *la, LayoutLocation *lb, LayoutLocation *lc)
 {
        LayoutStyle ls;
@@ -108,18 +111,7 @@ static void layout_config_from_data(gint style, gint oa, gint ob, gint oc,
        layout_config_set_order(ls.c, oc, la, lb, lc);
 }
 
-void layout_config_parse(gint style, const gchar *order,
-                        LayoutLocation *a, LayoutLocation *b, LayoutLocation *c)
-{
-       gint na;
-       gint nb;
-       gint nc;
-
-       layout_config_order_from_text(order, &na, &nb, &nc);
-       layout_config_from_data(style, na, nb, nc, a, b, c);
-}
-
-static void layout_config_list_order_set(LayoutConfig *lc, gint src, gint dest)
+void layout_config_list_order_set(LayoutConfig *lc, gint src, gint dest)
 {
        GtkListStore *store;
        GtkTreeIter iter;
@@ -142,7 +134,7 @@ static void layout_config_list_order_set(LayoutConfig *lc, gint src, gint dest)
                }
 }
 
-static gint layout_config_list_order_get(LayoutConfig *lc, gint n)
+gint layout_config_list_order_get(LayoutConfig *lc, gint n)
 {
        GtkTreeModel *store;
        GtkTreeIter iter;
@@ -166,50 +158,7 @@ static gint layout_config_list_order_get(LayoutConfig *lc, gint n)
        return 0;
 }
 
-void layout_config_set(GtkWidget *widget, gint style, const gchar *order)
-{
-       LayoutConfig *lc;
-       GtkWidget *button;
-       gint a;
-       gint b;
-       gint c;
-
-       lc = static_cast<LayoutConfig *>(g_object_get_data(G_OBJECT(widget), "layout_config"));
-
-       if (!lc) return;
-
-       style = CLAMP(style, 0, layout_config_style_count);
-       button = static_cast<GtkWidget *>(g_list_nth_data(lc->style_widgets, style));
-       if (!button) return;
-
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
-
-       layout_config_order_from_text(order, &a, &b, &c);
-
-       layout_config_list_order_set(lc, a, 0);
-       layout_config_list_order_set(lc, b, 1);
-       layout_config_list_order_set(lc, c, 2);
-}
-
-gchar *layout_config_get(GtkWidget *widget, gint *style)
-{
-       LayoutConfig *lc;
-
-       lc = static_cast<LayoutConfig *>(g_object_get_data(G_OBJECT(widget), "layout_config"));
-
-       /* this should not happen */
-       if (!lc) return nullptr;
-
-       *style = lc->style;
-
-       lc->a = layout_config_list_order_get(lc, 0);
-       lc->b = layout_config_list_order_get(lc, 1);
-       lc->c = layout_config_list_order_get(lc, 2);
-
-       return layout_config_order_to_text(lc->a, lc->b, lc->c);
-}
-
-static void layout_config_widget_click_cb(GtkWidget *widget, gpointer data)
+void layout_config_widget_click_cb(GtkWidget *widget, gpointer data)
 {
        LayoutConfig *lc;
 
@@ -218,7 +167,7 @@ static void layout_config_widget_click_cb(GtkWidget *widget, gpointer data)
        if (lc) lc->style = GPOINTER_TO_INT(data);
 }
 
-static void layout_config_table_button(GtkWidget *table, LayoutLocation l, const gchar *text)
+void layout_config_table_button(GtkWidget *table, LayoutLocation l, const gchar *text)
 {
        GtkWidget *button;
 
@@ -244,11 +193,7 @@ static void layout_config_table_button(GtkWidget *table, LayoutLocation l, const
        gtk_widget_show(button);
 }
 
-enum {
-       LAYOUT_STYLE_SIZE = 48
-};
-
-static GtkWidget *layout_config_widget(GtkWidget *group, GtkWidget *box, gint style, LayoutConfig *lc)
+GtkWidget *layout_config_widget(GtkWidget *group, GtkWidget *box, gint style, LayoutConfig *lc)
 {
        GtkWidget *table;
        LayoutStyle ls;
@@ -274,7 +219,7 @@ static GtkWidget *layout_config_widget(GtkWidget *group, GtkWidget *box, gint st
                }
        g_object_set_data(G_OBJECT(group), "layout_config", lc);
        g_signal_connect(G_OBJECT(group), "clicked",
-                        G_CALLBACK(layout_config_widget_click_cb), GINT_TO_POINTER(style));
+                        G_CALLBACK(layout_config_widget_click_cb), GINT_TO_POINTER(style));
        gq_gtk_box_pack_start(GTK_BOX(box), group, FALSE, FALSE, 0);
 
        table = gtk_grid_new();
@@ -292,8 +237,8 @@ static GtkWidget *layout_config_widget(GtkWidget *group, GtkWidget *box, gint st
        return group;
 }
 
-static void layout_config_number_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
-                                   GtkTreeModel *store, GtkTreeIter *iter, gpointer)
+void layout_config_number_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
+                    GtkTreeModel *store, GtkTreeIter *iter, gpointer)
 {
        GtkTreePath *tpath;
        gint *indices;
@@ -307,6 +252,112 @@ static void layout_config_number_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
        g_free(buf);
 }
 
+gchar num_to_text_char(gint n)
+{
+       switch (n)
+               {
+               case 1:
+                       return '2';
+                       break;
+               case 2:
+                       return '3';
+                       break;
+               }
+       return '1';
+}
+
+gchar *layout_config_order_to_text(gint a, gint b, gint c)
+{
+       gchar *text;
+
+       text = g_strdup("   ");
+
+       text[0] = num_to_text_char(a);
+       text[1] = num_to_text_char(b);
+       text[2] = num_to_text_char(c);
+
+       return text;
+}
+
+gint text_char_to_num(const gchar *text, gint n)
+{
+       if (text[n] == '3') return 2;
+       if (text[n] == '2') return 1;
+       return 0;
+}
+
+void layout_config_order_from_text(const gchar *text, gint *a, gint *b, gint *c)
+{
+       if (!text || strlen(text) < 3)
+               {
+               *a = 0;
+               *b = 1;
+               *c = 2;
+               }
+       else
+               {
+               *a = text_char_to_num(text, 0);
+               *b = text_char_to_num(text, 1);
+               *c = text_char_to_num(text, 2);
+               }
+}
+
+} // namespace
+
+void layout_config_parse(gint style, const gchar *order,
+                        LayoutLocation *a, LayoutLocation *b, LayoutLocation *c)
+{
+       gint na;
+       gint nb;
+       gint nc;
+
+       layout_config_order_from_text(order, &na, &nb, &nc);
+       layout_config_from_data(style, na, nb, nc, a, b, c);
+}
+
+void layout_config_set(GtkWidget *widget, gint style, const gchar *order)
+{
+       LayoutConfig *lc;
+       GtkWidget *button;
+       gint a;
+       gint b;
+       gint c;
+
+       lc = static_cast<LayoutConfig *>(g_object_get_data(G_OBJECT(widget), "layout_config"));
+
+       if (!lc) return;
+
+       style = CLAMP(style, 0, layout_config_style_count);
+       button = static_cast<GtkWidget *>(g_list_nth_data(lc->style_widgets, style));
+       if (!button) return;
+
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+
+       layout_config_order_from_text(order, &a, &b, &c);
+
+       layout_config_list_order_set(lc, a, 0);
+       layout_config_list_order_set(lc, b, 1);
+       layout_config_list_order_set(lc, c, 2);
+}
+
+gchar *layout_config_get(GtkWidget *widget, gint *style)
+{
+       LayoutConfig *lc;
+
+       lc = static_cast<LayoutConfig *>(g_object_get_data(G_OBJECT(widget), "layout_config"));
+
+       /* this should not happen */
+       if (!lc) return nullptr;
+
+       *style = lc->style;
+
+       lc->a = layout_config_list_order_get(lc, 0);
+       lc->b = layout_config_list_order_get(lc, 1);
+       lc->c = layout_config_list_order_get(lc, 2);
+
+       return layout_config_order_to_text(lc->a, lc->b, lc->c);
+}
+
 GtkWidget *layout_config_new()
 {
        LayoutConfig *lc;
@@ -378,54 +429,4 @@ GtkWidget *layout_config_new()
 
        return lc->box;
 }
-
-static gchar num_to_text_char(gint n)
-{
-       switch (n)
-               {
-               case 1:
-                       return '2';
-                       break;
-               case 2:
-                       return '3';
-                       break;
-               }
-       return '1';
-}
-
-gchar *layout_config_order_to_text(gint a, gint b, gint c)
-{
-       gchar *text;
-
-       text = g_strdup("   ");
-
-       text[0] = num_to_text_char(a);
-       text[1] = num_to_text_char(b);
-       text[2] = num_to_text_char(c);
-
-       return text;
-}
-
-static gint text_char_to_num(const gchar *text, gint n)
-{
-       if (text[n] == '3') return 2;
-       if (text[n] == '2') return 1;
-       return 0;
-}
-
-void layout_config_order_from_text(const gchar *text, gint *a, gint *b, gint *c)
-{
-       if (!text || strlen(text) < 3)
-               {
-               *a = 0;
-               *b = 1;
-               *c = 2;
-               }
-       else
-               {
-               *a = text_char_to_num(text, 0);
-               *b = text_char_to_num(text, 1);
-               *c = text_char_to_num(text, 2);
-               }
-}
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 512ce8e..28de567 100644 (file)
@@ -33,13 +33,8 @@ GtkWidget *layout_config_new();
 void layout_config_set(GtkWidget *widget, gint style, const gchar *order);
 gchar *layout_config_get(GtkWidget *widget, gint *style);
 
-
-gchar *layout_config_order_to_text(gint a, gint b, gint c);
-void layout_config_order_from_text(const gchar *text, gint *a, gint *b, gint *c);
-
 void layout_config_parse(gint style, const gchar *order,
                         LayoutLocation *a, LayoutLocation *b, LayoutLocation *c);
 
-
-#endif
+#endif /* LAYOUT_CONFIG_H */
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index ca397b5..0451c23 100644 (file)
@@ -27,6 +27,9 @@
 
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gdk/gdk.h>
+#ifdef GDK_WINDOWING_X11
+#  include <gdk/gdkx.h>
+#endif
 #include <glib-object.h>
 #include <pango/pango.h>
 
 #include "view-file.h"
 #include "window.h"
 
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#endif
+namespace
+{
 
-enum {
-       MAINWINDOW_DEF_WIDTH = 700,
-       MAINWINDOW_DEF_HEIGHT = 500
-};
+constexpr gint MAINWINDOW_DEF_WIDTH = 700;
+constexpr gint MAINWINDOW_DEF_HEIGHT = 500;
 
-#define MAIN_WINDOW_DIV_HPOS (MAINWINDOW_DEF_WIDTH / 2)
-#define MAIN_WINDOW_DIV_VPOS (MAINWINDOW_DEF_HEIGHT / 2)
+constexpr gint MAIN_WINDOW_DIV_HPOS = MAINWINDOW_DEF_WIDTH / 2;
+constexpr gint MAIN_WINDOW_DIV_VPOS = MAINWINDOW_DEF_HEIGHT / 2;
 
-enum {
-       TOOLWINDOW_DEF_WIDTH = 260,
-       TOOLWINDOW_DEF_HEIGHT = 450
-};
+constexpr gint TOOLWINDOW_DEF_WIDTH = 260;
+constexpr gint TOOLWINDOW_DEF_HEIGHT = 450;
 
-enum {
-       PROGRESS_WIDTH = 150,
-       ZOOM_LABEL_WIDTH = 120
-};
+constexpr gint PROGRESS_WIDTH = 150;
+
+constexpr gint ZOOM_LABEL_WIDTH = 120;
 
-enum {
-       PANE_DIVIDER_SIZE = 10
+constexpr gint CONFIG_WINDOW_DEF_WIDTH = 600;
+constexpr gint CONFIG_WINDOW_DEF_HEIGHT = 400;
+
+struct LayoutConfig
+{
+       LayoutWindow *lw;
+
+       GtkWidget *configwindow;
+       GtkWidget *home_path_entry;
+       GtkWidget *layout_widget;
+
+       LayoutOptions options;
 };
 
+} // namespace
 
 GList *layout_window_list = nullptr;
 LayoutWindow *current_lw = nullptr;
@@ -2251,22 +2259,6 @@ void layout_info_pixel_set(LayoutWindow *lw, gboolean show)
  *-----------------------------------------------------------------------------
  */
 
-enum {
-       CONFIG_WINDOW_DEF_WIDTH =               600,
-       CONFIG_WINDOW_DEF_HEIGHT =      400
-};
-
-struct LayoutConfig
-{
-       LayoutWindow *lw;
-
-       GtkWidget *configwindow;
-       GtkWidget *home_path_entry;
-       GtkWidget *layout_widget;
-
-       LayoutOptions options;
-};
-
 static gint layout_config_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data);
 
 static void layout_config_close_cb(GtkWidget *, gpointer data)
@@ -3150,5 +3142,4 @@ LayoutWindow *layout_new_from_default()
        return lw;
 }
 
-
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 10bb064..356e3db 100644 (file)
 #include "utilops.h"
 #include "view-file.h"
 
+namespace
+{
+
 /* between these, the icon width is increased by thumb_max_width / 2 */
-enum {
-       THUMB_MIN_ICON_WIDTH = 128,
-       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;
 
-enum {
-       VFICON_MAX_COLUMNS = 32,
-       THUMB_BORDER_PADDING = 2
-};
+constexpr gint THUMB_MIN_ICON_WIDTH_WITH_MARKS = TOGGLE_SPACING * FILEDATA_MARKS_SIZE;
 
-enum {
-       VFICON_TIP_DELAY = 500
-};
+constexpr gint VFICON_MAX_COLUMNS = 32;
+
+constexpr gint THUMB_BORDER_PADDING = 2;
+
+constexpr gint VFICON_TIP_DELAY = 500;
 
 enum {
        FILE_COLUMN_POINTER = 0,
        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 *fd, SelectionType mask, GtkTreeIter *iter);
 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gboolean relative);
@@ -2072,12 +2079,6 @@ gboolean vficon_refresh(ViewFile *vf)
  *-----------------------------------------------------------------------------
  */
 
-struct ColumnData
-{
-       ViewFile *vf;
-       gint number;
-};
-
 static void vficon_cell_data_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
                                GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
 {