diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2003-11-21 03:12:00 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2003-11-21 03:12:00 +0800 |
commit | 040e2d2287764ac19b2701dc1fefc00882451592 (patch) | |
tree | c75c61d8dffe45c8f5df41cee543e3877e3a5966 | |
parent | ebc902721df626e57f28af7ce2f9273d89a859e1 (diff) | |
download | gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.tar gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.tar.gz gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.tar.bz2 gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.tar.lz gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.tar.xz gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.tar.zst gsoc2013-evolution-040e2d2287764ac19b2701dc1fefc00882451592.zip |
Fixes bug #51012.
2003-11-20 Jeffrey Stedfast <fejj@ximian.com>
Fixes bug #51012.
* em-folder-tree.c (emft_popup_rename_folder): Fixed a FIXME to
not use the OS-specific g_path_*() stuff.
(em_folder_tree_set_selected): For the case where the tree has
already loaded enough subfodlers to include the path we need to
select, exopand the nodes to that path as well. For the case that
the tree hasn't loaded enough of the folder nodes, load them and
then have the node selected/expanded to.
svn path=/trunk/; revision=23462
-rw-r--r-- | mail/ChangeLog | 7 | ||||
-rw-r--r-- | mail/em-folder-tree.c | 68 |
2 files changed, 64 insertions, 11 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index bb671cf251..65121382fb 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,7 +1,14 @@ 2003-11-20 Jeffrey Stedfast <fejj@ximian.com> + Fixes bug #51012. + * em-folder-tree.c (emft_popup_rename_folder): Fixed a FIXME to not use the OS-specific g_path_*() stuff. + (em_folder_tree_set_selected): For the case where the tree has + already loaded enough subfodlers to include the path we need to + select, exopand the nodes to that path as well. For the case that + the tree hasn't loaded enough of the folder nodes, load them and + then have the node selected/expanded to. 2003-11-19 Jeffrey Stedfast <fejj@ximian.com> diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index 9b41c2ec11..fce291c5e1 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -939,17 +939,21 @@ struct _EMFolderTreeGetFolderInfo { GtkTreeRowReference *root; EMFolderTree *emft; CamelStore *store; + guint32 flags; char *top; /* output data */ CamelFolderInfo *fi; + + /* uri to select if any after the op is done */ + char *select_uri; }; static void em_folder_tree_get_folder_info__get (struct _mail_msg *mm) { struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *) mm; - guint32 flags = 0; + guint32 flags = m->flags; if (camel_store_supports_subscriptions (m->store)) flags |= CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; @@ -1016,6 +1020,9 @@ em_folder_tree_get_folder_info__got (struct _mail_msg *mm) } gtk_tree_store_set (model, &root, COL_BOOL_LOAD_SUBDIRS, FALSE, -1); + + if (m->select_uri) + em_folder_tree_set_selected (m->emft, m->select_uri); } static void @@ -1028,6 +1035,7 @@ em_folder_tree_get_folder_info__free (struct _mail_msg *mm) gtk_tree_row_reference_free (m->root); /*g_object_unref (m->emft);*/ camel_object_unref (m->store); + g_free (m->select_uri); g_free (m->top); } @@ -1069,6 +1077,8 @@ tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *tree_p m->store = store; m->emft = emft; m->top = g_strdup (top); + m->flags = 0; + m->select_uri = NULL; e_thread_put (mail_thread_new, (EMsg *) m); } @@ -2203,14 +2213,15 @@ void em_folder_tree_set_selected (EMFolderTree *emft, const char *uri) { struct _EMFolderTreeModelStoreInfo *si; + struct _EMFolderTreeGetFolderInfo *m; struct _EMFolderTreePrivate *priv; GtkTreeSelection *selection; GtkTreeRowReference *row; GtkTreePath *tree_path; CamelStore *store; CamelException ex; + char *path, *p; CamelURL *url; - char *path; g_return_if_fail (EM_IS_FOLDER_TREE (emft)); @@ -2227,25 +2238,60 @@ em_folder_tree_set_selected (EMFolderTree *emft, const char *uri) return; } - camel_object_unref (store); - - if (!(url = camel_url_new (uri, NULL))) + if (!(url = camel_url_new (uri, NULL))) { + camel_object_unref (store); return; + } path = url->fragment ? url->fragment : url->path; - row = g_hash_table_lookup (si->path_hash, path); - camel_url_free (url); - - if (row != NULL) { - /* this is easy... */ + if ((row = g_hash_table_lookup (si->path_hash, path))) { + /* the folder-info node has already been loaded */ selection = gtk_tree_view_get_selection (priv->treeview); tree_path = gtk_tree_row_reference_get_path (row); + gtk_tree_view_expand_to_path (priv->treeview, tree_path); gtk_tree_selection_select_path (selection, tree_path); gtk_tree_path_free (tree_path); + camel_object_unref (store); + camel_url_free (url); return; } - /* FIXME: need to fill out parent paths and stuff so we can select the requested path */ + /* look for the first of our parent folders that has already been loaeed */ + p = path + strlen (path); + while (p > path) { + if (*p == '/') { + *p = '\0'; + + if ((row = g_hash_table_lookup (si->path_hash, path))) + break; + } + + p--; + } + + if (row == NULL) { + /* none of the folders of the desired store have been loaded yet */ + row = si->row; + path = NULL; + } else { + if (path[0] == '/') + path++; + } + + /* FIXME: this gets all the subfolders of our first loaded + * parent folder - ideally we'd only get what we needed, but + * it's probably not worth the effort */ + m = mail_msg_new (&get_folder_info_op, NULL, sizeof (struct _EMFolderTreeGetFolderInfo)); + m->root = gtk_tree_row_reference_copy (row); + m->store = store; + m->emft = emft; + m->top = path ? g_strdup (path) : NULL; + m->flags = CAMEL_STORE_FOLDER_INFO_RECURSIVE; + m->select_uri = g_strdup (uri); + + e_thread_put (mail_thread_new, (EMsg *) m); + + camel_url_free (url); } |