[gnome-calendar/calendar-management] source-manager: properly sort sources
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/calendar-management] source-manager: properly sort sources
- Date: Tue, 3 Feb 2015 17:30:18 +0000 (UTC)
commit 39e226b73bc0260e4b84c2674060dabaf42baeba
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Tue Feb 3 15:27:23 2015 -0200
source-manager: properly sort sources
src/gcal-source-manager-dialog.c | 54 +++++++++++++++++++++----------------
1 files changed, 31 insertions(+), 23 deletions(-)
---
diff --git a/src/gcal-source-manager-dialog.c b/src/gcal-source-manager-dialog.c
index 9f25536..86c47fc 100644
--- a/src/gcal-source-manager-dialog.c
+++ b/src/gcal-source-manager-dialog.c
@@ -50,7 +50,7 @@ enum {
};
enum {
- SOURCE_GOA,
+ SOURCE_GOOGLE,
SOURCE_OWNCLOUD,
SOURCE_OTHER
};
@@ -304,42 +304,50 @@ sort_func_cb (GtkListBoxRow *current,
{
GcalSourceManagerDialogPrivate *priv;
ESource *current_source, *prev_source;
+ GcalSourceOrigin *current_origin, *prev_origin;
gint current_ext, prev_ext;
priv = gcal_source_manager_dialog_get_instance_private (GCAL_SOURCE_MANAGER_DIALOG (user_data));
current_source = g_hash_table_lookup (priv->row_to_source, current);
- prev_source = g_hash_table_lookup (priv->row_to_source, before);
+ current_origin = g_hash_table_lookup (priv->source_origin, current_source);
- /* TODO: improve code to select the extension source */
+ prev_source = g_hash_table_lookup (priv->row_to_source, before);
+ prev_origin = g_hash_table_lookup (priv->source_origin, prev_source);
- /* online accounts */
- if (e_source_has_extension (current_source, E_SOURCE_EXTENSION_GOA))
- {
- current_ext = SOURCE_GOA;
- goto previous_row;
- }
+ /* 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;
- }
+ current_ext = SOURCE_OTHER;
-previous_row:
+ /* 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;
- /* online accounts */
- if (e_source_has_extension (prev_source, E_SOURCE_EXTENSION_GOA))
+ if (current_ext == prev_ext)
{
- prev_ext = SOURCE_GOA;
+ /**
+ * 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)
+ {
+ if (g_strcmp0 (current_origin->account, prev_origin->account) != 0)
+ return g_strcmp0 (current_origin->account, prev_origin->account);
+ }
+
+ return g_strcmp0 (e_source_get_display_name (current_source), e_source_get_display_name (prev_source));
}
else
- {
- prev_ext = SOURCE_OTHER;
- }
-
- if (current_ext != prev_ext)
return (current_ext > prev_ext ? 1 : -1);
- else
- return g_strcmp0 (e_source_get_display_name (current_source), e_source_get_display_name (prev_source));
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]