[gthumb: 3/24] copy_move_to_folder: added copy complete dialog asking if the user wishes to open the destination



commit 93576f2d5aae4bb35703834db8b5a0bb5980dd63
Author: Marlodavampire <vworker.com>
Date:   Wed Nov 10 14:58:04 2010 +1100

    copy_move_to_folder: added copy complete dialog asking if the user wishes to open the destination

 configure.ac                                       |    2 +
 extensions/copy_move_to_folder/Makefile.am         |    4 +
 extensions/copy_move_to_folder/actions.c           |   20 ++--
 extensions/copy_move_to_folder/data/Makefile.am    |    3 +
 extensions/copy_move_to_folder/data/ui/Makefile.am |    8 ++
 .../data/ui/copy-move-to-folder-copy-complete.ui   |   80 +++++++++++++
 .../data/ui/copy-move-to-folder-move-complete.ui   |   80 +++++++++++++
 extensions/copy_move_to_folder/dlg-copy-complete.c |  123 ++++++++++++++++++++
 extensions/copy_move_to_folder/dlg-copy-complete.h |   31 +++++
 extensions/copy_move_to_folder/preferences.h       |    2 +
 10 files changed, 341 insertions(+), 12 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index f026512..b0009c4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -580,6 +580,8 @@ 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/copy_move_to_folder/Makefile.am b/extensions/copy_move_to_folder/Makefile.am
index 6e3668f..5166a93 100644
--- a/extensions/copy_move_to_folder/Makefile.am
+++ b/extensions/copy_move_to_folder/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS = data
+
 extensiondir = $(pkglibdir)/extensions
 extension_LTLIBRARIES = libcopy_move_to_folder.la
 
@@ -7,6 +9,8 @@ libcopy_move_to_folder_la_SOURCES = \
 	callbacks.c \
 	callbacks.h \
 	preferences.h \
+	dlg-copy-complete.c \
+	dlg-copy-complete.h \
 	main.c
 
 libcopy_move_to_folder_la_CFLAGS = $(GTHUMB_CFLAGS) -I$(top_srcdir) -I$(top_builddir)/gthumb
diff --git a/extensions/copy_move_to_folder/actions.c b/extensions/copy_move_to_folder/actions.c
index 1494caf..7b7fb0b 100644
--- a/extensions/copy_move_to_folder/actions.c
+++ b/extensions/copy_move_to_folder/actions.c
@@ -24,10 +24,12 @@
 #include <glib/gi18n.h>
 #include <gthumb.h>
 #include "preferences.h"
+#include "dlg-copy-complete.h"
 #include <extensions/file_manager/gth-copy-task.h>
 
 struct _CopyMoveToFolderPrivate{
-	GthFileData   *destination;
+	GFile   *destination;
+	gboolean move;
 	GthBrowser   *browser;
 };
 
@@ -61,18 +63,13 @@ copy_complete_cb(GthTask    *task,
 	/* TODO */
 	/* what should we do on error here? */
 
-	GthBrowser *browser;
-	GthFileData *destination;
 	CopyMoveToFolderPrivate *priv;
-
 	priv = data;
-	browser = priv->browser;
-	destination = priv->destination;
 
-	gth_browser_load_location(browser, destination->file);
+	dlg_copy_complete(priv->browser, priv->move, priv->destination);
 
-	g_object_unref(browser);
-	g_object_unref(destination);
+	g_object_unref(priv->browser);
+	g_object_unref(priv->destination);
 	g_free(priv);
 
 }
