From c7b28419abd9d53ff36412e4fedaf308ce13c552 Mon Sep 17 00:00:00 2001 From: omfgroflbbq Date: Thu, 20 Mar 2014 16:22:50 +0100 Subject: [PATCH] * bugfix for issue 164 --- lib/mu-container.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/mu-container.c b/lib/mu-container.c index 34db96a5..ec7b3795 100644 --- a/lib/mu-container.c +++ b/lib/mu-container.c @@ -317,6 +317,22 @@ struct _SortFuncData { }; typedef struct _SortFuncData SortFuncData; +static MuContainer* +get_top_msg (MuContainer *c, MuMsgFieldId mfid) +{ + MuContainer *piv, *extreme = c; + for (piv = c; piv != NULL && piv->msg != NULL; piv = piv->child) { + if (mu_msg_cmp (piv->msg, extreme->msg, mfid) > 0) + extreme = piv; + if (piv != c && piv->next) { + MuContainer *sub = get_top_msg (piv->next, mfid); + + if (sub->msg != NULL && mu_msg_cmp (sub->msg, extreme->msg, mfid) > 0) + extreme = sub; + } + } + return extreme; +} static int sort_func_wrapper (MuContainer *a, MuContainer *b, SortFuncData *data) @@ -328,6 +344,9 @@ sort_func_wrapper (MuContainer *a, MuContainer *b, SortFuncData *data) for (a1 = a; a1->msg == NULL && a1->child != NULL; a1 = a1->child); for (b1 = b; b1->msg == NULL && b1->child != NULL; b1 = b1->child); + a1 = get_top_msg (a1, data->mfid); + b1 = get_top_msg (b1, data->mfid); + if (a1 == b1) return 0; else if (!a1->msg)