* modest-account-mgr and clients:
[modest] / src / gtk / modest-msg-edit-window.c
index f8df86e..2ed3095 100644 (file)
@@ -153,7 +153,7 @@ get_transports (void)
        GSList *cursor, *accounts;
        
        account_mgr = modest_runtime_get_account_mgr();
-       cursor = accounts = modest_account_mgr_account_names (account_mgr, NULL);
+       cursor = accounts = modest_account_mgr_account_names (account_mgr);
        while (cursor) {
                gchar *account_name = (gchar*)cursor->data;
                gchar *from_string  = modest_account_mgr_get_from_string (account_mgr,
@@ -175,9 +175,17 @@ get_transports (void)
 }
 
 
+static void
+on_from_combo_changed (ModestComboBox *combo, ModestWindow *win)
+{
+       modest_window_set_active_account (
+               win, modest_combo_box_get_active_id(combo));
+}
+
+
 
 static void
-init_window (ModestMsgEditWindow *obj)
+init_window (ModestMsgEditWindow *obj, const gchar* account)
 {
        GtkWidget *to_button, *cc_button, *bcc_button; 
        GtkWidget *header_table;
@@ -192,11 +200,17 @@ init_window (ModestMsgEditWindow *obj)
        to_button     = gtk_button_new_with_label (_("To..."));
        cc_button     = gtk_button_new_with_label (_("Cc..."));
        bcc_button    = gtk_button_new_with_label (_("Bcc..."));
-
        
        protos = get_transports ();
-       priv->from_field    = modest_combo_box_new (protos);
+       priv->from_field    = modest_combo_box_new (protos, g_str_equal);
        modest_pair_list_free (protos);
+       if (account) {
+               modest_combo_box_set_active_id (MODEST_COMBO_BOX(priv->from_field),
+                                               (gpointer)account);
+               modest_window_set_active_account (MODEST_WINDOW(obj), account);
+       }
+       /* auto-update the active account */
+       g_signal_connect (G_OBJECT(priv->from_field), "changed", G_CALLBACK(on_from_combo_changed), obj);
        
        priv->to_field      = gtk_entry_new_with_max_length (80);
        priv->cc_field      = gtk_entry_new_with_max_length (80);
@@ -249,20 +263,58 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgEditWindow *self)
 }
 
 
+static void
+set_msg (ModestMsgEditWindow *self, TnyMsg *msg)
+{
+       TnyHeader *header;
+       GtkTextBuffer *buf;
+       const gchar *to, *cc, *bcc, *subject;
+       ModestMsgEditWindowPrivate *priv;
+       gchar *body;
+       
+       g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self));
+       g_return_if_fail (TNY_IS_MSG (msg));
+
+       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (self);
+
+       header  = tny_msg_get_header (msg);
+       to      = tny_header_get_to (header);
+       cc      = tny_header_get_cc (header);
+       bcc     = tny_header_get_bcc (header);
+       subject = tny_header_get_subject (header);
+
+       if (to)
+               gtk_entry_set_text (GTK_ENTRY(priv->to_field), to);
+       if (cc)
+               gtk_entry_set_text (GTK_ENTRY(priv->cc_field), cc);
+       if (bcc)
+               gtk_entry_set_text (GTK_ENTRY(priv->bcc_field),  bcc);
+       if (subject)
+               gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);
+
+       
+       buf  = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->msg_body));
+       body = modest_tny_msg_get_body (msg, FALSE);
+       if (body) 
+               gtk_text_buffer_set_text (buf, body, -1);
+       g_free (body);
+}
+
+
 ModestWindow *
