#include "ui-misc.h"
#include "ui-utildlg.h"
-enum {
- MIN_HEIGHT = 25
-};
+namespace
+{
+
+constexpr gint MIN_HEIGHT = 25;
+
/*
*-------------------------------------------------------------------
* EXIF widget
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;
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);
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;
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);
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;
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;
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"));
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;
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;
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;
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)
*-------------------------------------------------------------------
*/
-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)
{
}
-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)
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"));
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"));
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),
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);
}
}
-static void bar_pane_exif_conf_dialog(GtkWidget *widget)
+void bar_pane_exif_conf_dialog(GtkWidget *widget)
{
ConfDialogData *cdd;
GenericDialog *gd;
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;
}
#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)
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)
}
#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;
}
#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;
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;
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);
#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)
}
#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;
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;
#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);
/*
*-------------------------------------------------------------------
*-------------------------------------------------------------------
*/
-
-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;
}
/* 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;
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
{
};
-static void bar_pane_keywords_write(PaneKeywordsData *pkd)
+void bar_pane_keywords_write(PaneKeywordsData *pkd)
{
GList *list;
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;
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;
return FALSE;
}
-static void bar_keyword_tree_sync(PaneKeywordsData *pkd)
+void bar_keyword_tree_sync(PaneKeywordsData *pkd)
{
GtkTreeModel *model;
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;
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;
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;
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;
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;
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;
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;
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));
}
}
-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;
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);
}
-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)
}
}
-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);
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);
*-------------------------------------------------------------------
*/
-
-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)
{
}
}
-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;
}
-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;
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;
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)
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;
*-------------------------------------------------------------------
*/
-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);
}
-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;
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;
-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;
}
-
-
/*
*-------------------------------------------------------------------
* 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);
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);
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;
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;
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;
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;
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;
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);
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;
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;
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;
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;
/**
* @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 */
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;
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)
*-------------------------------------------------------------------
*/
-#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;
}
-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;
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;
return FALSE;
}
-static gint autocomplete_sort_iter_compare_func (GtkTreeModel *model,
+gint autocomplete_sort_iter_compare_func (GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer)
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];
fclose(f);
}
-static gboolean autocomplete_keywords_list_save(gchar *path)
+gboolean autocomplete_keywords_list_save(gchar *path)
{
SecureSaveInfo *ssi;
gchar *pathl;
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;
#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);
{
auto info = static_cast<CollectInfo *>(work->data);
- if (INFO_SELECTED(info))
+ if (info_selected(info))
{
collection_table_selection_remove(ct, info, SELECTION_SELECTED, nullptr);
}
{
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);
{
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);
{
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);
}
if (!ct->click_info) return;
- if (INFO_SELECTED(ct->click_info))
+ if (info_selected(ct->click_info))
{
list = g_list_copy(ct->selection);
}
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
{
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)
{
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;
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);
}
if (!ct->click_info) return;
- selected = INFO_SELECTED(ct->click_info);
+ selected = info_selected(ct->click_info);
switch (info)
{
{
gint items;
- if (INFO_SELECTED(ct->click_info))
+ if (info_selected(ct->click_info))
items = g_list_length(ct->selection);
else
items = 1;
*-----------------------------------------------------------------------------
*/
-struct ColumnData
-{
- CollectTable *ct;
- gint number;
-};
-
static void collection_table_cell_data_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
{
#include "intl.h"
#include "ui-misc.h"
+namespace
+{
enum {
COLUMN_TEXT = 0,
COLUMN_KEY
};
-
struct LayoutStyle
{
LayoutLocation a, b, c;
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 },
{ 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);
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)
}
}
-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;
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;
}
}
-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;
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;
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;
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;
}
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();
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;
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;
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: */
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: */
#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;
*-----------------------------------------------------------------------------
*/
-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)
return lw;
}
-
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
#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);
*-----------------------------------------------------------------------------
*/
-struct ColumnData
-{
- ViewFile *vf;
- gint number;
-};
-
static void vficon_cell_data_cb(GtkTreeViewColumn *, GtkCellRenderer *cell,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
{