diff src/layout_util.c @ 497:a33badd85f16

Allow the copy of file paths to clipboard. This feature is disabled by default, it can be set through Preferences > Advanced > Behavior > Show "Copy path" ... When enabled, it adds a menu entry "Copy path" that let the user copies current selection's paths to X clipboard. It is very convenient to paste paths to xterm for example. Patch by Carles Pina i Estany and me.
author zas_
date Wed, 23 Apr 2008 22:17:21 +0000
parents 3809ffa3567b
children f9bf33be53ff
line wrap: on
line diff
--- a/src/layout_util.c	Wed Apr 23 21:08:29 2008 +0000
+++ b/src/layout_util.c	Wed Apr 23 22:17:21 2008 +0000
@@ -261,6 +261,13 @@
 	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;
@@ -987,6 +994,38 @@
 
 /*
  *-----------------------------------------------------------------------------
+ * 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
  *-----------------------------------------------------------------------------
  */
@@ -1030,6 +1069,7 @@
   { "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) },
 
@@ -1146,6 +1186,7 @@
 "      <menuitem action='Move'/>"
 "      <menuitem action='Rename'/>"
 "      <menuitem action='Delete'/>"
+"      <menuitem action='CopyPath'/>"
 "      <separator/>"
 "      <menuitem action='CloseWindow'/>"
 "      <menuitem action='Quit'/>"
@@ -1387,8 +1428,9 @@
 		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)