aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/misc/e-account-combo-box.c47
-rw-r--r--widgets/misc/e-attachment-paned.c15
-rw-r--r--widgets/misc/e-attachment-paned.h4
3 files changed, 62 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);
diff --git a/widgets/misc/e-attachment-paned.c b/widgets/misc/e-attachment-paned.c
index a88f9fa8b2..a65d1c6ea4 100644
--- a/widgets/misc/e-attachment-paned.c
+++ b/widgets/misc/e-attachment-paned.c
@@ -45,6 +45,7 @@ struct _EAttachmentPanedPrivate {
GtkWidget *expander;
GtkWidget *notebook;
GtkWidget *combo_box;
+ GtkWidget *controls_container;
GtkWidget *icon_view;
GtkWidget *tree_view;
GtkWidget *show_hide_label;
@@ -574,6 +575,7 @@ attachment_paned_init (EAttachmentPaned *paned)
widget = gtk_hbox_new (FALSE, 6);
gtk_box_pack_end (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ paned->priv->controls_container = widget;
gtk_widget_show (widget);
container = widget;
@@ -775,3 +777,16 @@ e_attachment_paned_drag_data_received (EAttachmentPaned *paned,
paned->priv->icon_view, "drag-data-received",
context, x, y, selection, info, time);
}
+
+GtkWidget *
+e_attachment_paned_get_controls_container (EAttachmentPaned *paned)
+{
+ return paned->priv->controls_container;
+}
+
+GtkWidget *
+e_attachment_paned_get_view_combo (EAttachmentPaned *paned)
+{
+ return paned->priv->combo_box;
+}
+
diff --git a/widgets/misc/e-attachment-paned.h b/widgets/misc/e-attachment-paned.h
index 401ec581cb..825de3a16b 100644
--- a/widgets/misc/e-attachment-paned.h
+++ b/widgets/misc/e-attachment-paned.h
@@ -78,6 +78,10 @@ void e_attachment_paned_drag_data_received
GtkSelectionData *selection,
guint info,
guint time);
+GtkWidget * e_attachment_paned_get_controls_container
+ (EAttachmentPaned *paned);
+GtkWidget * e_attachment_paned_get_view_combo
+ (EAttachmentPaned *paned);
G_END_DECLS