* implement sorting of threads on arbitrary fields (WIP)
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user