N_("Metadata"),
N_("Video"),
N_("Collection"),
- N_("Pdf")
+ N_("Document")
};
/* config memory values */
options->open_recent_list_maxsize = c_options->open_recent_list_maxsize;
options->dnd_icon_size = c_options->dnd_icon_size;
options->clipboard_selection = c_options->clipboard_selection;
+ options->dnd_default_action = c_options->dnd_default_action;
options->metadata.save_in_image_file = c_options->metadata.save_in_image_file;
options->metadata.save_legacy_IPTC = c_options->metadata.save_legacy_IPTC;
}
#endif
+ options->mouse_button_8 = c_options->mouse_button_8;
+ options->mouse_button_9 = c_options->mouse_button_9;
+
config_tab_keywords_save();
image_options_sync();
if (accel_store) gtk_tree_model_foreach(GTK_TREE_MODEL(accel_store), accel_apply_cb, NULL);
- toolbar_apply();
+ toolbar_apply(TOOLBAR_MAIN);
+ toolbar_apply(TOOLBAR_STATUS);
}
/*
"GuideOptionsColor.html",
"GuideOptionsStereo.html",
"GuideOptionsBehavior.html",
+ "GuideOptionsToolbar.html",
"GuideOptionsToolbar.html"
};
}
static void config_window_ok_cb(GtkWidget *widget, gpointer data)
-{
- config_window_apply();
- config_window_close_cb(NULL, NULL);
-}
-
-static void config_window_apply_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw;
lw = layout_window_list->data;
config_window_apply();
layout_util_sync(lw);
-}
-
-static void config_window_save_cb(GtkWidget *widget, gpointer data)
-{
- config_window_apply();
save_options(options);
+ config_window_close_cb(NULL, NULL);
}
/*
}
}
+static void dnd_default_action_selection_menu_cb(GtkWidget *combo, gpointer data)
+{
+ gint *option = data;
+
+ switch (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)))
+ {
+ case 0:
+ default:
+ *option = DND_ACTION_ASK;
+ break;
+ case 1:
+ *option = DND_ACTION_COPY;
+ break;
+ case 2:
+ *option = DND_ACTION_MOVE;
+ break;
+ }
+}
static void clipboard_selection_menu_cb(GtkWidget *combo, gpointer data)
{
gint *option = data;
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(quality_menu_cb), option_c);
- gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
+ gtk_widget_show(combo);
+}
+
+static void add_dnd_default_action_selection_menu(GtkWidget *table, gint column, gint row, const gchar *text, DnDAction option, DnDAction *option_c)
+{
+ GtkWidget *combo;
+ gint current = 0;
+
+ *option_c = option;
+
+ pref_table_label(table, column, row, text, 0.0);
+
+ combo = gtk_combo_box_text_new();
+
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Ask"));
+ if (option == DND_ACTION_ASK) current = 0;
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Copy"));
+ if (option == DND_ACTION_COPY) current = 1;
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Move"));
+ if (option == DND_ACTION_MOVE) current = 2;
+
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), current);
+
+ g_signal_connect(G_OBJECT(combo), "changed",
+ G_CALLBACK(dnd_default_action_selection_menu_cb), option_c);
+
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
gtk_widget_show(combo);
}
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(clipboard_selection_menu_cb), option_c);
- gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
+ gtk_widget_show(combo);
+}
+
+typedef struct _UseableMouseItems UseableMouseItems;
+struct _UseableMouseItems
+{
+ gchar *name; /* GtkActionEntry terminology */
+ gchar *label;
+ gchar *stock_id;
+};
+
+static const UseableMouseItems useable_mouse_items[] = {
+ {"", "", NULL},
+ {"FirstImage", N_("First Image"), GTK_STOCK_GOTO_TOP},
+ {"PrevImage", N_("Previous Image"), GTK_STOCK_GO_UP},
+ {"NextImage", N_("Next Image"), GTK_STOCK_GO_DOWN},
+ {"LastImage", N_("Last Image"), GTK_STOCK_GOTO_BOTTOM},
+ {"Back", N_("Back"), GTK_STOCK_GO_BACK},
+ {"Forward", N_("Forward"), GTK_STOCK_GO_FORWARD},
+ {"Home", N_("Home"), GTK_STOCK_HOME},
+ {"Up", N_("Up"), GTK_STOCK_GO_UP},
+ {"FirstPage", N_("First page"), GTK_STOCK_MEDIA_PREVIOUS},
+ {"LastPage", N_("Last Page"), GTK_STOCK_MEDIA_NEXT},
+ {"NextPage", N_("Next page"), GTK_STOCK_MEDIA_FORWARD},
+ {"PrevPage", N_("Previous Page"), GTK_STOCK_MEDIA_REWIND},
+ {"NewWindow", N_("New _window"), GTK_STOCK_NEW},
+ {"NewCollection", N_("New collection"), GTK_STOCK_INDEX},
+ {"OpenCollection", N_("Open collection"), GTK_STOCK_OPEN},
+ {"Search", N_("Search"), GTK_STOCK_FIND},
+ {"FindDupes", N_("Find duplicates"), GTK_STOCK_FIND},
+ {"NewFolder", N_("New folder"),GTK_STOCK_DIRECTORY},
+ {"Copy", N_("Copy"), GTK_STOCK_COPY},
+ {"Move", N_("Move"), PIXBUF_INLINE_ICON_MOVE},
+ {"Rename", N_("Rename"), PIXBUF_INLINE_ICON_RENAME},
+ {"Delete", N_("Delete"), GTK_STOCK_DELETE},
+ {"CloseWindow", N_("Close Window"), GTK_STOCK_CLOSE},
+ {"PanView", N_("Pan view"), PIXBUF_INLINE_ICON_PANORAMA},
+ {"SelectAll", N_("Select all"), PIXBUF_INLINE_ICON_SELECT_ALL},
+ {"SelectNone", N_("Select none"), PIXBUF_INLINE_ICON_SELECT_NONE},
+ {"SelectInvert", N_("Select invert"), PIXBUF_INLINE_ICON_SELECT_INVERT},
+ {"ShowFileFilter", N_("Show file filter"), PIXBUF_INLINE_ICON_FILE_FILTER},
+ {"RectangularSelection", N_("Select rectangle"), PIXBUF_INLINE_ICON_SELECT_RECTANGLE},
+ {"Print", N_("Print"), GTK_STOCK_PRINT},
+ {"Preferences", N_("Preferences"), GTK_STOCK_PREFERENCES},
+ {"LayoutConfig", N_("Configure this window"), GTK_STOCK_PREFERENCES},
+ {"Maintenance", N_("Cache maintenance"), PIXBUF_INLINE_ICON_MAINTENANCE},
+ {"RotateCW", N_("Rotate clockwise 90°"), PIXBUF_INLINE_ICON_CW},
+ {"RotateCCW", N_("Rotate counterclockwise 90°"), PIXBUF_INLINE_ICON_CCW},
+ {"Rotate180", N_("Rotate 180°"), PIXBUF_INLINE_ICON_180},
+ {"Mirror", N_("Mirror"), PIXBUF_INLINE_ICON_MIRROR},
+ {"Flip", N_("Flip"), PIXBUF_INLINE_ICON_FLIP},
+ {"AlterNone", N_("Original state"), PIXBUF_INLINE_ICON_ORIGINAL},
+ {"ZoomIn", N_("Zoom in"), GTK_STOCK_ZOOM_IN},
+ {"ZoomOut", N_("Zoom out"), GTK_STOCK_ZOOM_OUT},
+ {"Zoom100", N_("Zoom 1:1"), GTK_STOCK_ZOOM_100},
+ {"ZoomFit", N_("Zoom to fit"), GTK_STOCK_ZOOM_FIT},
+ {"ZoomFillHor", N_("Fit Horizontaly"), PIXBUF_INLINE_ICON_ZOOMFILLHOR},
+ {"ZoomFillVert", N_("Fit vertically"), PIXBUF_INLINE_ICON_ZOOMFILLVERT},
+ {"Zoom200", N_("Zoom 2:1"), GTK_STOCK_FILE},
+ {"Zoom300", N_("Zoom 3:1"), GTK_STOCK_FILE},
+ {"Zoom400", N_("Zoom 4:1"), GTK_STOCK_FILE},
+ {"Zoom50", N_("Zoom 1:2"), GTK_STOCK_FILE},
+ {"Zoom33", N_("Zoom1:3"), GTK_STOCK_FILE},
+ {"Zoom25", N_("Zoom 1:4"), GTK_STOCK_FILE},
+ {"ConnectZoomIn", N_("Connected Zoom in"), GTK_STOCK_ZOOM_IN},
+ {"SplitPaneSync", N_("Split Pane Sync"), PIXBUF_INLINE_SPLIT_PANE_SYNC},
+ {"Grayscale", N_("Grayscale"), PIXBUF_INLINE_ICON_GRAYSCALE},
+ {"OverUnderExposed", N_("Over Under Exposed"), PIXBUF_INLINE_ICON_EXPOSURE},
+ {"HideTools", N_("Hide file list"), PIXBUF_INLINE_ICON_HIDETOOLS},
+ {"SlideShowPause", N_("Pause slideshow"), GTK_STOCK_MEDIA_PAUSE},
+ {"SlideShowFaster", N_("Slideshow Faster"), GTK_STOCK_FILE},
+ {"SlideShowSlower", N_("Slideshow Slower"), GTK_STOCK_FILE},
+ {"Refresh", N_("Refresh"), GTK_STOCK_REFRESH},
+ {"HelpContents", N_("Help"), GTK_STOCK_HELP},
+ {"ExifWin", N_("Exif window"), PIXBUF_INLINE_ICON_EXIF},
+ {"Thumbnails", N_("Show thumbnails"), PIXBUF_INLINE_ICON_THUMB},
+ {"ShowMarks", N_("Show marks"), PIXBUF_INLINE_ICON_MARKS},
+ {"ImageGuidelines", N_("Show guidelines"), PIXBUF_INLINE_ICON_GUIDELINES},
+ {"DrawRectangle", N_("Draw Rectangle"), PIXBUF_INLINE_ICON_DRAW_RECTANGLE},
+ {"FloatTools", N_("Float file list"), PIXBUF_INLINE_ICON_FLOAT},
+ {"SBar", N_("Info sidebar"), PIXBUF_INLINE_ICON_INFO},
+ {"SBarSort", N_("Sort manager"), PIXBUF_INLINE_ICON_SORT},
+ {"Quit", N_("Quit"), GTK_STOCK_QUIT},
+ {NULL, NULL, NULL}
+};
+
+static void mouse_buttons_selection_menu_cb(GtkWidget *combo, gpointer data)
+{
+ gchar **option = data;
+ gchar *label;
+
+ label = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo));
+
+ const UseableMouseItems *list = useable_mouse_items;
+
+ while (list->name)
+ {
+ if (g_strcmp0(list->label, label) == 0)
+ {
+ break;
+ }
+ list++;
+ }
+
+ g_free(*option);
+ *option = g_strdup(list->name);
+ g_free(label);
+}
+
+static void add_mouse_selection_menu(GtkWidget *table, gint column, gint row, const gchar *text,
+ gchar *option, gchar **option_c)
+{
+ GtkWidget *combo;
+ gint current = 0;
+ gint i = 0;
+
+ *option_c = option;
+
+ pref_table_label(table, column, row, text, 0.0);
+
+ combo = gtk_combo_box_text_new();
+
+ const UseableMouseItems *list = useable_mouse_items;
+
+ while (list->name)
+ {
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), list->label);
+ if (g_strcmp0(list->name, option) == 0)
+ {
+ current = i;
+ }
+ i++;
+ list++;
+ }
+
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), current);
+
+ g_signal_connect(G_OBJECT(combo), "changed",
+ G_CALLBACK(mouse_buttons_selection_menu_cb), option_c);
+
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
gtk_widget_show(combo);
}
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(thumb_size_menu_cb), NULL);
- gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
gtk_widget_show(combo);
}
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(stereo_mode_menu_cb), option_c);
- gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
gtk_widget_show(combo);
}
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(video_menu_cb), option_c);
- gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
gtk_widget_show(combo);
}
GList *list_cells;
GtkCellRenderer *cell;
GtkTreeViewColumn *column;
- const gchar *title;
- guint i = 0;
gint rows;
rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(filter_store), NULL);
add_thumb_size_menu(table, 0, 0, _("Size:"));
add_quality_menu(table, 0, 1, _("Quality:"), options->thumbnails.quality, &c_options->thumbnails.quality);
- ct_button = pref_checkbox_new_int(group, _("Cache thumbnails"),
+ hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
+ pref_label_new(hbox, _("Custom size: "));
+ pref_spin_new_int(hbox, _("Width:"), NULL, 1, 512, 1, options->thumbnails.max_width, &c_options->thumbnails.max_width);
+ pref_spin_new_int(hbox, _("Height:"), NULL, 1, 512, 1, options->thumbnails.max_height, &c_options->thumbnails.max_height);
+
+ ct_button = pref_checkbox_new_int(group, _("Cache thumbnails and sim. files"),
options->thumbnails.enable_caching, &c_options->thumbnails.enable_caching);
subgroup = pref_box_new(group, FALSE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);
add_quality_menu(table, 0, 0, _("Quality:"), options->image.zoom_quality, &c_options->image.zoom_quality);
#ifdef HAVE_CLUTTER
- pref_checkbox_new_int(group, _("Use GPU acceleration via Clutter library"),
+ pref_checkbox_new_int(group, _("Use GPU acceleration via Clutter library (Requires restart)"),
options->image.use_clutter_renderer, &c_options->image.use_clutter_renderer);
#endif
{
GtkWidget *hbox;
GtkWidget *vbox;
- GtkWidget *vbox_buttons;
GtkWidget *group;
GtkWidget *button;
GtkWidget *image_overlay_template_view;
GtkWidget *scrolled_pre_formatted;
GtkTextBuffer *buffer;
GtkWidget *label;
- GtkWidget * subgroup;
- gint i = 0;
- gint rows = 0;
- gint cols = 0;
+ GtkWidget *subgroup;
vbox = scrolled_notebook_page(notebook, _("OSD"));
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(intent_menu_cb), option_c);
- gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1, GTK_SHRINK, 0, 0, 0);
gtk_widget_show(combo);
}
#endif
pref_spin_new_int(group, _("Drag'n drop icon size"), NULL,
16, 256, 16, options->dnd_icon_size, &c_options->dnd_icon_size);
+ table = pref_table_new(group, 2, 1, FALSE, FALSE);
+ add_dnd_default_action_selection_menu(table, 0, 0, _("Drag`n drop default action:"), options->dnd_default_action, &c_options->dnd_default_action);
+
table = pref_table_new(group, 2, 1, FALSE, FALSE);
add_clipboard_selection_menu(table, 0, 0, _("Copy path clipboard selection:"), options->clipboard_selection, &c_options->clipboard_selection);
table = pref_table_new(group, 2, 1, FALSE, FALSE);
add_video_menu(table, 0, 0, _("Play with:"), options->image_l_click_video_editor, &c_options->image_l_click_video_editor);
+ table = pref_table_new(group, 2, 1, FALSE, FALSE);
+ table = pref_table_new(group, 2, 1, FALSE, FALSE);
+ add_mouse_selection_menu(table, 0, 0, _("Mouse button Back:"), options->mouse_button_8, &c_options->mouse_button_8);
+ table = pref_table_new(group, 2, 1, FALSE, FALSE);
+ add_mouse_selection_menu(table, 0, 0, _("Mouse button Forward:"), options->mouse_button_9, &c_options->mouse_button_9);
#ifdef DEBUG
pref_spacer(group, PREF_PAD_GROUP);
gtk_widget_show(button);
}
-/* toolbar tab */
-static void config_tab_toolbar(GtkWidget *notebook)
+/* toolbar main tab */
+static void config_tab_toolbar_main(GtkWidget *notebook)
+{
+ GtkWidget *vbox;
+ GtkWidget *toolbardata;
+ LayoutWindow *lw;
+
+ lw = layout_window_list->data;
+
+ vbox = scrolled_notebook_page(notebook, _("Toolbar Main"));
+
+ toolbardata = toolbar_select_new(lw, TOOLBAR_MAIN);
+ gtk_box_pack_start(GTK_BOX(vbox), toolbardata, TRUE, TRUE, 0);
+ gtk_widget_show(vbox);
+}
+
+/* toolbar status tab */
+static void config_tab_toolbar_status(GtkWidget *notebook)
{
GtkWidget *vbox;
GtkWidget *toolbardata;
lw = layout_window_list->data;
- vbox = scrolled_notebook_page(notebook, _("Toolbar"));
+ vbox = scrolled_notebook_page(notebook, _("Toolbar Status"));
- toolbardata = toolbar_select_new(lw);
+ toolbardata = toolbar_select_new(lw, TOOLBAR_STATUS);
gtk_box_pack_start(GTK_BOX(vbox), toolbardata, TRUE, TRUE, 0);
gtk_widget_show(vbox);
}
config_tab_color(notebook);
config_tab_stereo(notebook);
config_tab_behavior(notebook);
- config_tab_toolbar(notebook);
+ config_tab_toolbar_main(notebook);
+ config_tab_toolbar_status(notebook);
hbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);
ct_button = button;
- button = pref_button_new(NULL, GTK_STOCK_SAVE, NULL, FALSE,
- G_CALLBACK(config_window_save_cb), NULL);
- gtk_container_add(GTK_CONTAINER(hbox), button);
- gtk_widget_set_can_default(button, TRUE);
- gtk_widget_show(button);
-
- button = pref_button_new(NULL, GTK_STOCK_APPLY, NULL, FALSE,
- G_CALLBACK(config_window_apply_cb), NULL);
- gtk_container_add(GTK_CONTAINER(hbox), button);
- gtk_widget_set_can_default(button, TRUE);
- gtk_widget_show(button);
-
button = pref_button_new(NULL, GTK_STOCK_CANCEL, NULL, FALSE,
G_CALLBACK(config_window_close_cb), NULL);
gtk_container_add(GTK_CONTAINER(hbox), button);
gint i_authors = 0;
gchar *path;
GString *copyright;
- gchar *zd_path;
+ gchar *timezone_path;
+ gchar *basename;
ZoneDetect *cd;
FILE *fp = NULL;
#define LINE_LENGTH 1000
copyright = g_string_new(NULL);
copyright = g_string_append(copyright, "This program comes with absolutely no warranty.\nGNU General Public License, version 2 or later.\nSee https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\n\n");
- zd_path = g_build_filename(GQ_BIN_DIR, TIMEZONE_DATABASE, NULL);
- cd = ZDOpenDatabase(zd_path);
- if (cd)
+ path = path_from_utf8(TIMEZONE_DATABASE);
+ basename = g_path_get_basename(path);
+ timezone_path = g_build_filename(get_rc_dir(), basename, NULL);
+ if (g_file_test(timezone_path, G_FILE_TEST_EXISTS))
{
- copyright = g_string_append(copyright, ZDGetNotice(cd));
+ cd = ZDOpenDatabase(timezone_path);
+ if (cd)
+ {
+ copyright = g_string_append(copyright, ZDGetNotice(cd));
+ ZDCloseDatabase(cd);
+ }
}
- ZDCloseDatabase(cd);
- g_free(zd_path);
+ g_free(path);
+ g_free(timezone_path);
+ g_free(basename);
authors[0] = NULL;
path = g_build_filename(GQ_HELPDIR, "AUTHORS", NULL);
static void timezone_cancel_button_cb(GenericDialog *gd, gpointer data)
{
TZData *tz = data;
- GError *error = NULL;
g_cancellable_cancel(tz->cancellable);
}