diff options
author | Ettore Perazzoli <ettore@src.gnome.org> | 2001-08-08 07:16:30 +0800 |
---|---|---|
committer | Ettore Perazzoli <ettore@src.gnome.org> | 2001-08-08 07:16:30 +0800 |
commit | a3075377cc82352d45107303b3cde5a22b0cfb44 (patch) | |
tree | b92d02f3909262bbfb3a114df75b4f135ef0dd87 /shell | |
parent | 8099103dbdf39c21ba0de4c247971cd543494c80 (diff) | |
download | gsoc2013-evolution-a3075377cc82352d45107303b3cde5a22b0cfb44.tar.gz gsoc2013-evolution-a3075377cc82352d45107303b3cde5a22b0cfb44.tar.zst gsoc2013-evolution-a3075377cc82352d45107303b3cde5a22b0cfb44.zip |
If the shortcut points to some folder in the storage set, get the type
* e-shortcuts.c (load_shortcuts): If the shortcut points to some
folder in the storage set, get the type from it.
* e-storage-set.c (signal_new_folder_for_all_folders_under_paths):
New helper function.
(signal_new_folder_for_all_folders_in_storage): New helper
function.
(e_storage_set_add_storage): Call the latter to emit a
"new_folder" signal for all the folders contained in the newly
added storage.
svn path=/trunk/; revision=11750
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ChangeLog | 13 | ||||
-rw-r--r-- | shell/e-shortcuts.c | 12 | ||||
-rw-r--r-- | shell/e-storage-set.c | 43 |
3 files changed, 65 insertions, 3 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog index 49221e7fa3..bbbc7877ec 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,5 +1,18 @@ 2001-08-07 Ettore Perazzoli <ettore@ximian.com> + * e-shortcuts.c (load_shortcuts): If the shortcut points to some + folder in the storage set, get the type from it. + + * e-storage-set.c (signal_new_folder_for_all_folders_under_paths): + New helper function. + (signal_new_folder_for_all_folders_in_storage): New helper + function. + (e_storage_set_add_storage): Call the latter to emit a + "new_folder" signal for all the folders contained in the newly + added storage. + +2001-08-07 Ettore Perazzoli <ettore@ximian.com> + [This should fix #5407, application crash on re-opening.] * e-shell.c (e_shell_construct): Call diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c index 04899064f2..a6a35d49de 100644 --- a/shell/e-shortcuts.c +++ b/shell/e-shortcuts.c @@ -331,8 +331,18 @@ load_shortcuts (EShortcuts *shortcuts, name = xmlGetProp (q, "name"); type = xmlGetProp (q, "type"); - shortcut_item = shortcut_item_new (uri, name, 0, type); + if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) { + EFolder *folder; + + folder = e_storage_set_get_folder (priv->storage_set, uri + E_SHELL_URI_PREFIX_LEN); + if (folder != NULL) { + if (type != NULL) + xmlFree (type); + type = g_strdup (e_folder_get_type_string (folder)); + } + } + shortcut_item = shortcut_item_new (uri, name, 0, type); shortcut_group->shortcuts = g_slist_prepend (shortcut_group->shortcuts, shortcut_item); diff --git a/shell/e-storage-set.c b/shell/e-storage-set.c index e5715dde11..467ef7c98c 100644 --- a/shell/e-storage-set.c +++ b/shell/e-storage-set.c @@ -241,6 +241,45 @@ get_storage_for_path (EStorageSet *storage_set, return storage; } +static void +signal_new_folder_for_all_folders_under_paths (EStorageSet *storage_set, + EStorage *storage, + GList *path_list) +{ + GList *p; + + for (p = path_list; p != NULL; p = p->next) { + GList *sub_path_list; + const char *path; + char *path_with_storage; + + path = (const char *) p->data; + + path_with_storage = g_strconcat (G_DIR_SEPARATOR_S, e_storage_get_name (storage), path, NULL); + gtk_signal_emit (GTK_OBJECT (storage_set), signals[NEW_FOLDER], path_with_storage); + g_free (path_with_storage); + + sub_path_list = e_storage_get_subfolder_paths (storage, path); + + signal_new_folder_for_all_folders_under_paths (storage_set, storage, sub_path_list); + + e_free_string_list (sub_path_list); + } +} + +static void +signal_new_folder_for_all_folders_in_storage (EStorageSet *storage_set, + EStorage *storage) +{ + GList *path_list; + + path_list = e_storage_get_subfolder_paths (storage, G_DIR_SEPARATOR_S); + + signal_new_folder_for_all_folders_under_paths (storage_set, storage, path_list); + + e_free_string_list (path_list); +} + /* GtkObject methods. */ @@ -426,6 +465,8 @@ e_storage_set_add_storage (EStorageSet *storage_set, gtk_signal_emit (GTK_OBJECT (storage_set), signals[NEW_STORAGE], storage); + signal_new_folder_for_all_folders_in_storage (storage_set, storage); + return TRUE; } @@ -644,8 +685,6 @@ e_storage_set_get_folder_type_registry (EStorageSet *storage_set) } -/* Utility functions. */ - /** * e_storage_set_get_path_for_physical_uri: * @storage_set: A storage set |