@@ -119,10 +116,10 @@ copy_move_to_folder_copy_files(GthBrowser *browser,
 	// setup copy completed signal
 	CopyMoveToFolderPrivate *data;
 	data = g_new0(CopyMoveToFolderPrivate, 1);
-	data->destination = destination_path_fd;
+	data->destination = g_file_dup(destination_path_fd->file);
 	data->browser = browser;
+	data->move = move;
 	g_object_ref(browser);
-	g_object_ref(destination_path_fd);
 	g_signal_connect (task,
 			  "completed",
 			  G_CALLBACK (copy_complete_cb),
@@ -130,7 +127,6 @@ copy_move_to_folder_copy_files(GthBrowser *browser,
 	gth_browser_exec_task (browser, task, FALSE);
 
 	//free data
-	g_object_unref(destination_path_fd);
 	g_object_unref(file_source);
 	_g_object_list_unref (file_list);
 	_gtk_tree_path_list_free (items);
diff --git a/extensions/copy_move_to_folder/data/Makefile.am b/extensions/copy_move_to_folder/data/Makefile.am
new file mode 100644
index 0000000..c1713cf
--- /dev/null
+++ b/extensions/copy_move_to_folder/data/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = ui
+
+-include $(top_srcdir)/git.mk
diff --git a/extensions/copy_move_to_folder/data/ui/Makefile.am b/extensions/copy_move_to_folder/data/ui/Makefile.am
new file mode 100644
index 0000000..e21643f
--- /dev/null
+++ b/extensions/copy_move_to_folder/data/ui/Makefile.am
@@ -0,0 +1,8 @@
+uidir = $(pkgdatadir)/ui
+ui_DATA = 					\
+	copy-move-to-folder-copy-complete.ui	\
+	copy-move-to-folder-move-complete.ui
+
+EXTRA_DIST = $(ui_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/extensions/copy_move_to_folder/data/ui/copy-move-to-folder-copy-complete.ui b/extensions/copy_move_to_folder/data/ui/copy-move-to-folder-copy-complete.ui
new file mode 100644
index 0000000..04b91ff
--- /dev/null
+++ b/extensions/copy_move_to_folder/data/ui/copy-move-to-folder-copy-complete.ui
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkMessageDialog" id="completed_messagedialog">
+    <property name="border_width">5</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="type_hint">normal</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="text" translatable="yes">File(s) successfully copied.</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkCheckButton" id="always_button">
+            <property name="label" translatable="yes">Always preform this action</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">center</property>
+            <child>
+              <object class="GtkButton" id="open_button">
+                <property name="label" translatable="yes">_Open in the Browser</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="image">icon_image</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="1">open_button</action-widget>
+      <action-widget response="-7">close_button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkImage" id="icon_image">
+    <property name="visible">True</property>
+    <property name="yalign">0</property>
+    <property name="stock">gtk-jump-to</property>
+  </object>
+</interface>
diff --git a/extensions/copy_move_to_folder/data/ui/copy-move-to-folder-move-complete.ui b/extensions/copy_move_to_folder/data/ui/copy-move-to-folder-move-complete.ui
new file mode 100644
index 0000000..371bd5f
--- /dev/null
+++ b/extensions/copy_move_to_folder/data/ui/copy-move-to-folder-move-complete.ui
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkMessageDialog" id="completed_messagedialog">
+    <property name="border_width">5</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="type_hint">normal</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="text" translatable="yes">File(s) successfully moved.</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkCheckButton" id="always_button">
+            <property name="label" translatable="yes">Always preform this action</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">center</property>
+            <child>
+              <object class="GtkButton" id="open_button">
+                <property name="label" translatable="yes">_Open in the Browser</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="image">icon_image</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="1">open_button</action-widget>
+      <action-widget response="-7">close_button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkImage" id="icon_image">
+    <property name="visible">True</property>
+    <property name="yalign">0</property>
+    <property name="stock">gtk-jump-to</property>
+  </object>
+</interface>
diff --git a/extensions/copy_move_to_folder/dlg-copy-complete.c b/extensions/copy_move_to_folder/dlg-copy-complete.c
new file mode 100644
index 0000000..9593558
--- /dev/null
+++ b/extensions/copy_move_to_folder/dlg-copy-complete.c
@@ -0,0 +1,123 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ *  GThumb
+ *
+ *  Copyright (C) 2001-2010 The Free Software Foundation, Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <gtk/gtk.h>
+#include <gthumb.h>
+#include "preferences.h"
+
+#define GET_WIDGET(x) (_gtk_builder_get_widget (data->builder, (x)))
+#define IS_ACTIVE(x) (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (x)))
+
+
+typedef struct {
+	GthBrowser *browser;
+	GtkBuilder *builder;
+	GtkWidget  *dialog;
+	GFile      *location;
+} DialogData;
+
+
+static void
+dialog_destroy_cb (GtkWidget  *widget,
+		   DialogData *data)
+{
+	g_object_unref (data->builder);
+	g_object_unref (data->location);
+	g_object_unref (data->browser);
+	g_free (data);
+}
+
+static void
+close_button_clicked (GtkWidget  *button,
+		   DialogData *data)
+{
+	if (gtk_toggle_button_get_active((GtkToggleButton *)GET_WIDGET ("always_button")))
+	{
+		eel_gconf_set_boolean (PREF_COPY_MOVE_TO_FOLDER_SHOW_DIALOG, FALSE);
+		eel_gconf_set_boolean (PREF_COPY_MOVE_TO_FOLDER_ALWAYS_OPEN, FALSE);
+	}
+	gtk_widget_destroy (data->dialog);
+}
+
+static void
+open_button_clicked (GtkWidget  *button,
+		   DialogData *data)
+{
+	gth_browser_load_location(data->browser, data->location);
+
+	if (gtk_toggle_button_get_active((GtkToggleButton *)GET_WIDGET ("always_button")))
+	{
+		eel_gconf_set_boolean (PREF_COPY_MOVE_TO_FOLDER_SHOW_DIALOG, FALSE);
+		eel_gconf_set_boolean (PREF_COPY_MOVE_TO_FOLDER_ALWAYS_OPEN, TRUE);
+	}
+
+	gtk_widget_destroy (data->dialog);
+}
+
+
+void
+dlg_copy_complete (GthBrowser *browser,
+			gboolean move,
+			GFile *location)
+{
+	DialogData  *data;
+
+	if(eel_gconf_get_boolean (PREF_COPY_MOVE_TO_FOLDER_SHOW_DIALOG, TRUE))
+	{
+		data = g_new0 (DialogData, 1);
+		data->location = g_file_dup(location);
+		data->browser = browser;
+		g_object_ref(browser);
+		if(move)
+			data->builder = _gtk_builder_new_from_file ("copy-move-to-folder-move-complete.ui", "copy_move_to_folder_move_complete");
+		else
+			data->builder = _gtk_builder_new_from_file ("copy-move-to-folder-copy-complete.ui", "copy_move_to_folder_copy_complete");
+		data->dialog = GET_WIDGET ("completed_messagedialog");
+
+		g_signal_connect (G_OBJECT (data->dialog),
+				  "destroy",
+				  G_CALLBACK (dialog_destroy_cb),
+				  data);
+
+		g_signal_connect (GET_WIDGET ("close_button"),
+				  "clicked",
+				  G_CALLBACK (close_button_clicked),
+				  data);
+
+		g_signal_connect (GET_WIDGET ("open_button"),
+				  "clicked",
+				  G_CALLBACK (open_button_clicked),
+				  data);
+
+		gtk_window_set_transient_for (GTK_WINDOW (data->dialog),
+					      GTK_WINDOW (browser));
+		gtk_window_set_modal (GTK_WINDOW (data->dialog), FALSE);
+		gtk_widget_show (data->dialog);
+	}
+	else
+	{
+		if(eel_gconf_get_boolean (PREF_COPY_MOVE_TO_FOLDER_ALWAYS_OPEN, FALSE))
+		{
+			gth_browser_load_location(browser, location);
+		}
+	}
+}
diff --git a/extensions/copy_move_to_folder/dlg-copy-complete.h b/extensions/copy_move_to_folder/dlg-copy-complete.h
new file mode 100644
index 0000000..f76718a
--- /dev/null
+++ b/extensions/copy_move_to_folder/dlg-copy-complete.h
@@ -0,0 +1,31 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ *  GThumb
+ *
+ *  Copyright (C) 2001-2010 The Free Software Foundation, Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef DLG_COPY_COMPLETE_H
+#define DLG_COPY_COMPLETE_H
+
+#include <gthumb.h>
+
+void dlg_copy_complete (GthBrowser *browser,
+			gboolean move,
+			GFile *location);
+
+#endif /* DLG_COPY_COMPLETE_H */
diff --git a/extensions/copy_move_to_folder/preferences.h b/extensions/copy_move_to_folder/preferences.h
index f04a406..47e2e99 100644
--- a/extensions/copy_move_to_folder/preferences.h
+++ b/extensions/copy_move_to_folder/preferences.h
@@ -26,6 +26,8 @@ G_BEGIN_DECLS
 
 #define  PREF_COPY_MOVE_TO_FOLDER_COPY_URI      "/apps/gthumb/ext/copy_move_to_folder/copy_uri"
 #define  PREF_COPY_MOVE_TO_FOLDER_MOVE_URI      "/apps/gthumb/ext/copy_move_to_folder/move_uri"
+#define  PREF_COPY_MOVE_TO_FOLDER_SHOW_DIALOG   "/apps/gthumb/ext/copy_move_to_folder/show_dialog"
+#define  PREF_COPY_MOVE_TO_FOLDER_ALWAYS_OPEN   "/apps/gthumb/ext/copy_move_to_folder/always_open"
 
 G_END_DECLS
 



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