+static gint
+compare_separator_and_groups (gboolean is_separator_a,
+ gboolean is_separator_b,
+ gboolean is_favourite_a,
+ gboolean is_favourite_b,
+ const gchar *name_a,
+ const gchar *name_b,
+ EmpathyContact *contact_a,
+ EmpathyContact *contact_b)
+{
+ if (is_separator_a || is_separator_b) {
+ /* We have at least one separator */
+ if (is_separator_a) {
+ return -1;
+ } else if (is_separator_b) {
+ return 1;
+ }
+ }
+
+ /* Favorites are displayed first */
+ if (is_favourite_a && !is_favourite_b) {
+ return -1;
+ } else if (!is_favourite_a && is_favourite_b) {
+ return 1;
+ /* One group and one contact */
+ } else if (!contact_a && contact_b) {
+ return 1;
+ } else if (contact_a && !contact_b) {
+ return -1;
+ } else if (!contact_a && !contact_b) {
+ /* Two groups */
+ return g_utf8_collate (name_a, name_b);
+ }
+
+ /* Two contacts, ordering depends of the sorting policy */
+ return 0;
+}
+