[gthumb: 19/24] moved the copy_to/move_to commands in the file_manager extension



commit 45c858839780b1aab3d7e07a87c35694c1908c93
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Nov 15 19:19:00 2010 +0100

    moved the copy_to/move_to commands in the file_manager extension

 configure.ac                                       |    4 +-
 extensions/Makefile.am                             |    3 +-
 extensions/copy_move_to_folder/Makefile.am         |   30 ----
 extensions/copy_move_to_folder/actions.c           |  173 --------------------
 extensions/copy_move_to_folder/actions.h           |   32 ----
 extensions/copy_move_to_folder/callbacks.c         |  125 --------------
 extensions/copy_move_to_folder/callbacks.h         |   30 ----
 .../copy_move_to_folder.extension.in.in            |   13 --
 extensions/copy_move_to_folder/main.c              |   53 ------
 extensions/file_manager/Makefile.am                |    5 +-
 extensions/file_manager/actions.c                  |  150 +++++++++++++++++
 extensions/file_manager/actions.h                  |    2 +
 extensions/file_manager/callbacks.c                |   18 ++
 .../data/Makefile.am                               |    4 +-
 .../data/gthumb-file-manager.schemas.in}           |    0
 .../preferences.h                                  |    0
 16 files changed, 178 insertions(+), 464 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index b0009c4..be79633 100644
--- a/configure.ac
+++ b/configure.ac
@@ -515,6 +515,7 @@ extensions/facebook/Makefile
 extensions/facebook/data/Makefile
 extensions/facebook/data/ui/Makefile
 extensions/file_manager/Makefile
+extensions/file_manager/data/Makefile
 extensions/file_tools/Makefile
 extensions/file_tools/data/Makefile
 extensions/file_tools/data/ui/Makefile
@@ -579,9 +580,6 @@ extensions/webalbums/data/albumthemes/ClassicClips/Makefile
 extensions/webalbums/data/albumthemes/NeatRound/Makefile
 extensions/webalbums/data/albumthemes/Wiki/Makefile
 extensions/webalbums/data/ui/Makefile
-extensions/copy_move_to_folder/Makefile
-extensions/copy_move_to_folder/data/Makefile
-extensions/copy_move_to_folder/data/ui/Makefile
 gthumb/Makefile
 gthumb/cursors/Makefile
 po/Makefile.in
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
index e863e94..024bb49 100644
--- a/extensions/Makefile.am
+++ b/extensions/Makefile.am
@@ -33,8 +33,7 @@ SUBDIRS = 			\
 	webalbums		\
 	flicker			\
 	burn_disc		\
-	desktop_background	\
-	copy_move_to_folder
+	desktop_background
 
 EXTRA_DIST = example
 
diff --git a/extensions/file_manager/Makefile.am b/extensions/file_manager/Makefile.am
index c3d8ee6..3026214 100644
--- a/extensions/file_manager/Makefile.am
+++ b/extensions/file_manager/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS = data
+
 extensiondir = $(pkglibdir)/extensions
 extension_LTLIBRARIES = libfile_manager.la
 
@@ -14,7 +16,8 @@ libfile_manager_la_SOURCES = 		\
 	gth-duplicate-task.h		\
 	gth-reorder-task.c		\
 	gth-reorder-task.h		\
-	main.c
+	main.c				\
+	preferences.h
 
 libfile_manager_la_CFLAGS = $(GTHUMB_CFLAGS) -I$(top_srcdir) -I$(top_builddir)/gthumb 
 libfile_manager_la_LDFLAGS = $(EXTENSION_LIBTOOL_FLAGS)
diff --git a/extensions/file_manager/actions.c b/extensions/file_manager/actions.c
index af5468f..4f9f6fb 100644
--- a/extensions/file_manager/actions.c
+++ b/extensions/file_manager/actions.c
@@ -26,6 +26,7 @@
 #include "gth-copy-task.h"
 #include "gth-delete-task.h"
 #include "gth-duplicate-task.h"
+#include "preferences.h"
 
 
 static void
@@ -878,3 +879,152 @@ gth_browser_activate_action_folder_delete (GtkAction  *action,
 
 	g_free (prompt);
 }
