From 0bb361241e216c130d15e8a6eb5d327c7715dfcb Mon Sep 17 00:00:00 2001
From: Bruce Cowan <bruce@bcowan.eu>
Date: Tue, 20 Mar 2018 13:28:40 +0000
Subject: [PATCH] Sort possibilities before display

---
 meson.build         |  6 +++---
 src/rugby-scoring.c | 31 ++++++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/meson.build b/meson.build
index eed8780..efd774c 100644
--- a/meson.build
+++ b/meson.build
@@ -1,12 +1,12 @@
 project('rugby', 'c', license:'LGPL')
 
 add_project_arguments('-Wdeprecated-declarations', language: 'c')
-add_project_arguments('-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_44', language: 'c')
-add_project_arguments('-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_44', language: 'c')
+add_project_arguments('-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_46', language: 'c')
+add_project_arguments('-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_46', language: 'c')
 add_project_arguments('-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_16', language: 'c')
 add_project_arguments('-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_16', language: 'c')
 
-gio_dep = dependency('gio-2.0', version: '>=2.44')
+gio_dep = dependency('gio-2.0', version: '>=2.46')
 gtk_dep = dependency('gtk+-3.0', version: '>=3.16')
 
 subdir('data')
diff --git a/src/rugby-scoring.c b/src/rugby-scoring.c
index 454dbbb..7beac8f 100644
--- a/src/rugby-scoring.c
+++ b/src/rugby-scoring.c
@@ -19,8 +19,35 @@
 #include "rugby-possibility.h"
 #include "rugby-scoring.h"
 
+static gint
+compare_func (gconstpointer a,
+              gconstpointer b,
+              gpointer user_data)
+{
+    gint atries, autries;
+    gint btries, butries;
+
+    g_object_get ((gpointer) a,
+                  "tries", &atries,
+                  "utries", &autries,
+                  NULL);
+    g_object_get ((gpointer) b,
+                  "tries", &btries,
+                  "utries", &butries,
+                  NULL);
+
+    gint trydiff = (atries + autries) - (btries + butries);
+
+    // Sort by total tries first, then converted
+    if (trydiff != 0)
+        return trydiff;
+    else
+        return atries - btries;
+}
+
 void
-rugby_scoring_get_possibilities (GListStore *store, gint score)
+rugby_scoring_get_possibilities (GListStore *store,
+                                 gint score)
 {
     gint max_tries = score / TRY_POINTS;
     gint max_utries = score / UTRY_POINTS;
@@ -47,6 +74,8 @@ rugby_scoring_get_possibilities (GListStore *store, gint score)
             }
         }
     }
+
+    g_list_store_sort (store, compare_func, NULL);
 }
 
 gint
-- 
GitLab