-modest_msg_edit_window_new (ModestEditType type)
+modest_msg_edit_window_new (TnyMsg *msg, const gchar *account)
 {
-       GObject *obj;
+       ModestMsgEditWindow *self;
        ModestMsgEditWindowPrivate *priv;
        ModestWindowPrivate *parent_priv;
        GtkActionGroup *action_group;
        GError *error = NULL;
 
-       g_return_val_if_fail (type < MODEST_EDIT_TYPE_NUM, NULL);
+       g_return_val_if_fail (msg, NULL);
        
-       obj = g_object_new(MODEST_TYPE_MSG_EDIT_WINDOW, NULL);
-       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
-       parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
+       self = MODEST_MSG_EDIT_WINDOW(g_object_new(MODEST_TYPE_MSG_EDIT_WINDOW, NULL));
+       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(self);
+       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
        
        parent_priv->ui_manager = gtk_ui_manager_new();
        action_group = gtk_action_group_new ("ModestMsgEditWindowActions");
@@ -271,11 +323,11 @@ modest_msg_edit_window_new (ModestEditType type)
        gtk_action_group_add_actions (action_group,
                                      modest_msg_edit_action_entries,
                                      G_N_ELEMENTS (modest_msg_edit_action_entries),
-                                     obj);
+                                     self);
        gtk_action_group_add_toggle_actions (action_group,
                                             modest_msg_edit_toggle_action_entries,
                                             G_N_ELEMENTS (modest_msg_edit_toggle_action_entries),
-                                            obj);
+                                            self);
        gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0);
        g_object_unref (action_group);
 
@@ -291,10 +343,9 @@ modest_msg_edit_window_new (ModestEditType type)
        /* ****** */
 
        /* Add accelerators */
-       gtk_window_add_accel_group (GTK_WINDOW (obj), 
+       gtk_window_add_accel_group (GTK_WINDOW (self), 
                                    gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
 
-
        /* Toolbar / Menubar */
        priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar");
        priv->menubar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar");
@@ -302,61 +353,22 @@ modest_msg_edit_window_new (ModestEditType type)
        gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
 
        /* Init window */
-       init_window (MODEST_MSG_EDIT_WINDOW(obj));
+       init_window (MODEST_MSG_EDIT_WINDOW(self), account);
 
-       restore_settings (MODEST_MSG_EDIT_WINDOW(obj));
+       restore_settings (MODEST_MSG_EDIT_WINDOW(self));
        
-       gtk_window_set_title (GTK_WINDOW(obj), "Modest");
-       gtk_window_set_icon_from_file (GTK_WINDOW(obj), MODEST_APP_ICON, NULL);
-
-       g_signal_connect (G_OBJECT(obj), "delete-event",
-                         G_CALLBACK(on_delete_event), obj);
+       gtk_window_set_title (GTK_WINDOW(self), "Modest");
+       gtk_window_set_icon_from_file (GTK_WINDOW(self), MODEST_APP_ICON, NULL);
 
-       return (ModestWindow *) (obj);
-}
-
-void
-modest_msg_edit_window_set_msg (ModestMsgEditWindow *self, TnyMsg *msg)
-{
-       TnyHeader *header;
-       GtkTextBuffer *buf;
-       const gchar *to, *cc, *bcc, *subject;
-       ModestMsgEditWindowPrivate *priv;
-       gchar *body;
+       g_signal_connect (G_OBJECT(self), "delete-event",
+                         G_CALLBACK(on_delete_event), self);
        
-       g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self));
-       g_return_if_fail (TNY_IS_MSG (msg));
-
-       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (self);
-
-       header  = tny_msg_get_header (msg);
-       to      = tny_header_get_to (header);
-       cc      = tny_header_get_cc (header);
-       bcc     = tny_header_get_bcc (header);
-       subject = tny_header_get_subject (header);
-
-       if (to)
-               gtk_entry_set_text (GTK_ENTRY(priv->to_field), to);
-       if (cc)
-               gtk_entry_set_text (GTK_ENTRY(priv->cc_field), cc);
-       if (bcc)
-               gtk_entry_set_text (GTK_ENTRY(priv->bcc_field),  bcc);
-       if (subject)
-               gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);
-       
-       buf  = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->msg_body));
-       body = modest_tny_msg_get_body (msg, FALSE);
-       if (body) 
-               gtk_text_buffer_set_text (buf, body, -1);
-       g_free (body);
+       set_msg (self, msg);
        
-       /* TODO: lower priority, select in the From: combo to the
-          value that comes from msg <- not sure, should it be
-          allowed? */
-       
-       /* TODO: set attachments */
+       return MODEST_WINDOW(self);
 }
 
+
 MsgData * 
 modest_msg_edit_window_get_msg_data (ModestMsgEditWindow *edit_window)
 {