diff options
author | Ettore Perazzoli <ettore@src.gnome.org> | 2001-03-08 07:48:18 +0800 |
---|---|---|
committer | Ettore Perazzoli <ettore@src.gnome.org> | 2001-03-08 07:48:18 +0800 |
commit | 3f72523dfa9fcbea86538b37130b863fc805e7ec (patch) | |
tree | 83a2be4183f16ba0e6fdc8723cb913e753c5ce3c /shell/e-folder-type-registry.c | |
parent | 82ae1edb4df0ab71f31d4d38d5fc62eaec3e3cde (diff) | |
download | gsoc2013-evolution-3f72523dfa9fcbea86538b37130b863fc805e7ec.tar.gz gsoc2013-evolution-3f72523dfa9fcbea86538b37130b863fc805e7ec.tar.zst gsoc2013-evolution-3f72523dfa9fcbea86538b37130b863fc805e7ec.zip |
Added the ability for components to specify drag/drop types, and
started some work to get the EStorageSetView to use them. Still in
progress, nothing really happens for the user yet.
svn path=/trunk/; revision=8589
Diffstat (limited to 'shell/e-folder-type-registry.c')
-rw-r--r-- | shell/e-folder-type-registry.c | 84 |
1 files changed, 78 insertions, 6 deletions
diff --git a/shell/e-folder-type-registry.c b/shell/e-folder-type-registry.c index b73deb4b06..ebd258b61e 100644 --- a/shell/e-folder-type-registry.c +++ b/shell/e-folder-type-registry.c @@ -42,6 +42,9 @@ struct _FolderType { char *name; char *icon_name; + GList *exported_dnd_types; /* char * */ + GList *accepted_dnd_types; /* char * */ + EvolutionShellComponentClient *handler; /* The icon, standard (48x48) and mini (16x16) versions. */ @@ -59,16 +62,34 @@ struct _EFolderTypeRegistryPrivate { static FolderType * folder_type_new (const char *name, - const char *icon_name) + const char *icon_name, + int num_exported_dnd_types, + const char **exported_dnd_types, + int num_accepted_dnd_types, + const char **accepted_dnd_types) { FolderType *new; char *icon_path; + int i; new = g_new (FolderType, 1); new->name = g_strdup (name); new->icon_name = g_strdup (icon_name); - new->handler = NULL; + + new->exported_dnd_types = NULL; + for (i = 0; i < num_exported_dnd_types; i++) + new->exported_dnd_types = g_list_prepend (new->exported_dnd_types, + g_strdup (exported_dnd_types[i])); + new->exported_dnd_types = g_list_reverse (new->exported_dnd_types); + + new->accepted_dnd_types = NULL; + for (i = 0; i < num_accepted_dnd_types; i++) + new->accepted_dnd_types = g_list_prepend (new->accepted_dnd_types, + g_strdup (accepted_dnd_types[i])); + new->accepted_dnd_types = g_list_reverse (new->accepted_dnd_types); + + new->handler = NULL; icon_path = e_shell_get_icon_path (icon_name, FALSE); if (icon_path == NULL) @@ -124,7 +145,11 @@ get_folder_type (EFolderTypeRegistry *folder_type_registry, static gboolean register_folder_type (EFolderTypeRegistry *folder_type_registry, const char *name, - const char *icon_name) + const char *icon_name, + int num_exported_dnd_types, + const char **exported_dnd_types, + int num_accepted_dnd_types, + const char **accepted_dnd_types) { EFolderTypeRegistryPrivate *priv; FolderType *folder_type; @@ -135,7 +160,9 @@ register_folder_type (EFolderTypeRegistry *folder_type_registry, if (get_folder_type (folder_type_registry, name) != NULL) return FALSE; - folder_type = folder_type_new (name, icon_name); + folder_type = folder_type_new (name, icon_name, + num_exported_dnd_types, exported_dnd_types, + num_accepted_dnd_types, accepted_dnd_types); g_hash_table_insert (priv->name_to_type, folder_type->name, folder_type); return TRUE; @@ -247,14 +274,20 @@ e_folder_type_registry_new (void) gboolean e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry, const char *type_name, - const char *icon_name) + const char *icon_name, + int num_exported_dnd_types, + const char **exported_dnd_types, + int num_accepted_dnd_types, + const char **accepted_dnd_types) { g_return_val_if_fail (folder_type_registry != NULL, FALSE); g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE); g_return_val_if_fail (type_name != NULL, FALSE); g_return_val_if_fail (icon_name != NULL, FALSE); - return register_folder_type (folder_type_registry, type_name, icon_name); + return register_folder_type (folder_type_registry, type_name, icon_name, + num_exported_dnd_types, exported_dnd_types, + num_accepted_dnd_types, accepted_dnd_types); } gboolean @@ -363,5 +396,44 @@ e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_re } +GList * +e_folder_type_registry_get_exported_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry, + const char *type_name) +{ + const FolderType *folder_type; + + g_return_val_if_fail (folder_type_registry != NULL, NULL); + g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); + g_return_val_if_fail (type_name != NULL, NULL); + + folder_type = get_folder_type (folder_type_registry, type_name); + if (folder_type == NULL) { + g_warning ("e_folder_type_registry_get_exported_dnd_types_for_type() -- Unknown type `%s'", type_name); + return NULL; + } + + return folder_type->exported_dnd_types; +} + +GList * +e_folder_type_registry_get_accepted_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry, + const char *type_name) +{ + const FolderType *folder_type; + + g_return_val_if_fail (folder_type_registry != NULL, NULL); + g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); + g_return_val_if_fail (type_name != NULL, NULL); + + folder_type = get_folder_type (folder_type_registry, type_name); + if (folder_type == NULL) { + g_warning ("e_folder_type_registry_get_accepted_dnd_types_for_type() -- Unknown type `%s'", type_name); + return NULL; + } + + return folder_type->accepted_dnd_types; +} + + E_MAKE_TYPE (e_folder_type_registry, "EFolderTypeRegistry", EFolderTypeRegistry, class_init, init, PARENT_TYPE) |