* implement sorting of threads on arbitrary fields (WIP)

This commit is contained in:
Dirk-Jan C. Binnema
2011-07-02 11:27:08 +03:00
parent 50edc719fa
commit a2bc4540e0
11 changed files with 174 additions and 58 deletions

View File

@ -299,7 +299,7 @@ mu_container_from_list (GSList *lst)
}
struct _SortFuncData {
GCompareDataFunc func;
MuMsgFieldId mfid;
gboolean invert;
gpointer user_data;
};
@ -315,11 +315,18 @@ sort_func_wrapper (MuContainer *a, MuContainer *b, SortFuncData *data)
* is */
for (a1 = a; a1->msg == NULL && a1->child != NULL; a1 = a1->child);
for (b1 = b; b1->msg == NULL && b1->child != NULL; b1 = b1->child);
if (a1 == b1)
return 0;
else if (!a1->msg)
return 1;
else if (!b1->msg)
return -1;
if (data->invert)
return data->func (b1, a1, data->user_data);
return mu_msg_cmp (b1->msg, a1->msg, data->mfid);
else
return data->func (a1, b1, data->user_data);
return mu_msg_cmp (a1->msg, b1->msg, data->mfid);
}
static MuContainer*
@ -348,15 +355,15 @@ mu_container_sort_real (MuContainer *c, SortFuncData *sfdata)
MuContainer*
mu_container_sort (MuContainer *c, GCompareDataFunc func, gpointer user_data,
gboolean invert)
mu_container_sort (MuContainer *c, MuMsgFieldId mfid, gpointer user_data,
gboolean invert)
{
SortFuncData sfdata = { func, invert, user_data };
SortFuncData sfdata = { mfid, invert, user_data };
g_return_val_if_fail (c, NULL);
g_return_val_if_fail (func, NULL);
g_return_val_if_fail (mu_msg_field_id_is_valid(mfid), NULL);
return mu_container_sort_real (c, &sfdata);
}