else
{
struct Email *oldcur = CUR_EMAIL;
+ struct EmailList el = STAILQ_HEAD_INITIALIZER(el);
+ el_add_tagged(&el, Context, Context->last_tag, tag);
- if (mutt_link_threads(CUR_EMAIL, tag ? NULL : Context->last_tag, Context))
+ if (mutt_link_threads(CUR_EMAIL, &el, Context->mailbox))
{
mutt_sort_headers(Context, true);
menu->current = oldcur->virtual;
}
else
mutt_error(_("No thread linked"));
+
+ el_free(&el);
}
if (menu->menu == MENU_PAGER)
/**
* link_threads - Forcibly link messages together
- * @param parent Header of parent message
- * @param child Header of child message
+ * @param parent Parent Email
+ * @param child Child Email
* @param m Mailbox
* @retval true On success
*/
/**
* mutt_link_threads - Forcibly link threads together
- * @param cur Header of current message
- * @param last Header of thread to link (OPTIONAL)
- * @param ctx Mailbox
+ * @param parent Parent Email
+ * @param children List of children Emails
+ * @param m Mailbox
* @retval true On success
- *
- * if last is omitted, all the tagged threads will be used.
*/
-bool mutt_link_threads(struct Email *cur, struct Email *last, struct Context *ctx)
+bool mutt_link_threads(struct Email *parent, struct EmailList *children, struct Mailbox *m)
{
- if (!ctx || !ctx->mailbox)
+ if (!parent || !children || !m)
return false;
- struct Mailbox *m = ctx->mailbox;
-
bool changed = false;
- if (!last)
+ struct EmailNode *en = NULL;
+ STAILQ_FOREACH(en, children, entries)
{
- for (int i = 0; i < m->msg_count; i++)
- if (message_is_tagged(ctx, i))
- changed |= link_threads(cur, m->emails[i], ctx->mailbox);
+ changed |= link_threads(parent, en->email, m);
}
- else
- changed = link_threads(cur, last, ctx->mailbox);
return changed;
}
#define mutt_thread_contains_flagged(x, y) mutt_traverse_thread(x, y, MUTT_THREAD_FLAGGED)
#define mutt_thread_next_unread(x, y) mutt_traverse_thread(x, y, MUTT_THREAD_NEXT_UNREAD)
-bool mutt_link_threads(struct Email *cur, struct Email *last, struct Context *ctx);
+bool mutt_link_threads(struct Email *parent, struct EmailList *children, struct Mailbox *m);
int mutt_messages_in_thread(struct Mailbox *m, struct Email *e, int flag);
void mutt_draw_tree(struct Context *ctx);