aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>2001-03-22 21:41:01 +0800
committerEttore Perazzoli <ettore@src.gnome.org>2001-03-22 21:41:01 +0800
commita2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b (patch)
tree7674d44bf7424c4342f5e52ea0e89a738f893518
parent03765ef0bb21fb7d98af1dd8d72a76e683a26a2f (diff)
downloadgsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.tar
gsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.tar.gz
gsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.tar.bz2
gsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.tar.lz
gsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.tar.xz
gsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.tar.zst
gsoc2013-evolution-a2ae2d718be2cf4803ae0564c0cc539ecdaa4f6b.zip
Changed the EStorageSet API to have a single `xfer()' method instead
of separate copy/move (as in the IDL). Actually implement the `xfer()' operation for the case when source and destination are in the same storage. Fix the `EStorageSet' API by having a special `EStorageSetResultCallback' callback type for it (instead of using `EStorageResultCallback', which would never work). Also, removed some unused variables in `e-storage-set-view.c'. svn path=/trunk/; revision=8895
-rw-r--r--shell/ChangeLog29
-rw-r--r--shell/Evolution-ShellComponent.idl2
-rw-r--r--shell/e-storage-set-view.c32
-rw-r--r--shell/e-storage-set.c160
-rw-r--r--shell/e-storage-set.h39
5 files changed, 164 insertions, 98 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 978a6c211e..c99b59c08a 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,5 +1,34 @@
2001-03-22 Ettore Perazzoli <ettore@ximian.com>
+ * e-storage-set-view.c: Removed some unused static variables.
+ (set_evolution_path_selection): Removed unused variable
+ `evolution_path'.
+
+ * e-storage-set.c (e_storage_set_async_xfer_folder): Get an
+ `EStorageSetResultCallback', instead of an
+ `EStorageResultCallback'.
+ (e_storage_set_async_remove_folder): Likewise.
+ (e_storage_set_async_create_folder): Likewise.
+ (storage_callback_converter): New callback to convert from the
+ EStorageResultCallback to the EStorageSetResultCallback.
+
+ * e-storage-set.h: New typedef `EStorageSetResultCallback'.
+
+ * Evolution-ShellComponent.idl: Renamed `copyFolderAsync' into
+ `xferFolderAsync' for consistency.
+
+ * e-storage-set-view.c (tree_drag_data_received): Updated to use
+ `e_storage_set_async_xfer_folder()' instead of
+ `e_storage_set_async_move_folder()' or
+ `e_storage_set_async_copy_folder()'.
+ (folder_xfer_callback): New, callback for the xfer function.
+
+ * e-storage-set.c (e_storage_set_async_move_folder): Removed.
+ (e_storage_set_async_copy_folder): Removed.
+ (e_storage_set_async_xfer_folder): New.
+
+2001-03-22 Ettore Perazzoli <ettore@ximian.com>
+
* e-storage.c (e_storage_async_xfer_folder): New.
(impl_async_xfer_folder): New, default implementation for the
`async_xfer_folder' method.
diff --git a/shell/Evolution-ShellComponent.idl b/shell/Evolution-ShellComponent.idl
index bd4bb9c48c..29776b49d0 100644
--- a/shell/Evolution-ShellComponent.idl
+++ b/shell/Evolution-ShellComponent.idl
@@ -60,7 +60,7 @@ module Evolution {
in string physical_uri)
raises (Busy);
- void copyFolderAsync (in ShellComponentListener listener,
+ void xferFolderAsync (in ShellComponentListener listener,
in string source_physical_uri,
in string destination_physical_uri,
in boolean remove_source)
diff --git a/shell/e-storage-set-view.c b/shell/e-storage-set-view.c
index ba5172a73a..b8c59b956d 100644
--- a/shell/e-storage-set-view.c
+++ b/shell/e-storage-set-view.c
@@ -130,20 +130,6 @@ typedef enum _DndTargetType DndTargetType;
#define URI_LIST_TYPE "text/uri-list"
#define E_SHORTCUT_TYPE "E-SHORTCUT"
-static GtkTargetEntry source_drag_types [] = {
- { URI_LIST_TYPE, 0, DND_TARGET_TYPE_URI_LIST },
- { E_SHORTCUT_TYPE, 0, DND_TARGET_TYPE_E_SHORTCUT }
-};
-static const int num_source_drag_types = sizeof (source_drag_types) / sizeof (source_drag_types[0]);
-
-static GtkTargetEntry destination_drag_types [] = {
- { URI_LIST_TYPE, 0, DND_TARGET_TYPE_URI_LIST },
- { E_SHORTCUT_TYPE, 0, DND_TARGET_TYPE_E_SHORTCUT }
-};
-static const int num_destination_drag_types = sizeof (destination_drag_types) / sizeof (destination_drag_types[0]);
-
-static GtkTargetList *target_list;
-
/* Sorting callbacks. */
@@ -613,7 +599,6 @@ set_evolution_path_selection (EStorageSetView *storage_set_view,
GtkSelectionData *selection_data)
{
EStorageSetViewPrivate *priv;
- const char *evolution_path;
g_assert (storage_set_view != NULL);
g_assert (selection_data != NULL);
@@ -625,6 +610,17 @@ set_evolution_path_selection (EStorageSetView *storage_set_view,
}
+/* Callbacks for folder operations. */
+
+static void
+folder_xfer_callback (EStorageSet *storage_set,
+ EStorageResult result,
+ void *data)
+{
+ g_print ("Folder Xfer result -- %s\n", e_storage_result_to_string (result));
+}
+
+
/* Folder context menu. */
/* FIXME: This should be moved somewhere else, so that also the shortcut code
can share it. */
@@ -1188,11 +1184,13 @@ tree_drag_data_received (ETree *etree,
switch (context->action) {
case GDK_ACTION_MOVE:
g_print ("EStorageSetView: Moving from `%s' to `%s'\n", source_path, destination_path);
- e_storage_set_async_move_folder (priv->storage_set, source_path, destination_path, NULL, NULL);
+ e_storage_set_async_xfer_folder (priv->storage_set, source_path, destination_path, TRUE,
+ folder_xfer_callback, NULL);
break;
case GDK_ACTION_COPY:
g_print ("EStorageSetView: Copying from `%s' to `%s'\n", source_path, destination_path);
- e_storage_set_async_copy_folder (priv->storage_set, source_path, destination_path, NULL, NULL);
+ e_storage_set_async_xfer_folder (priv->storage_set, source_path, destination_path, FALSE,
+ folder_xfer_callback, NULL);
break;
default:
g_warning ("EStorageSetView: Don't know action %d\n", context->action);
diff --git a/shell/e-storage-set.c b/shell/e-storage-set.c
index 333ec39c99..34a40edc03 100644
--- a/shell/e-storage-set.c
+++ b/shell/e-storage-set.c
@@ -100,6 +100,48 @@ name_to_named_storage_foreach_destroy (void *key,
}
+/* "Callback converter", from `EStorageResultCallback' to
+ `EStorageSetResultCallback'. */
+
+struct _StorageCallbackConverterData {
+ EStorageSet *storage_set;
+ EStorageSetResultCallback storage_set_result_callback;
+ void *data;
+};
+typedef struct _StorageCallbackConverterData StorageCallbackConverterData;
+
+static StorageCallbackConverterData *
+storage_callback_converter_data_new (EStorageSet *storage_set,
+ EStorageSetResultCallback callback,
+ void *data)
+{
+ StorageCallbackConverterData *new;
+
+ new = g_new (StorageCallbackConverterData, 1);
+ new->storage_set = storage_set;
+ new->storage_set_result_callback = callback;
+ new->data = data;
+
+ return new;
+}
+
+static void
+storage_callback_converter (EStorage *storage,
+ EStorageResult result,
+ void *data)
+{
+ StorageCallbackConverterData *converter_data;
+
+ converter_data = (StorageCallbackConverterData *) data;
+
+ (* converter_data->storage_set_result_callback) (converter_data->storage_set,
+ result,
+ converter_data->data);
+
+ g_free (converter_data);
+}
+
+
/* Handling for signals coming from the EStorages. */
static char *
@@ -500,15 +542,16 @@ e_storage_set_new_view (EStorageSet *storage_set)
void
-e_storage_set_async_create_folder (EStorageSet *storage_set,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
+e_storage_set_async_create_folder (EStorageSet *storage_set,
+ const char *path,
+ const char *type,
+ const char *description,
+ EStorageSetResultCallback callback,
+ void *data)
{
EStorage *storage;
const char *subpath;
+ StorageCallbackConverterData *converter_data;
g_return_if_fail (storage_set != NULL);
g_return_if_fail (E_IS_STORAGE_SET (storage_set));
@@ -520,17 +563,21 @@ e_storage_set_async_create_folder (EStorageSet *storage_set,
storage = get_storage_for_path (storage_set, path, &subpath);
- e_storage_async_create_folder (storage, subpath, type, description, callback, data);
+ converter_data = storage_callback_converter_data_new (storage_set, callback, data);
+
+ e_storage_async_create_folder (storage, subpath, type, description,
+ storage_callback_converter, converter_data);
}
void
-e_storage_set_async_remove_folder (EStorageSet *storage_set,
- const char *path,
- EStorageResultCallback callback,
- void *data)
+e_storage_set_async_remove_folder (EStorageSet *storage_set,
+ const char *path,
+ EStorageSetResultCallback callback,
+ void *data)
{
EStorage *storage;
const char *subpath;
+ StorageCallbackConverterData *converter_data;
g_return_if_fail (storage_set != NULL);
g_return_if_fail (E_IS_STORAGE_SET (storage_set));
@@ -540,7 +587,49 @@ e_storage_set_async_remove_folder (EStorageSet *storage_set,
storage = get_storage_for_path (storage_set, path, &subpath);
- e_storage_async_remove_folder (storage, path, callback, data);
+ converter_data = storage_callback_converter_data_new (storage_set, callback, data);
+
+ e_storage_async_remove_folder (storage, path,
+ storage_callback_converter, converter_data);
+}
+
+void
+e_storage_set_async_xfer_folder (EStorageSet *storage_set,
+ const char *source_path,
+ const char *destination_path,
+ gboolean remove_source,
+ EStorageSetResultCallback callback,
+ void *data)
+{
+ EStorage *source_storage;
+ EStorage *destination_storage;
+ const char *source_subpath;
+ const char *destination_subpath;
+ StorageCallbackConverterData *converter_data;
+
+ g_return_if_fail (storage_set != NULL);
+ g_return_if_fail (E_IS_STORAGE_SET (storage_set));
+ g_return_if_fail (source_path != NULL);
+ g_return_if_fail (g_path_is_absolute (source_path));
+ g_return_if_fail (destination_path != NULL);
+ g_return_if_fail (g_path_is_absolute (destination_path));
+ g_return_if_fail (callback != NULL);
+
+ source_storage = get_storage_for_path (storage_set, source_path, &source_subpath);
+ destination_storage = get_storage_for_path (storage_set, destination_path, &destination_subpath);
+
+ if (source_storage != destination_storage) {
+ g_warning ("e_storage_set_async_xfer_folder(): "
+ "Attempt to xfer folders between different storages -- not supported yet.");
+ (* callback) (storage_set, E_STORAGE_UNSUPPORTEDOPERATION, data);
+ return;
+ }
+
+ converter_data = storage_callback_converter_data_new (storage_set, callback, data);
+
+ e_storage_async_xfer_folder (source_storage,
+ source_subpath, destination_subpath, remove_source,
+ storage_callback_converter, converter_data);
}
@@ -602,51 +691,4 @@ e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set,
}
-/**
- * e_storage_set_async_copy_folder:
- * @storage_set:
- * @source_path:
- * @destination_path:
- * @callback:
- * @data:
- *
- * Copy a folder from @source_path to @destination_path.
- **/
-void
-e_storage_set_async_copy_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (source_path != NULL);
- g_return_if_fail (destination_path != NULL);
-}
-
-/**
- * e_storage_set_async_move_folder:
- * @storage_set:
- * @source_path:
- * @destination_path:
- * @callback:
- * @data:
- *
- * Move a folder from @source_path to @destination_path.
- **/
-void
-e_storage_set_async_move_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (source_path != NULL);
- g_return_if_fail (destination_path != NULL);
-}
-
-
E_MAKE_TYPE (e_storage_set, "EStorageSet", EStorageSet, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage-set.h b/shell/e-storage-set.h
index 66e2ce8ab0..8e5d8e379e 100644
--- a/shell/e-storage-set.h
+++ b/shell/e-storage-set.h
@@ -45,6 +45,8 @@ typedef struct _EStorageSet EStorageSet;
typedef struct _EStorageSetPrivate EStorageSetPrivate;
typedef struct _EStorageSetClass EStorageSetClass;
+typedef void (* EStorageSetResultCallback) (EStorageSet *storage_set, EStorageResult result, void *data);
+
struct _EStorageSet {
GtkObject parent;
@@ -81,27 +83,22 @@ EFolder *e_storage_set_get_folder (EStorageSet *storage
const char *path);
GtkWidget *e_storage_set_new_view (EStorageSet *storage_set);
-void e_storage_set_async_create_folder (EStorageSet *storage_set,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data);
-void e_storage_set_async_remove_folder (EStorageSet *storage_set,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-
-void e_storage_set_async_copy_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- EStorageResultCallback callback,
- void *data);
-void e_storage_set_async_move_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- EStorageResultCallback callback,
- void *data);
+void e_storage_set_async_create_folder (EStorageSet *storage_set,
+ const char *path,
+ const char *type,
+ const char *description,
+ EStorageSetResultCallback callback,
+ void *data);
+void e_storage_set_async_remove_folder (EStorageSet *storage_set,
+ const char *path,
+ EStorageSetResultCallback callback,
+ void *data);
+void e_storage_set_async_xfer_folder (EStorageSet *storage_set,
+ const char *source_path,
+ const char *destination_path,
+ gboolean remove_source,
+ EStorageSetResultCallback callback,
+ void *data);
EFolderTypeRegistry *e_storage_set_get_folder_type_registry (EStorageSet *storage_set);