file_util_delete(NULL, collection_table_popup_file_list(ct), ct->listview);
}
+static void collection_table_popup_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ CollectTable *ct = data;
+
+ file_util_copy_path_list_to_clipboard(collection_table_popup_file_list(ct));
+}
+
static void collection_table_popup_sort_cb(GtkWidget *widget, gpointer data)
{
CollectTable *ct;
G_CALLBACK(collection_table_popup_rename_cb), ct);
menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, over_icon,
G_CALLBACK(collection_table_popup_delete_cb), ct);
+ if (options->show_copy_path)
+ menu_item_add_sensitive(menu, _("_Copy path"), over_icon,
+ G_CALLBACK(collection_table_popup_copy_path_cb), ct);
menu_item_add_divider(menu);
submenu_add_sort(menu, G_CALLBACK(collection_table_popup_sort_cb), ct, FALSE, TRUE, FALSE, 0);
file_util_delete(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window);
}
+static void dupe_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ DupeWindow *dw = data;
+
+ file_util_copy_path_list_to_clipboard(dupe_listview_get_selection(dw, dw->listview));
+}
+
static void dupe_menu_remove_cb(GtkWidget *widget, gpointer data)
{
DupeWindow *dw = data;
G_CALLBACK(dupe_menu_rename_cb), dw);
menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row,
G_CALLBACK(dupe_menu_delete_cb), dw);
+ if (options->show_copy_path)
+ menu_item_add_sensitive(menu, _("_Copy path"), on_row,
+ G_CALLBACK(dupe_menu_copy_path_cb), dw);
menu_item_add_divider(menu);
menu_item_add_stock_sensitive(menu, _("Rem_ove"), GTK_STOCK_REMOVE, on_row,
G_CALLBACK(dupe_menu_remove_cb), dw);
options->panels.sort.selection_state = 0;
options->progressive_key_scrolling = FALSE;
+ options->show_copy_path = FALSE;
options->show_icon_names = TRUE;
options->slideshow.delay = 150;
file_util_delete(image_get_fd(imd), NULL, imd->widget);
}
+static void view_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ ViewWindow *vw = data;
+ ImageWindow *imd;
+
+ imd = view_window_active_image(vw);
+ file_util_copy_path_to_clipboard(image_get_fd(imd));
+}
+
static void view_fullscreen_cb(GtkWidget *widget, gpointer data)
{
ViewWindow *vw = data;
menu_item_add(menu, _("_Move..."), G_CALLBACK(view_move_cb), vw);
menu_item_add(menu, _("_Rename..."), G_CALLBACK(view_rename_cb), vw);
menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(view_delete_cb), vw);
+ if (options->show_copy_path)
+ menu_item_add(menu, _("_Copy path"), G_CALLBACK(view_copy_path_cb), vw);
menu_item_add_divider(menu);
li_pop_menu_click_parent(widget, lw));
}
+static void li_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ file_util_copy_path_to_clipboard(layout_image_get_fd(lw));
+}
+
static void li_pop_menu_move_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
if (!path) gtk_widget_set_sensitive(item, FALSE);
item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw);
if (!path) gtk_widget_set_sensitive(item, FALSE);
+
+ if (options->show_copy_path)
+ {
+ item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw);
+ if (!path) gtk_widget_set_sensitive(item, FALSE);
+ }
menu_item_add_divider(menu);
file_util_copy(NULL, layout_selection_list(lw), NULL, layout_window(lw));
}
+static void layout_menu_copy_path_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ file_util_copy_path_list_to_clipboard(layout_selection_list(lw));
+}
+
static void layout_menu_move_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
layout_recent_update_all();
}
+/*
+ *-----------------------------------------------------------------------------
+ * copy path
+ *-----------------------------------------------------------------------------
+ */
+
+static void layout_copy_path_update(LayoutWindow *lw)
+{
+ GtkWidget *item = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/FileMenu/CopyPath");
+
+ if (!item) return;
+
+ if (options->show_copy_path)
+ gtk_widget_show(item);
+ else
+ gtk_widget_hide(item);
+}
+
+void layout_copy_path_update_all(void)
+{
+ GList *work;
+
+ work = layout_window_list;
+ while (work)
+ {
+ LayoutWindow *lw = work->data;
+ work = work->next;
+
+ layout_copy_path_update(lw);
+ }
+}
+
/*
*-----------------------------------------------------------------------------
* menu
{ "Delete", GTK_STOCK_DELETE, N_("_Delete..."), "<control>D", NULL, CB(layout_menu_delete_cb) },
{ "DeleteAlt1",GTK_STOCK_DELETE, N_("_Delete..."), "Delete", NULL, CB(layout_menu_delete_cb) },
{ "DeleteAlt2",GTK_STOCK_DELETE, N_("_Delete..."), "KP_Delete", NULL, CB(layout_menu_delete_cb) },
+ { "CopyPath", NULL, N_("_Copy path"), NULL, NULL, CB(layout_menu_copy_path_cb) },
{ "CloseWindow", GTK_STOCK_CLOSE,N_("C_lose window"), "<control>W", NULL, CB(layout_menu_close_cb) },
{ "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", NULL, CB(layout_menu_exit_cb) },
" <menuitem action='Move'/>"
" <menuitem action='Rename'/>"
" <menuitem action='Delete'/>"
+" <menuitem action='CopyPath'/>"
" <separator/>"
" <menuitem action='CloseWindow'/>"
" <menuitem action='Quit'/>"
g_error_free (error);
exit (EXIT_FAILURE);
}
-
+
layout_actions_setup_marks(lw);
+ layout_copy_path_update(lw);
}
void layout_actions_add_window(LayoutWindow *lw, GtkWidget *window)
void layout_recent_update_all(void);
void layout_recent_add_path(const gchar *path);
+void layout_copy_path_update_all(void);
+
void layout_actions_setup(LayoutWindow *lw);
void layout_actions_add_window(LayoutWindow *lw, GtkWidget *window);
GtkWidget *layout_actions_menu_bar(LayoutWindow *lw);
if (fd) file_util_delete(fd, NULL, pw->imd->widget);
}
+static void pan_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ PanWindow *pw = data;
+ FileData *fd;
+
+ fd = pan_menu_click_fd(pw);
+ if (fd) file_util_copy_path_to_clipboard(fd);
+}
+
static void pan_exif_date_toggle_cb(GtkWidget *widget, gpointer data)
{
PanWindow *pw = data;
G_CALLBACK(pan_rename_cb), pw);
menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active,
G_CALLBACK(pan_delete_cb), pw);
+ if (options->show_copy_path)
+ menu_item_add_sensitive(menu, _("_Copy path"), active,
+ G_CALLBACK(pan_copy_path_cb), pw);
menu_item_add_divider(menu);
item = menu_item_add_check(menu, _("Sort by E_xif date"), pw->exif_date_enable,
options->open_recent_list_maxsize = c_options->open_recent_list_maxsize;
options->dnd_icon_size = c_options->dnd_icon_size;
+
+ if (options->show_copy_path != c_options->show_copy_path)
+ {
+ options->show_copy_path = c_options->show_copy_path;
+ layout_copy_path_update_all();
+ }
#ifdef DEBUG
debug = debug_c;
gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
gtk_widget_show(button);
+
group = pref_group_new(vbox, FALSE, _("Behavior"), GTK_ORIENTATION_VERTICAL);
pref_checkbox_new_int(group, _("Rectangular selection in icon view"),
pref_checkbox_new_int(group, _("In place renaming"),
options->file_ops.enable_in_place_rename, &c_options->file_ops.enable_in_place_rename);
+ pref_checkbox_new_int(group, _("Show \"Copy path\" menu item which write the path of selected files to clipboard"),
+ options->show_copy_path, &c_options->show_copy_path);
+
pref_spin_new_int(group, _("Open recent list maximum size"), NULL,
1, 50, 1, options->open_recent_list_maxsize, &c_options->open_recent_list_maxsize);
WRITE_SUBTITLE("General Options");
WRITE_BOOL(show_icon_names);
+ WRITE_BOOL(show_copy_path);
WRITE_SEPARATOR();
WRITE_BOOL(tree_descend_subdirs);
/* general options */
READ_BOOL(show_icon_names);
+ READ_BOOL(show_copy_path);
READ_BOOL(tree_descend_subdirs);
READ_BOOL(lazy_image_sync);
file_util_delete(NULL, search_result_selection_list(sd), sd->window);
}
+static void sr_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ SearchData *sd = data;
+
+ file_util_copy_path_list_to_clipboard(search_result_selection_list(sd));
+}
+
static void sr_menu_remove_cb(GtkWidget *widget, gpointer data)
{
SearchData *sd = data;
G_CALLBACK(sr_menu_rename_cb), sd);
menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row,
G_CALLBACK(sr_menu_delete_cb), sd);
+ if (options->show_copy_path)
+ menu_item_add_sensitive(menu, _("_Copy path"), on_row,
+ G_CALLBACK(sr_menu_copy_path_cb), sd);
menu_item_add_divider(menu);
menu_item_add_stock_sensitive(menu, _("Rem_ove"), GTK_STOCK_REMOVE, on_row,
G_CALLBACK(sr_menu_remove_cb), sd);
gint place_dialogs_under_mouse;
gint mousewheel_scrolls;
gint show_icon_names;
+ gint show_copy_path;
/* various */
gint startup_path_enable;
real_file_util_move(source_fd, source_list, dest_path, TRUE, parent);
}
+void file_util_copy_path_to_clipboard(FileData *fd)
+{
+ GtkClipboard *clipboard;
+
+ if (!fd || !*fd->path) return;
+
+ clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+ gtk_clipboard_set_text(clipboard, g_shell_quote(fd->path), -1);
+}
+
+void file_util_copy_path_list_to_clipboard(GList *list)
+{
+ GtkClipboard *clipboard;
+ GList *work;
+ GString *new;
+
+ clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+
+ new = g_string_new("");
+ work = list;
+ while (work) {
+ FileData *fd = work->data;
+ work = work->next;
+
+ if (!fd || !*fd->path) continue;
+
+ g_string_append(new, g_shell_quote(fd->path));
+ if (work) g_string_append_c(new, ' ');
+ }
+
+ gtk_clipboard_set_text(clipboard, new->str, new->len);
+ g_string_free(new, TRUE);
+}
+
void file_util_move_simple(GList *list, const gchar *dest_path)
{
if (!list) return;
gint move_file_ext(FileData *fd);
gint rename_file_ext(FileData *fd);
+void file_util_copy_path_to_clipboard(FileData *fd);
+void file_util_copy_path_list_to_clipboard(GList *list);
+
#endif
file_util_delete(NULL, vficon_pop_menu_file_list(vfi), vfi->listview);
}
+static void vficon_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ ViewFileIcon *vfi = data;
+
+ file_util_copy_path_list_to_clipboard(vficon_pop_menu_file_list(vfi));
+}
+
static void vficon_pop_menu_sort_cb(GtkWidget *widget, gpointer data)
{
ViewFileIcon *vfi;
gtk_widget_set_sensitive(item, active);
item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(vficon_pop_menu_delete_cb), vfi);
gtk_widget_set_sensitive(item, active);
+ if (options->show_copy_path)
+ {
+ item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(vficon_pop_menu_copy_path_cb), vfi);
+ gtk_widget_set_sensitive(item, active);
+ }
menu_item_add_divider(menu);
file_util_copy(NULL, vflist_pop_menu_file_list(vfl), NULL, vfl->listview);
}
+static void vflist_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ ViewFileList *vfl = data;
+
+ file_util_copy_path_list_to_clipboard(vflist_pop_menu_file_list(vfl));
+}
+
static void vflist_pop_menu_move_cb(GtkWidget *widget, gpointer data)
{
ViewFileList *vfl = data;
menu_item_add_sensitive(menu, _("_Rename..."), active,
G_CALLBACK(vflist_pop_menu_rename_cb), vfl);
menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active,
- G_CALLBACK(vflist_pop_menu_delete_cb), vfl);
+ G_CALLBACK(vflist_pop_menu_delete_cb), vfl);
+ if (options->show_copy_path)
+ menu_item_add_sensitive(menu, _("_Copy path"), active,
+ G_CALLBACK(vflist_pop_menu_copy_path_cb), vfl);
menu_item_add_divider(menu);