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;
}