[gnome-calendar/calendar-management] source-manager: rewrite sources sort function



commit e0040bc959395c3335144541cbb5b4ac5f99958d
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Fri Feb 6 12:58:25 2015 -0200

    source-manager: rewrite sources sort function

 src/gcal-source-manager-dialog.c |   51 ++++++++++++-------------------------
 1 files changed, 17 insertions(+), 34 deletions(-)
---
diff --git a/src/gcal-source-manager-dialog.c b/src/gcal-source-manager-dialog.c
index 0e197af..f2e8402 100644
--- a/src/gcal-source-manager-dialog.c
+++ b/src/gcal-source-manager-dialog.c
@@ -55,12 +55,6 @@ enum {
   PROP_MANAGER
 };
 
-enum {
-  SOURCE_GOOGLE,
-  SOURCE_OWNCLOUD,
-  SOURCE_OTHER
-};
-
 /* callbacks */
 static gboolean button_release_cb                          (GtkWidget           *widget,
                                                             GdkEventButton      *event,
@@ -589,7 +583,7 @@ sort_func_cb (GtkListBoxRow *current,
   GcalSourceManagerDialogPrivate *priv;
   ESource *current_source, *prev_source;
   GcalSourceOrigin *current_origin, *prev_origin;
-  gint current_ext, prev_ext;
+  gint name_cmp;
 
   priv = gcal_source_manager_dialog_get_instance_private (GCAL_SOURCE_MANAGER_DIALOG (user_data));
 
@@ -599,39 +593,28 @@ sort_func_cb (GtkListBoxRow *current,
   prev_source = g_hash_table_lookup (priv->row_to_source, before);
   prev_origin = g_hash_table_lookup (priv->source_origin, prev_source);
 
-  /* current row */
-  if (g_strcmp0 (current_origin->name, "Google") == 0)
-    current_ext = SOURCE_GOOGLE;
-  else if (g_strcmp0 (current_origin->name, "ownCloud") == 0)
-    current_ext = SOURCE_OWNCLOUD;
-  else
-    current_ext = SOURCE_OTHER;
-
-  /* previous row */
-  if (g_strcmp0 (prev_origin->name, "Google") == 0)
-    prev_ext = SOURCE_GOOGLE;
-  else if (g_strcmp0 (prev_origin->name, "ownCloud") == 0)
-    prev_ext = SOURCE_OWNCLOUD;
-  else
-    prev_ext = SOURCE_OTHER;
+  /* compare by source names */
+  name_cmp = g_strcmp0 (current_origin->name, prev_origin->name);
 
-  if (current_ext == prev_ext)
+  if (name_cmp == 0)
     {
-      /**
-       * If they are GOA sources, we must first check
-       * the account. Only if the accounts mismatch is
-       * when we compare by the source name.
-       */
-      if (current_ext != SOURCE_OTHER)
+      /* Compare by account name */
+      gint account_cmp = g_strcmp0 (current_origin->account, prev_origin->account);
+
+      if (account_cmp == 0)
         {
-          if (g_strcmp0 (current_origin->account, prev_origin->account) != 0)
-            return g_strcmp0 (current_origin->account, prev_origin->account);
+          return account_cmp;
+        }
+      else
+        {
+          // Compare by source name
+          return g_strcmp0 (e_source_get_display_name (current_source), e_source_get_display_name 
(prev_source));
         }
-
-      return g_strcmp0 (e_source_get_display_name (current_source), e_source_get_display_name (prev_source));
     }
   else
-    return (current_ext > prev_ext ? 1 : -1);
+    {
+      return name_cmp;
+    }
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]