static EAttachmentStore * find_attachment_store (EMailPartList *part_list, EMailPart *start) { EAttachmentStore *store = NULL; GQueue queue = G_QUEUE_INIT; GList *head, *link; const gchar *start_id; gchar *tmp, *pos; EMailPart *part; gchar *id; start_id = e_mail_part_get_id (start); e_mail_part_list_queue_parts (part_list, NULL, &queue); head = g_queue_peek_head_link (&queue); id = g_strconcat (start_id, ".attachment-bar", NULL); tmp = g_strdup (id); part = NULL; do { d (printf ("Looking up attachment bar as %s\n", id)); for (link = head; link != NULL; link = g_list_next (link)) { EMailPart *p = link->data; const gchar *p_id; p_id = e_mail_part_get_id (p); if (g_strcmp0 (p_id, id) == 0) { part = p; break; } } pos = g_strrstr (tmp, "."); if (!pos) break; g_free (id); g_free (tmp); tmp = g_strndup (start_id, pos - tmp); id = g_strdup_printf ("%s.attachment-bar", tmp); } while (pos && !part); g_free (id); g_free (tmp); if (part != NULL) store = e_mail_part_attachment_bar_get_store ( E_MAIL_PART_ATTACHMENT_BAR (part)); while (!g_queue_is_empty (&queue)) g_object_unref (g_queue_pop_head (&queue)); return store; }
static GtkWidget * emfe_attachment_bar_get_widget (EMailFormatterExtension *extension, EMailPartList *context, EMailPart *part, GHashTable *params) { EAttachmentStore *store; GtkWidget *widget; g_return_val_if_fail (E_IS_MAIL_PART_ATTACHMENT_BAR (part), NULL); store = e_mail_part_attachment_bar_get_store ( E_MAIL_PART_ATTACHMENT_BAR (part)); widget = e_attachment_bar_new (store); g_object_set_data (G_OBJECT (store), "attachment-bar", widget); return widget; }