From cda2e9b6189b19e0123b881d472ec0792014c552 Mon Sep 17 00:00:00 2001 From: Arkadiy Illarionov Date: Tue, 5 Mar 2024 01:20:45 +0300 Subject: [PATCH] Fix build with LTO * Move structs and some functions to anonymous namespace * Replace some defines and enums with constants * Replace macro with inline function --- src/bar-exif.cc | 204 ++++++++-------- src/bar-keywords.cc | 412 +++++++++++++++++--------------- src/collect-table.cc | 62 ++--- src/layout-config.cc | 247 +++++++++---------- src/layout-config.h | 7 +- src/layout.cc | 63 +++-- src/view-file/view-file-icon.cc | 37 +-- 7 files changed, 521 insertions(+), 511 deletions(-) diff --git a/src/bar-exif.cc b/src/bar-exif.cc index 47940a8f..f1c95873 100644 --- a/src/bar-exif.cc +++ b/src/bar-exif.cc @@ -46,9 +46,11 @@ #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(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(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(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(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(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(TARGET_APP_EXIF_ENTRY_STRING), GTK_TARGET_SAME_APP, TARGET_APP_EXIF_ENTRY }, { const_cast("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(TARGET_APP_EXIF_ENTRY_STRING), GTK_TARGET_SAME_APP, TARGET_APP_EXIF_ENTRY }, { const_cast("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(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(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(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(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(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(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(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(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(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(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(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(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(""); } -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(work_windows->data); - bar = lw->bar; - pane = bar_find_pane_by_id(bar, PANE_EXIF, "exif"); - if (pane) - { - ped = static_cast(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(work->data); - work = work->next; - ee = static_cast(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(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(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(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(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(work_windows->data); + bar = lw->bar; + pane = bar_find_pane_by_id(bar, PANE_EXIF, "exif"); + if (pane) + { + ped = static_cast(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(work->data); + work = work->next; + ee = static_cast(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(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; diff --git a/src/bar-keywords.cc b/src/bar-keywords.cc index b745b2e9..5cc9315f 100644 --- a/src/bar-keywords.cc +++ b/src/bar-keywords.cc @@ -46,12 +46,16 @@ #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(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(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(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(""); } -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(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(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(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(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(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(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(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(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(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(TARGET_APP_KEYWORD_PATH_STRING), GTK_TARGET_SAME_WIDGET, TARGET_APP_KEYWORD_PATH }, { const_cast("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(TARGET_APP_KEYWORD_PATH_STRING), GTK_TARGET_SAME_WIDGET, TARGET_APP_KEYWORD_PATH }, { const_cast("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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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; diff --git a/src/collect-table.cc b/src/collect-table.cc index 65702f3d..874d15d6 100644 --- a/src/collect-table.cc +++ b/src/collect-table.cc @@ -55,29 +55,37 @@ #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(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) { diff --git a/src/layout-config.cc b/src/layout-config.cc index 46da2f38..ab98a549 100644 --- a/src/layout-config.cc +++ b/src/layout-config.cc @@ -31,13 +31,14 @@ #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(LAYOUT_LEFT | LAYOUT_TOP), static_cast(LAYOUT_LEFT | LAYOUT_BOTTOM), LAYOUT_RIGHT }, { static_cast(LAYOUT_LEFT | LAYOUT_TOP), static_cast(LAYOUT_RIGHT | LAYOUT_TOP), LAYOUT_BOTTOM }, @@ -64,12 +67,12 @@ static LayoutStyle layout_config_styles[] = { { LAYOUT_TOP, static_cast(LAYOUT_LEFT | LAYOUT_BOTTOM), static_cast(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(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(g_object_get_data(G_OBJECT(widget), "layout_config")); - - if (!lc) return; - - style = CLAMP(style, 0, layout_config_style_count); - button = static_cast(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(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(g_object_get_data(G_OBJECT(widget), "layout_config")); + + if (!lc) return; + + style = CLAMP(style, 0, layout_config_style_count); + button = static_cast(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(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: */ diff --git a/src/layout-config.h b/src/layout-config.h index 512ce8e4..28de5675 100644 --- a/src/layout-config.h +++ b/src/layout-config.h @@ -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: */ diff --git a/src/layout.cc b/src/layout.cc index ca397b58..0451c231 100644 --- a/src/layout.cc +++ b/src/layout.cc @@ -27,6 +27,9 @@ #include #include +#ifdef GDK_WINDOWING_X11 +# include +#endif #include #include @@ -62,32 +65,37 @@ #include "view-file.h" #include "window.h" -#ifdef GDK_WINDOWING_X11 -#include -#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: */ diff --git a/src/view-file/view-file-icon.cc b/src/view-file/view-file-icon.cc index 10bb0647..356e3dbd 100644 --- a/src/view-file/view-file-icon.cc +++ b/src/view-file/view-file-icon.cc @@ -45,27 +45,34 @@ #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) { -- 2.20.1