[gnome-contacts] Support sort by value for field details
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-contacts] Support sort by value for field details
- Date: Thu, 1 Sep 2011 17:10:02 +0000 (UTC)
commit 4420b4d8cd15a4dfc191ce963212beb649bb14da
Author: Alexander Larsson <alexl redhat com>
Date: Thu Sep 1 19:06:52 2011 +0200
Support sort by value for field details
src/contacts-contact.vala | 33 ++++++++++++++++++++++-----------
1 files changed, 22 insertions(+), 11 deletions(-)
---
diff --git a/src/contacts-contact.vala b/src/contacts-contact.vala
index 418ea11..ada5554 100644
--- a/src/contacts-contact.vala
+++ b/src/contacts-contact.vala
@@ -476,17 +476,29 @@ public class Contacts.Contact : GLib.Object {
return false;
}
- public static int compare_fields (void *a, void *b) {
- AbstractFieldDetails *details_a = (AbstractFieldDetails *)a;
- AbstractFieldDetails *details_b = (AbstractFieldDetails *)b;
- bool first_a = has_pref (details_a);
- bool first_b = has_pref (details_b);
+ public static int compare_fields (void *_a, void *_b) {
+ AbstractFieldDetails *a = (AbstractFieldDetails *)_a;
+ AbstractFieldDetails *b = (AbstractFieldDetails *)_b;
+
+ /* Compare by pref */
+ bool first_a = has_pref (a);
+ bool first_b = has_pref (b);
+ if (first_a != first_b) {
+ if (first_a)
+ return -1;
+ else
+ return 1;
+ }
- if (first_a == first_b)
- return 0;
- if (first_a)
- return -1;
- return 1;
+ if (a is EmailFieldDetails || a is PhoneFieldDetails) {
+ var aa = a as AbstractFieldDetails<string>;
+ var bb = b as AbstractFieldDetails<string>;
+ return strcmp (aa.value, bb.value);
+ }
+
+ warning ("Unsupported AbstractFieldDetails value type");
+
+ return 0;
}
public static int compare_persona_by_store (void *a, void *b) {
@@ -516,7 +528,6 @@ public class Contacts.Contact : GLib.Object {
}
public static ArrayList<T> sort_fields<T> (Collection<T> fields) {
- // TODO: This should take an extra delegate arg to compare by value for T
var res = new ArrayList<T>();
res.add_all (fields);
res.sort (Contact.compare_fields);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]