+
+
+/* Copy/Move to folder */
+
+
+typedef struct {
+	GthBrowser *browser;
+	gboolean    move;
+	GFile      *destination;
+	gboolean    view_destination;
+} CopyToFolderData;
+
+
+static void
+copy_to_folder_data_free (CopyToFolderData *data)
+{
+	g_object_unref (data->destination);
+	g_object_unref (data->browser);
+	g_free (data);
+}
+
+
+static void
+copy_complete_cb (GthTask  *task,
+		  GError   *error,
+		  gpointer  user_data)
+{
+	CopyToFolderData *data = user_data;
+
+	if ((error == NULL) && (data->view_destination))
+		gth_browser_load_location (data->browser, data->destination);
+
+	g_object_unref (task);
+	copy_to_folder_data_free (data);
+}
+
+
+static void
+copy_files_to_folder (GthBrowser *browser,
+		      gboolean    move,
+		      char       *destination_uri,
+		      gboolean    view_destination)
+{
+	GthFileData      *destination_data;
+	GthFileSource    *file_source;
+	GList            *items;
+	GList            *file_list;
+	GList            *files;
+	CopyToFolderData *data;
+	GthTask          *task;
+
+	destination_data = gth_file_data_new_for_uri (destination_uri, NULL);
+	file_source = gth_main_get_file_source (destination_data->file);
+
+	items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser)));
+	file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+	files = gth_file_data_list_to_file_list (file_list);
+
+	data = g_new0 (CopyToFolderData, 1);
+	data->browser = g_object_ref (browser);
+	data->move = move;
+	data->destination = g_file_dup (destination_data->file);
+	data->view_destination = view_destination;
+
+	task = gth_copy_task_new (file_source, destination_data, move, files);
+	g_signal_connect (task,
+			  "completed",
+			  G_CALLBACK (copy_complete_cb),
+			  data);
+	gth_browser_exec_task (browser, task, FALSE);
+
+	_g_object_list_unref (files);
+	_g_object_list_unref (file_list);
+	_gtk_tree_path_list_free (items);
+	g_object_unref (file_source);
+}
+
+
+static void
+copy_to_folder_dialog (GthBrowser *browser,
+		       gboolean    move)
+{
+	GtkWidget *dialog;
+	char      *start_uri;
+	GtkWidget *box;
+	GtkWidget *view_destination_button;
+
+	dialog = gtk_file_chooser_dialog_new (move ? _("Move To") : _("Copy To"),
+					      NULL,
+					      GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+					      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+					      (move ? _("Move") : _("Copy")), GTK_RESPONSE_ACCEPT,
+					      NULL);
+
+	start_uri = eel_gconf_get_string (PREF_FILE_MANAGER_COPY_LAST_FOLDER, get_home_uri ());
+	gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog), start_uri);
+	g_free(start_uri);
+
+	box = gtk_vbox_new (FALSE, 6);
+	gtk_container_set_border_width (GTK_CONTAINER (box), 6);
+	gtk_widget_show (box);
+
+	view_destination_button = gtk_check_button_new_with_mnemonic (_("_View the destination"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view_destination_button),
+				      eel_gconf_get_boolean (PREF_FILE_MANAGER_COPY_VIEW_DESTINATION, FALSE));
+	gtk_widget_show (view_destination_button);
+	gtk_box_pack_start (GTK_BOX (box), view_destination_button, FALSE, FALSE, 0);
+
+	gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), box, FALSE, FALSE, 0);
+
+	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
+		char *destination_uri;
+
+		destination_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+		if (destination_uri != NULL) {
+			gboolean view_destination;
+
+			/* save the options */
+
+			view_destination = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view_destination_button));
+			eel_gconf_set_boolean (PREF_FILE_MANAGER_COPY_VIEW_DESTINATION, view_destination);
+			eel_gconf_set_string (PREF_FILE_MANAGER_COPY_LAST_FOLDER, destination_uri);
+
+			/* copy / move the files */
+
+			copy_files_to_folder (browser, move, destination_uri, view_destination);
+		}
+
+		g_free (destination_uri);
+	}
+
+	gtk_widget_destroy (dialog);
+}
+
+
+void
+gth_browser_activate_action_tool_copy_to_folder (GtkAction  *action,
+						 GthBrowser *browser)
+{
+	copy_to_folder_dialog (browser, FALSE);
+}
+
+
+void
+gth_browser_activate_action_tool_move_to_folder (GtkAction  *action,
+						 GthBrowser *browser)
+{
+	copy_to_folder_dialog (browser, TRUE);
+}
diff --git a/extensions/file_manager/actions.h b/extensions/file_manager/actions.h
index 10a20e7..1518cef 100644
--- a/extensions/file_manager/actions.h
+++ b/extensions/file_manager/actions.h
@@ -42,5 +42,7 @@ DEFINE_ACTION(gth_browser_activate_action_folder_copy)
 DEFINE_ACTION(gth_browser_activate_action_folder_paste)
 DEFINE_ACTION(gth_browser_activate_action_folder_trash)
 DEFINE_ACTION(gth_browser_activate_action_folder_delete)
+DEFINE_ACTION(gth_browser_activate_action_tool_copy_to_folder)
+DEFINE_ACTION(gth_browser_activate_action_tool_move_to_folder)
 
 #endif /* ACTIONS_H */
