aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-folder-tree.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2002-03-08 02:26:57 +0800
committerDan Winship <danw@src.gnome.org>2002-03-08 02:26:57 +0800
commit7065f6dba35467cb77519e0b9144659581746289 (patch)
treeb6758e28708d8b973d920810495b847e106aea6a /shell/e-folder-tree.c
parent654b9618c8bc54e248a7cd5c36bed6e116bfe6a3 (diff)
downloadgsoc2013-evolution-7065f6dba35467cb77519e0b9144659581746289.tar.gz
gsoc2013-evolution-7065f6dba35467cb77519e0b9144659581746289.tar.zst
gsoc2013-evolution-7065f6dba35467cb77519e0b9144659581746289.zip
Make storages-with-toplevel-views less of a hack.
* e-folder-tree.c (e_folder_tree_add): Allow the caller to "add" a root folder, if the existing root folder has no children. (e_folder_tree_new): Use e_folder_tree_add to create the root folder, since it can do that now. * e-storage.c: (e_storage_construct): Replace toplevel_node_uri and toplevel_node_type args with root_folder. (e_storage_new): Likewise. (*): Remove toplevel uri/type stuff everywhere. Also remove display_name since now we will use the name of the root folder for that. * evolution-storage.c: Remove toplevel uri/type stuff everywhere. * e-local-storage.c (construct): Pass root_folder to e_storage_construct instead of toplevel uri/type. Also, evolution_storage_new no longer takes toplevel uri/type. * e-corba-storage.c (e_corba_storage_construct): Out with toplevel uri/type, in with root_folder. (e_corba_storage_new): Remove toplevel uri/type. * e-shell.c (setup_local_storage): Create a top-level folder of type "summary" for the Summary storage. * e-storage-set-view.c (set_e_shortcut_selection): Remove special-case for storages. (etree_icon_at): Remove special case for figuring out storage icons (but leave the code that makes the icon disappear once the storage is opened). (etree_value_at): Remove special case for storage names. (But still make storages always bold.) Remove unused special-case code for Summary. * e-shortcuts.c (load_shortcuts): Remove special case for storages, reorganize a bit. * e-shortcuts-view.c (get_shortcut_info): Remove special case for storages. * e-shell-view.c (update_for_current_uri): Remove special case for storages. (socket_destroy_cb): Likewise. (get_type_for_storage): No longer needed. (get_view_for_uri): No longer needs to special-case storages (but add a special case for folders of type "noselect", to make them unselectable like storages-without-toplevel-views used to be). * e-storage-set.c (get_storage_for_path): If passed "/foo", return "/" as subpath_return so e_storage_set_get_folder will DTRT in the NWO. * Evolution-Storage.idl (addStorage): Remove the toplevel_node_uri and toplevel_node_type arguments. * e-corba-storage-registry.c (impl_StorageRegistry_addStorage): Likewise. svn path=/trunk/; revision=15965
Diffstat (limited to 'shell/e-folder-tree.c')
-rw-r--r--shell/e-folder-tree.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/shell/e-folder-tree.c b/shell/e-folder-tree.c
index 0368b4b23f..d89476df2e 100644
--- a/shell/e-folder-tree.c
+++ b/shell/e-folder-tree.c
@@ -177,7 +177,6 @@ e_folder_tree_new (EFolderDestroyNotify folder_destroy_notify,
void *closure)
{
EFolderTree *new;
- Folder *root_folder;
new = g_new (EFolderTree, 1);
@@ -187,9 +186,7 @@ e_folder_tree_new (EFolderDestroyNotify folder_destroy_notify,
new->path_to_folder = g_hash_table_new (g_str_hash, g_str_equal);
new->data_to_path = g_hash_table_new (g_direct_hash, g_direct_equal);
- root_folder = folder_new (G_DIR_SEPARATOR_S, NULL);
- g_hash_table_insert (new->path_to_folder, root_folder->path, root_folder);
- g_hash_table_insert (new->data_to_path, root_folder->data, root_folder->path);
+ e_folder_tree_add (new, G_DIR_SEPARATOR_S, NULL);
return new;
}
@@ -240,6 +237,23 @@ e_folder_tree_add (EFolderTree *folder_tree,
g_return_val_if_fail (path != NULL, FALSE);
g_return_val_if_fail (g_path_is_absolute (path), FALSE);
+ /* Can only "add" a new root folder if the tree is empty */
+ if (! strcmp (path, G_DIR_SEPARATOR_S)) {
+ folder = g_hash_table_lookup (folder_tree->path_to_folder, path);
+ if (folder) {
+ if (folder->subfolders) {
+ g_warning ("e_folder_tree_add() -- Trying to change root folder after adding children");
+ return FALSE;
+ }
+ remove_folder (folder_tree, folder);
+ }
+
+ folder = folder_new (path, data);
+ g_hash_table_insert (folder_tree->path_to_folder, folder->path, folder);
+ g_hash_table_insert (folder_tree->data_to_path, data, folder->path);
+ return TRUE;
+ }
+
parent_path = get_parent_path (path);
parent_folder = g_hash_table_lookup (folder_tree->path_to_folder, parent_path);