diff options
author | Not Zed <NotZed@Ximian.com> | 2004-03-11 11:05:43 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2004-03-11 11:05:43 +0800 |
commit | 88b02e9cf481aee0762f7e7bc0b32032cdfeb899 (patch) | |
tree | a82a03e69dad3f99caa12309c482a69333f6cb51 | |
parent | 6071a963e85f69133cc1761e37b6ed942629d70d (diff) | |
download | gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.tar gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.tar.gz gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.tar.bz2 gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.tar.lz gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.tar.xz gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.tar.zst gsoc2013-evolution-88b02e9cf481aee0762f7e7bc0b32032cdfeb899.zip |
pass the raw header in instead of name and value. (efh_format_headers): if
2004-03-11 Not Zed <NotZed@Ximian.com>
* em-format-html.c (efh_format_header): pass the raw header in
instead of name and value.
(efh_format_headers): if we have specific headers to show, iterate
over all headers and print out all matching ones, so duplicate
headers are properly displayed. Related to #55298.
* em-folder-selector.c (em_folder_selector_construct): dont set
this to be modal. otherwise you can't click on error popups. duh.
2004-03-08 Not Zed <NotZed@Ximian.com>
* em-folder-selection-button.c
(em_folder_selection_button_clicked): don't let the user select
virtual/vtrash folders or non-selectable folders.
* mail-component.c (impl_createControls): disable selection of
non-select rows.
* em-folder-selector.c (em_folder_selector_create_new): exclude
folders with noinferiors set.
* em-folder-tree.c (folder_tree_new): add folder tree arg, hook
onto the selection funciton for the tree selection.
(emft_select_func): selection override function. allow certain
things to be excluded.
(em_folder_tree_set_excluded): api to set what is excluded from
the selectability.
(emft_tree_row_activated): call emft_select_func check to see if
this row is excluded before emitting an activated signal.
* em-folder-tree-model.c (em_folder_tree_model_set_folder_info):
save folder info->flags in the tree store.
* mail-folder-cache.c (create_folders): use tail recursion.
(get_folders): tail recurse.
* (*): Fixed for api changes in camel.
svn path=/trunk/; revision=25020
-rw-r--r-- | mail/ChangeLog | 40 | ||||
-rw-r--r-- | mail/em-folder-selection-button.c | 2 | ||||
-rw-r--r-- | mail/em-folder-selector.c | 2 | ||||
-rw-r--r-- | mail/em-folder-tree-model.c | 14 | ||||
-rw-r--r-- | mail/em-folder-tree-model.h | 6 | ||||
-rw-r--r-- | mail/em-folder-tree.c | 53 | ||||
-rw-r--r-- | mail/em-folder-tree.h | 11 | ||||
-rw-r--r-- | mail/em-format-html.c | 36 | ||||
-rw-r--r-- | mail/em-subscribe-editor.c | 2 | ||||
-rw-r--r-- | mail/mail-component.c | 1 | ||||
-rw-r--r-- | mail/mail-folder-cache.c | 40 | ||||
-rw-r--r-- | mail/mail-ops.c | 20 |
12 files changed, 156 insertions, 71 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 5be2dcecc7..17e8519e47 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,43 @@ +2004-03-11 Not Zed <NotZed@Ximian.com> + + * em-format-html.c (efh_format_header): pass the raw header in + instead of name and value. + (efh_format_headers): if we have specific headers to show, iterate + over all headers and print out all matching ones, so duplicate + headers are properly displayed. Related to #55298. + + * em-folder-selector.c (em_folder_selector_construct): dont set + this to be modal. otherwise you can't click on error popups. duh. + +2004-03-08 Not Zed <NotZed@Ximian.com> + + * em-folder-selection-button.c + (em_folder_selection_button_clicked): don't let the user select + virtual/vtrash folders or non-selectable folders. + + * mail-component.c (impl_createControls): disable selection of + non-select rows. + + * em-folder-selector.c (em_folder_selector_create_new): exclude + folders with noinferiors set. + + * em-folder-tree.c (folder_tree_new): add folder tree arg, hook + onto the selection funciton for the tree selection. + (emft_select_func): selection override function. allow certain + things to be excluded. + (em_folder_tree_set_excluded): api to set what is excluded from + the selectability. + (emft_tree_row_activated): call emft_select_func check to see if + this row is excluded before emitting an activated signal. + + * em-folder-tree-model.c (em_folder_tree_model_set_folder_info): + save folder info->flags in the tree store. + + * mail-folder-cache.c (create_folders): use tail recursion. + (get_folders): tail recurse. + + * (*): Fixed for api changes in camel. + 2004-03-10 Jeffrey Stedfast <fejj@ximian.com> Fix for bug #55298. diff --git a/mail/em-folder-selection-button.c b/mail/em-folder-selection-button.c index c6dc309d6b..e898be02ba 100644 --- a/mail/em-folder-selection-button.c +++ b/mail/em-folder-selection-button.c @@ -220,7 +220,7 @@ em_folder_selection_button_clicked (GtkButton *button) model = mail_component_peek_tree_model (mail_component_peek ()); emft = (EMFolderTree *) em_folder_tree_new_with_model (model); em_folder_tree_set_multiselect (emft, priv->multiple_select); - + em_folder_tree_set_excluded(emft, EMFT_EXCLUDE_NOSELECT|EMFT_EXCLUDE_VIRTUAL|EMFT_EXCLUDE_VTRASH); dialog = em_folder_selector_new (emft, EM_FOLDER_SELECTOR_CAN_CREATE, priv->title, priv->caption); if (priv->multiple_select) em_folder_selector_set_selected_list ((EMFolderSelector *) dialog, priv->uris); diff --git a/mail/em-folder-selector.c b/mail/em-folder-selector.c index 3a587ddc72..4201fbd044 100644 --- a/mail/em-folder-selector.c +++ b/mail/em-folder-selector.c @@ -223,7 +223,6 @@ em_folder_selector_construct (EMFolderSelector *emfs, EMFolderTree *emft, guint3 GtkWidget *label; gtk_window_set_default_size (GTK_WINDOW (emfs), 350, 300); - gtk_window_set_modal (GTK_WINDOW (emfs), TRUE); gtk_window_set_title (GTK_WINDOW (emfs), title); gtk_container_set_border_width (GTK_CONTAINER (emfs), 6); @@ -298,6 +297,7 @@ em_folder_selector_create_new (EMFolderTree *emft, guint32 flags, const char *ti emfs = g_object_new (em_folder_selector_get_type (), NULL); em_folder_selector_construct (emfs, emft, flags, title, text); + em_folder_tree_set_excluded(emft, EMFT_EXCLUDE_NOINFERIORS); hbox = gtk_hbox_new (FALSE, 0); w = gtk_label_new_with_mnemonic (_("Folder _name:")); diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c index a095a88da6..62b526496a 100644 --- a/mail/em-folder-tree-model.c +++ b/mail/em-folder-tree-model.c @@ -59,6 +59,7 @@ static GType col_types[] = { G_TYPE_STRING, /* path */ G_TYPE_STRING, /* uri */ G_TYPE_UINT, /* unread count */ + G_TYPE_UINT, /* flags */ G_TYPE_BOOLEAN, /* is a store node */ G_TYPE_BOOLEAN, /* has not-yet-loaded subfolders */ }; @@ -433,13 +434,13 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite path_row = gtk_tree_row_reference_copy (uri_row); gtk_tree_path_free (path); - g_hash_table_insert (model->uri_hash, g_strdup (fi->url), uri_row); + g_hash_table_insert (model->uri_hash, g_strdup (fi->uri), uri_row); g_hash_table_insert (si->path_hash, g_strdup (fi->path), path_row); /* HACK: if we have the folder, and its the outbox folder, we need the total count, not unread */ /* This is duplicated in mail-folder-cache too, should perhaps be functionised */ - unread = fi->unread_message_count == -1 ? 0 : fi->unread_message_count; - if (mail_note_get_folder_from_uri(fi->url, &folder) && folder) { + unread = fi->unread == -1 ? 0 : fi->unread; + if (mail_note_get_folder_from_uri(fi->uri, &folder) && folder) { if (folder == mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_OUTBOX)) unread = camel_folder_get_message_count(folder); camel_object_unref(folder); @@ -449,8 +450,9 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite COL_STRING_DISPLAY_NAME, fi->name, COL_POINTER_CAMEL_STORE, si->store, COL_STRING_FOLDER_PATH, fi->path, - COL_STRING_URI, fi->url, + COL_STRING_URI, fi->uri, COL_UINT_UNREAD, unread, + COL_UINT_FLAGS, fi->flags, COL_BOOL_IS_STORE, FALSE, COL_BOOL_LOAD_SUBDIRS, load, -1); @@ -461,7 +463,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite do { gtk_tree_store_append ((GtkTreeStore *) model, &sub, iter); em_folder_tree_model_set_folder_info (model, &sub, si, fi); - fi = fi->sibling; + fi = fi->next; } while (fi); } else if (load) { /* create a placeholder node for our subfolders... */ @@ -537,7 +539,7 @@ folder_subscribed (CamelStore *store, CamelFolderInfo *fi, EMFolderTreeModel *mo em_folder_tree_model_set_folder_info (model, &iter, si, fi); - g_signal_emit (model, signals[FOLDER_ADDED], 0, fi->path, fi->url); + g_signal_emit (model, signals[FOLDER_ADDED], 0, fi->path, fi->uri); done: diff --git a/mail/em-folder-tree-model.h b/mail/em-folder-tree-model.h index df48d1738a..103dc57052 100644 --- a/mail/em-folder-tree-model.h +++ b/mail/em-folder-tree-model.h @@ -51,10 +51,10 @@ enum { COL_STRING_DISPLAY_NAME, /* string that appears in the tree */ COL_POINTER_CAMEL_STORE, /* CamelStore object */ COL_STRING_FOLDER_PATH, /* if node is a folder, the full path of the folder */ - COL_STRING_URI, /* the uri to get the store or - * folder object */ + COL_STRING_URI, /* the uri to get the store or folder object */ COL_UINT_UNREAD, /* unread count */ - + COL_UINT_FLAGS, /* FolderInfo.flags */ + COL_BOOL_IS_STORE, /* toplevel store node? */ COL_BOOL_LOAD_SUBDIRS, /* %TRUE only if the store/folder * has subfolders which have not yet diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index 730e86252d..e78491ff6d 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -71,6 +71,8 @@ struct _EMFolderTreePrivate { char *selected_uri; char *selected_path; + guint32 excluded; + gboolean do_multiselect; /* when doing a multiselect, folders that we didn't find */ GList *lost_folders; @@ -303,6 +305,29 @@ render_display_name (GtkTreeViewColumn *column, GtkCellRenderer *renderer, g_free (display); } +static gboolean +emft_select_func(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean selected, gpointer data) +{ + EMFolderTree *emft = data; + gboolean is_store; + guint32 flags; + GtkTreeIter iter; + + /* NB: This will be called with selection==NULL from tree_row_activated */ + + if (emft->priv->excluded == 0) + return TRUE; + + if (!gtk_tree_model_get_iter(model, &iter, path)) + return TRUE; + + gtk_tree_model_get(model, &iter, COL_UINT_FLAGS, &flags, COL_BOOL_IS_STORE, &is_store, -1); + if (is_store) + flags |= CAMEL_FOLDER_NOSELECT; + + return (flags & emft->priv->excluded) == 0; +} + static void em_folder_tree_init (EMFolderTree *emft) { @@ -361,7 +386,7 @@ em_folder_tree_destroy (GtkObject *obj) } static GtkTreeView * -folder_tree_new (EMFolderTreeModel *model) +folder_tree_new (EMFolderTree *emft, EMFolderTreeModel *model) { GtkTreeSelection *selection; GtkTreeViewColumn *column; @@ -384,7 +409,7 @@ folder_tree_new (EMFolderTreeModel *model) selection = gtk_tree_view_get_selection ((GtkTreeView *) tree); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - + gtk_tree_selection_set_select_function(selection, emft_select_func, emft, NULL); gtk_tree_view_set_headers_visible ((GtkTreeView *) tree, FALSE); return (GtkTreeView *) tree; @@ -403,7 +428,7 @@ em_folder_tree_construct (EMFolderTree *emft, EMFolderTreeModel *model) gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); priv->model = model; - priv->treeview = folder_tree_new (model); + priv->treeview = folder_tree_new (emft, model); gtk_widget_show ((GtkWidget *) priv->treeview); g_signal_connect (priv->treeview, "row-expanded", G_CALLBACK (emft_tree_row_expanded), emft); @@ -1280,6 +1305,11 @@ em_folder_tree_set_multiselect (EMFolderTree *tree, gboolean mode) gtk_tree_selection_set_mode (sel, mode ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); } +void em_folder_tree_set_excluded(EMFolderTree *emft, guint32 flags) +{ + emft->priv->excluded = flags; +} + static void get_selected_uris_iterate (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { @@ -1447,7 +1477,7 @@ emft_get_folder_info__got (struct _mail_msg *mm) * want to fill our tree with... *sigh* */ if (m->top && m->fi && !strcmp (m->fi->full_name, m->top)) { if (!(fi = m->fi->child)) - fi = m->fi->sibling; + fi = m->fi->next; } else fi = m->fi; @@ -1458,7 +1488,7 @@ emft_get_folder_info__got (struct _mail_msg *mm) do { em_folder_tree_model_set_folder_info (priv->model, &iter, si, fi); - if ((fi = fi->sibling) != NULL) + if ((fi = fi->next) != NULL) gtk_tree_store_append (model, &iter, &root); } while (fi != NULL); } @@ -1572,13 +1602,16 @@ emft_tree_row_activated (GtkTreeView *treeview, GtkTreePath *tree_path, GtkTreeV GtkTreeModel *model = (GtkTreeModel *) priv->model; GtkTreeIter iter; char *path, *uri; - + + if (!emft_select_func(NULL, model, tree_path, FALSE, emft)) + return; + if (!gtk_tree_model_get_iter (model, &iter, tree_path)) return; - + gtk_tree_model_get (model, &iter, COL_STRING_FOLDER_PATH, &path, COL_STRING_URI, &uri, -1); - + g_free (priv->selected_uri); priv->selected_uri = g_strdup (uri); @@ -1696,7 +1729,7 @@ emft_copy_folders__copy (struct _mail_msg *mm) else if (m->delete) deleting = g_list_prepend (deleting, info); - info = info->sibling; + info = info->next; } } @@ -2112,7 +2145,7 @@ emft_popup_delete_rec (CamelStore *store, CamelFolderInfo *fi, CamelException *e if (camel_exception_is_set (ex)) return; - fi = fi->sibling; + fi = fi->next; } } diff --git a/mail/em-folder-tree.h b/mail/em-folder-tree.h index 32f9b5518a..915e73c02e 100644 --- a/mail/em-folder-tree.h +++ b/mail/em-folder-tree.h @@ -44,9 +44,16 @@ extern "C" { typedef struct _EMFolderTree EMFolderTree; typedef struct _EMFolderTreeClass EMFolderTreeClass; +/* not sure this api is the best, but its the easiest to implement and will cover what we need */ +#define EMFT_EXCLUDE_NOSELECT CAMEL_FOLDER_NOSELECT +#define EMFT_EXCLUDE_NOINFERIORS CAMEL_FOLDER_NOINFERIORS +#define EMFT_EXCLUDE_VIRTUAL CAMEL_FOLDER_VIRTUAL +#define EMFT_EXCLUDE_SYSTEM CAMEL_FOLDER_SYSTEM +#define EMFT_EXCLUDE_VTRASH CAMEL_FOLDER_VTRASH + struct _EMFolderTree { GtkVBox parent_object; - + struct _EMFolderTreePrivate *priv; }; @@ -58,7 +65,6 @@ struct _EMFolderTreeClass { void (* folder_selected) (EMFolderTree *emft, const char *path, const char *uri); }; - GType em_folder_tree_get_type (void); GtkWidget *em_folder_tree_new (void); @@ -67,6 +73,7 @@ GtkWidget *em_folder_tree_new_with_model (EMFolderTreeModel *model); void em_folder_tree_enable_drag_and_drop (EMFolderTree *emft); void em_folder_tree_set_multiselect (EMFolderTree *emft, gboolean mode); +void em_folder_tree_set_excluded(EMFolderTree *emft, guint32 flags); void em_folder_tree_set_selected_list (EMFolderTree *emft, GList *list); GList *em_folder_tree_get_selected_uris (EMFolderTree *emft); diff --git a/mail/em-format-html.c b/mail/em-format-html.c index 046d250de4..10ed59260f 100644 --- a/mail/em-format-html.c +++ b/mail/em-format-html.c @@ -1430,16 +1430,16 @@ efh_format_address (GString *out, struct _camel_header_address *a) } static void -efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const char *namein, const char *txt, guint32 flags, const char *charset) +efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, struct _camel_header_raw *header, guint32 flags, const char *charset) { CamelMimeMessage *msg = (CamelMimeMessage *) part; EMFormatHTML *efh = (EMFormatHTML *) emf; char *name, *value = NULL, *p; - const char *label; + const char *label, *txt; int addrspec = 0, i; - name = alloca(strlen(namein)+1); - strcpy(name, namein); + name = alloca(strlen(header->name)+1); + strcpy(name, header->name); camel_strdown(name); for (i = 0; addrspec_hdrs[i]; i++) { @@ -1453,10 +1453,7 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c struct _camel_header_address *addrs; GString *html; - if (!txt && !(txt = camel_medium_get_header (part, name))) - return; - - if (!(addrs = camel_header_address_decode (txt, emf->charset ? emf->charset : emf->default_charset))) + if (!(addrs = camel_header_address_decode (header->value, emf->charset ? emf->charset : emf->default_charset))) return; /* canonicalise the header name... first letter is @@ -1495,11 +1492,8 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c time_t msg_date; struct tm local; - if (!txt && !(txt = camel_medium_get_header (part, name))) - return; - /* Show the local timezone equivalent in brackets if the sender is remote */ - msg_date = camel_header_decode_date (txt, &msg_offset); + msg_date = camel_header_decode_date (header->value, &msg_offset); e_localtime_with_offset (msg_date, &local, &local_tz); /* Convert message offset to minutes (e.g. -0400 --> -240) */ @@ -1519,7 +1513,7 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c e_utf8_strftime (buf, sizeof (buf), _("<I> (%R %Z)</I>"), &local); } - html = camel_text_to_html (txt, efh->text_html_flags, 0); + html = camel_text_to_html (header->value, efh->text_html_flags, 0); txt = value = g_strdup_printf ("%s %s", html, buf); g_free (html); flags |= EM_FORMAT_HTML_HEADER_HTML; @@ -1532,8 +1526,8 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c flags |= EM_FORMAT_HEADER_BOLD; } else { - txt = value = camel_header_decode_string (txt, charset); - label = namein; + txt = value = camel_header_decode_string (header->value, charset); + label = header->name; } efh_format_text_header (efh, stream, label, txt, flags); @@ -1548,6 +1542,7 @@ efh_format_headers(EMFormatHTML *efh, CamelStream *stream, CamelMedium *part) EMFormatHeader *h; const char *charset; CamelContentType *ct; + struct _camel_header_raw *header; ct = camel_mime_part_get_content_type((CamelMimePart *)part); charset = camel_content_type_param (ct, "charset"); @@ -1562,16 +1557,19 @@ efh_format_headers(EMFormatHTML *efh, CamelStream *stream, CamelMedium *part) /* dump selected headers */ h = (EMFormatHeader *)emf->header_list.head; if (h->next == NULL || emf->mode == EM_FORMAT_ALLHEADERS) { - struct _camel_header_raw *header; - header = ((CamelMimePart *)part)->headers; while (header) { - efh_format_header(emf, stream, part, header->name, header->value, EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset); + efh_format_header(emf, stream, part, header, EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset); header = header->next; } } else { while (h->next) { - efh_format_header(emf, stream, part, h->name, NULL, h->flags, charset); + header = ((CamelMimePart *)part)->headers; + while (header) { + if (!g_ascii_strcasecmp(header->name, h->name)) + efh_format_header(emf, stream, part, header, h->flags, charset); + header = header->next; + } h = h->next; } } diff --git a/mail/em-subscribe-editor.c b/mail/em-subscribe-editor.c index dc7105b52b..3107fa7317 100644 --- a/mail/em-subscribe-editor.c +++ b/mail/em-subscribe-editor.c @@ -319,7 +319,7 @@ sub_fill_level(EMSubscribe *sub, CamelFolderInfo *info, GtkTreeIter *parent, in } g_hash_table_insert(sub->folders, fi->full_name, node); } - fi = fi->sibling; + fi = fi->next; } } diff --git a/mail/mail-component.c b/mail/mail-component.c index 79d493fb9c..78baa620cf 100644 --- a/mail/mail-component.c +++ b/mail/mail-component.c @@ -440,6 +440,7 @@ impl_createControls (PortableServer_Servant servant, view_widget = em_folder_browser_new (); tree_widget = (GtkWidget *) em_folder_tree_new_with_model (priv->model); + em_folder_tree_set_excluded((EMFolderTree *)tree_widget, EMFT_EXCLUDE_NOSELECT); em_folder_tree_enable_drag_and_drop ((EMFolderTree *) tree_widget); em_format_set_session ((EMFormat *) ((EMFolderView *) view_widget)->preview, session); diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c index edd6dc1dc3..a17fecc99e 100644 --- a/mail/mail-folder-cache.c +++ b/mail/mail-folder-cache.c @@ -343,12 +343,12 @@ update_1folder(struct _folder_info *mfi, int new, CamelFolderInfo *info) } else { d(printf(" unread count\n")); if (info) - unread = info->unread_message_count; + unread = info->unread; else unread = camel_folder_get_unread_message_count (folder); } } else if (info) - unread = info->unread_message_count; + unread = info->unread; d(printf("folder updated: unread %d: '%s'\n", unread, mfi->full_name)); @@ -380,7 +380,7 @@ setup_folder(CamelFolderInfo *fi, struct _store_info *si) mfi = g_malloc0(sizeof(*mfi)); mfi->path = g_strdup(fi->path); mfi->full_name = g_strdup(fi->full_name); - mfi->uri = g_strdup(fi->url); + mfi->uri = g_strdup(fi->uri); mfi->store_info = si; mfi->flags = fi->flags; @@ -390,8 +390,8 @@ setup_folder(CamelFolderInfo *fi, struct _store_info *si) up = g_malloc0(sizeof(*up)); up->path = g_strdup(mfi->path); up->name = g_strdup(fi->name); - up->uri = g_strdup(fi->url); - up->unread = (fi->unread_message_count==-1)?0:fi->unread_message_count; + up->uri = g_strdup(fi->uri); + up->unread = (fi->unread==-1)?0:fi->unread; up->store = si->store; camel_object_ref(up->store); @@ -408,12 +408,14 @@ create_folders(CamelFolderInfo *fi, struct _store_info *si) { d(printf("Setup new folder: %s\n %s\n", fi->url, fi->full_name)); - setup_folder(fi, si); + while (fi) { + setup_folder(fi, si); - if (fi->child) - create_folders(fi->child, si); - if (fi->sibling) - create_folders(fi->sibling, si); + if (fi->child) + create_folders(fi->child, si); + + fi = fi->next; + } } static void @@ -595,7 +597,7 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase, g_free(mfi->full_name); mfi->path = g_strdup(fi->path); mfi->full_name = g_strdup(fi->full_name); - mfi->uri = g_strdup(fi->url); + mfi->uri = g_strdup(fi->uri); mfi->flags = fi->flags; g_hash_table_insert(si->folders, mfi->full_name, mfi); @@ -606,7 +608,7 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase, mfi = g_malloc0(sizeof(*mfi)); mfi->path = g_strdup(fi->path); mfi->full_name = g_strdup(fi->full_name); - mfi->uri = g_strdup(fi->url); + mfi->uri = g_strdup(fi->uri); mfi->store_info = si; mfi->flags = fi->flags; @@ -619,7 +621,7 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase, up->path = g_strdup(mfi->path); up->name = g_strdup(fi->name); up->uri = g_strdup(mfi->uri); - up->unread = fi->unread_message_count==-1?0:fi->unread_message_count; + up->unread = fi->unread==-1?0:fi->unread; up->store = si->store; camel_object_ref(up->store); @@ -639,12 +641,14 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase, static void get_folders(CamelFolderInfo *fi, GPtrArray *folders) { - g_ptr_array_add(folders, fi); + while (fi) { + g_ptr_array_add(folders, fi); - if (fi->child) - get_folders(fi->child, folders); - if (fi->sibling) - get_folders(fi->sibling, folders); + if (fi->child) + get_folders(fi->child, folders); + + fi = fi->next; + } } static int diff --git a/mail/mail-ops.c b/mail/mail-ops.c index d72423b3e9..112b59f8ca 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -1053,14 +1053,14 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful g_return_val_if_fail (info != NULL, NULL); parent = NULL; - for (fi = info; fi; fi = fi->sibling) { + for (fi = info; fi; fi = fi->next) { if (!strcmp (fi->name, name)) break; parent = fi; } /* create our vTrash/vJunk URL */ - url = camel_url_new (info->url, NULL); + url = camel_url_new (info->uri, NULL); path = g_strdup_printf ("/%s", name); if (url->fragment) camel_url_set_fragment (url, path); @@ -1075,7 +1075,7 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful vinfo = fi; g_free (vinfo->full_name); g_free (vinfo->name); - g_free (vinfo->url); + g_free (vinfo->uri); } else { /* There wasn't a Trash/Junk folder so create a new folder entry */ vinfo = g_new0 (CamelFolderInfo, 1); @@ -1083,14 +1083,14 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful g_assert(parent != NULL); /* link it into the right spot */ - vinfo->sibling = parent->sibling; - parent->sibling = vinfo; + vinfo->next = parent->next; + parent->next = vinfo; } /* Fill in the new fields */ vinfo->full_name = g_strdup (full_name); vinfo->name = g_strdup(vinfo->full_name); - vinfo->url = g_strdup_printf ("%s:%s", url_base, uri); + vinfo->uri = g_strdup_printf ("%s:%s", url_base, uri); vinfo->path = g_strdup_printf("/%s", vinfo->name); g_free (uri); @@ -1100,7 +1100,7 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful static void add_unmatched_info(CamelFolderInfo *fi) { - for (; fi; fi = fi->sibling) { + for (; fi; fi = fi->next) { if (!strcmp(fi->full_name, CAMEL_UNMATCHED_NAME)) { g_free(fi->name); fi->name = g_strdup(_("Unmatched")); @@ -1122,13 +1122,13 @@ get_folderinfo_get (struct _mail_msg *mm) m->info = camel_store_get_folder_info (m->store, NULL, flags, &mm->ex); if (m->info) { - if (m->info->url && (m->store->flags & CAMEL_STORE_VTRASH)) + if (m->info->uri && (m->store->flags & CAMEL_STORE_VTRASH)) add_special_info(m->store, m->info, CAMEL_VTRASH_NAME, _("Trash"), "vtrash"); - if (m->info->url && (m->store->flags & CAMEL_STORE_VJUNK)) { + if (m->info->uri && (m->store->flags & CAMEL_STORE_VJUNK)) { CamelFolderInfo *info; info = add_special_info(m->store, m->info, CAMEL_VJUNK_NAME, _("Junk"), "vjunk"); - info->unread_message_count = -1; + info->unread = -1; } if (CAMEL_IS_VEE_STORE(m->store)) |