diff --git a/extensions/file_manager/callbacks.c b/extensions/file_manager/callbacks.c
index b4cfb71..ba29b5e 100644
--- a/extensions/file_manager/callbacks.c
+++ b/extensions/file_manager/callbacks.c
@@ -40,6 +40,8 @@ static const char *fixed_ui_info =
 "  <menubar name='MenuBar'>"
 "    <menu name='Edit' action='EditMenu'>"
 "      <placeholder name='Folder_Actions_2'>"
+"        <menuitem action='Tool_CopyToFolder'/>"
+"        <menuitem action='Tool_MoveToFolder'/>"
 "        <menuitem action='Edit_Trash'/>"
 "        <menuitem action='Edit_Delete'/>"
 "      </placeholder>"
@@ -51,6 +53,10 @@ static const char *fixed_ui_info =
 "      <menuitem action='Edit_CopyFiles'/>"
 "      <menuitem action='Edit_PasteInFolder'/>"
 "    </placeholder>"
+"    <placeholder name='Folder_Actions'>"
+"      <menuitem action='Tool_CopyToFolder'/>"
+"      <menuitem action='Tool_MoveToFolder'/>"
+"    </placeholder>"
 "  </popup>"
 "  <popup name='FilePopup'>"
 "    <placeholder name='File_Actions'>"
@@ -59,6 +65,8 @@ static const char *fixed_ui_info =
 "      <menuitem action='Edit_PasteInFolder'/>"
 "    </placeholder>"
 "    <placeholder name='Folder_Actions'>"
+"      <menuitem action='Tool_CopyToFolder'/>"
+"      <menuitem action='Tool_MoveToFolder'/>"
 "      <menuitem action='Edit_Trash'/>"
 "      <menuitem action='Edit_Delete'/>"
 "    </placeholder>"
@@ -204,6 +212,14 @@ static GtkActionEntry action_entries[] = {
 	  N_("_Delete"), NULL,
 	  NULL,
 	  G_CALLBACK (gth_browser_activate_action_folder_delete) },
+	{ "Tool_CopyToFolder", NULL,
+	  N_("Copy to..."), NULL,
+	  N_("Copy the selected files to another folder"),
+	  G_CALLBACK (gth_browser_activate_action_tool_copy_to_folder) },
+	{ "Tool_MoveToFolder", NULL,
+	  N_("Move to..."), NULL,
+	  N_("Move the selected files to another folder"),
+	  G_CALLBACK (gth_browser_activate_action_tool_move_to_folder) }
 };
 
 
@@ -812,6 +828,8 @@ fm__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 	set_action_sensitive (data, "Edit_Trash", sensitive);
 	set_action_sensitive (data, "Edit_Delete", sensitive);
 	set_action_sensitive (data, "Edit_Duplicate", sensitive);
+	set_action_sensitive (data, "Tool_MoveToFolder", sensitive);
+	set_action_sensitive (data, "Tool_CopyToFolder", sensitive);
 
 	folder = gth_browser_get_folder_popup_file_data (browser);
 	set_action_sensitive (data, "Folder_Create", (folder != NULL) && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
diff --git a/extensions/copy_move_to_folder/data/Makefile.am b/extensions/file_manager/data/Makefile.am
similarity index 68%
rename from extensions/copy_move_to_folder/data/Makefile.am
rename to extensions/file_manager/data/Makefile.am
index a4ebfaf..c50ae4d 100644
--- a/extensions/copy_move_to_folder/data/Makefile.am
+++ b/extensions/file_manager/data/Makefile.am
@@ -1,12 +1,12 @@
 schemadir = @GCONF_SCHEMA_FILE_DIR@
-schema_in_files = gthumb-copy-move-to-folder.schemas.in
+schema_in_files = gthumb-file-manager.schemas.in
 schema_DATA = $(schema_in_files:.schemas.in=.schemas)
 
 @INTLTOOL_SCHEMAS_RULE@
 
 if GCONF_SCHEMAS_INSTALL
 install-data-local:
-	GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/extensions/copy_move_to_folder/data/$(schema_DATA)
+	GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/extensions/file_manager/data/$(schema_DATA)
 endif
 
 EXTRA_DIST = $(schema_in_files)
diff --git a/extensions/copy_move_to_folder/data/gthumb-copy-move-to-folder.schemas.in b/extensions/file_manager/data/gthumb-file-manager.schemas.in
similarity index 100%
rename from extensions/copy_move_to_folder/data/gthumb-copy-move-to-folder.schemas.in
rename to extensions/file_manager/data/gthumb-file-manager.schemas.in
diff --git a/extensions/copy_move_to_folder/preferences.h b/extensions/file_manager/preferences.h
similarity index 100%
rename from extensions/copy_move_to_folder/preferences.h
rename to extensions/file_manager/preferences.h



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]