aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc/e-account-combo-box.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-06-20 07:05:26 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-06-20 07:05:26 +0800
commitc6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06 (patch)
tree0511fb4033ea74c0bc0c26aad4594868d78277a8 /widgets/misc/e-account-combo-box.c
parentf4d748a85c534cb8a693b6a1f1b3353adfd73b5b (diff)
parented2d22755ff21516e3284f38eefd080102dd3715 (diff)
downloadgsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.tar
gsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.tar.gz
gsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.tar.bz2
gsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.tar.lz
gsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.tar.xz
gsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.tar.zst
gsoc2013-evolution-c6aabcca4fa3e1af7cbb3b3295ef2c7d61b77d06.zip
Merge commit 'EVOLUTION_2_27_3' into kill-bonobo
Conflicts: composer/e-composer-header-table.h composer/e-composer-header.c composer/e-composer-private.c configure.ac mail/em-account-editor.c po/POTFILES.in po/or.po widgets/misc/e-search-bar.c
Diffstat (limited to 'widgets/misc/e-account-combo-box.c')
-rw-r--r--widgets/misc/e-account-combo-box.c47
1 files changed, 43 insertions, 4 deletions
diff --git a/widgets/misc/e-account-combo-box.c b/widgets/misc/e-account-combo-box.c
index 4286b0d26c..0ded393e72 100644
--- a/widgets/misc/e-account-combo-box.c
+++ b/widgets/misc/e-account-combo-box.c
@@ -65,6 +65,44 @@ account_combo_box_has_dupes (GList *list,
return (count > 1);
}
+static EAccount *
+account_combo_box_choose_account (EAccountComboBox *combo_box)
+{
+ EAccountList *account_list;
+ EAccount *account;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ account_list = e_account_combo_box_get_account_list (combo_box);
+ g_return_val_if_fail (account_list != NULL, NULL);
+
+ /* First try the default account. */
+
+ /* XXX EAccountList misuses const. */
+ account = (EAccount *)
+ e_account_list_get_default (account_list);
+
+ /* If there is no default account, give up. */
+ if (account == NULL)
+ return NULL;
+
+ /* Make sure the default account appears in the combo box. */
+ if (g_hash_table_lookup (combo_box->priv->index, account) != NULL)
+ return account;
+
+ /* Default account is disabled or otherwise unusable,
+ * so fall back to the first account in the combo box. */
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box));
+
+ if (!gtk_tree_model_get_iter_first (model, &iter))
+ return NULL;
+
+ gtk_tree_model_get (model, &iter, COLUMN_ACCOUNT, &account, -1);
+
+ return account;
+}
+
static gboolean
account_combo_box_test_account (EAccount *account)
{
@@ -417,11 +455,12 @@ e_account_combo_box_set_active (EAccountComboBox *combo_box,
account_list = combo_box->priv->account_list;
g_return_val_if_fail (account_list != NULL, FALSE);
- /* NULL means select the default account. */
- /* XXX EAccountList misuses const. */
+ /* NULL means choose an account ourselves. */
if (account == NULL)
- account = (EAccount *)
- e_account_list_get_default (account_list);
+ account = account_combo_box_choose_account (combo_box);
+
+ if (account == NULL)
+ return FALSE;
/* Lookup the tree row reference for the account. */
reference = g_hash_table_lookup (combo_box->priv->index, account);