From 7190ca926a151a3fa1fec7ec9faf6a490a378b8e Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Wed, 9 Dec 2009 11:59:33 +0000 Subject: account-chooser: display enabled accounts first (#604166) --- libempathy-gtk/empathy-account-chooser.c | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'libempathy-gtk/empathy-account-chooser.c') diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c index 61d63b32c..bd46efc16 100644 --- a/libempathy-gtk/empathy-account-chooser.c +++ b/libempathy-gtk/empathy-account-chooser.c @@ -503,6 +503,41 @@ account_manager_prepared_cb (GObject *source_object, g_signal_emit (chooser, signals[READY], 0); } +static gint +account_cmp (GtkTreeModel *model, + GtkTreeIter *a, + GtkTreeIter *b, + gpointer user_data) +{ + gboolean a_enabled, b_enabled; + gchar *a_text, *b_text; + gint result; + + gtk_tree_model_get (model, a, COL_ACCOUNT_ENABLED, &a_enabled, -1); + gtk_tree_model_get (model, b, COL_ACCOUNT_ENABLED, &b_enabled, -1); + + /* Enabled accounts are displayed first */ + if (a_enabled != b_enabled) + return a_enabled ? -1: 1; + + gtk_tree_model_get (model, a, COL_ACCOUNT_TEXT, &a_text, -1); + gtk_tree_model_get (model, b, COL_ACCOUNT_TEXT, &b_text, -1); + + if (a_text == b_text) + result = 0; + else if (a_text == NULL) + result = 1; + else if (b_text == NULL) + result = -1; + else + result = g_ascii_strcasecmp (a_text, b_text); + + g_free (a_text); + g_free (b_text); + + return result; +} + static void account_chooser_setup (EmpathyAccountChooser *chooser) { @@ -524,6 +559,11 @@ account_chooser_setup (EmpathyAccountChooser *chooser) G_TYPE_BOOLEAN, /* Enabled */ TP_TYPE_ACCOUNT); + gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store), + account_cmp, chooser, NULL); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), + GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING); + gtk_combo_box_set_model (combobox, GTK_TREE_MODEL (store)); renderer = gtk_cell_renderer_pixbuf_new (); -- cgit v1.2.3