* src/modest-text-utils.[ch]:
[modest] / src / maemo / modest-msg-edit-window.c
index 8650857..96eb886 100644 (file)
@@ -181,12 +181,6 @@ static void text_buffer_mark_set (GtkTextBuffer *buffer,
 void vadj_changed (GtkAdjustment *adj, 
                   ModestMsgEditWindow *window);
 
-static ModestPair *find_transport_from_message_sender (ModestPairList *transports,
-                                                      TnyMsg *msg);
-
-
-
-
 static void DEBUG_BUFFER (WPTextBuffer *buffer)
 {
 #ifdef DEBUG
@@ -247,7 +241,7 @@ struct _ModestMsgEditWindowPrivate {
        
        ModestPairList *from_field_protos;
        GtkWidget   *from_field;
-       const gchar *original_account_name;
+       gchar       *original_account_name;
        
        GtkWidget   *to_field;
        GtkWidget   *cc_field;
@@ -275,6 +269,8 @@ struct _ModestMsgEditWindowPrivate {
        GtkWidget   *find_toolbar;
        gchar       *last_search;
 
+       GtkWidget   *font_dialog;
+
        GtkWidget   *scroll;
        guint        scroll_drag_timeout_id;
        gdouble      last_upper;
@@ -447,6 +443,8 @@ modest_msg_edit_window_init (ModestMsgEditWindow *obj)
        priv->scroll_drag_timeout_id = 0;
        priv->last_upper = 0.0;
 
+       priv->font_dialog = NULL;
+
        modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
                                            GTK_WINDOW(obj),"applications_email_editor");
 
@@ -499,47 +497,6 @@ get_transports (void)
        return transports;
 }
 
-/**
- * Search an (account, address) ModestPairList for a pair whose
- * address matches the one in the From: header of a TnyMsg
- *
- * @result: A ModestPair * with a matching address, or NULL if none found
- */
-static ModestPair *
-find_transport_from_message_sender (ModestPairList *transports, TnyMsg *msg)
-{
-       ModestPair *account_pair = NULL;
-       gchar *from;
-       TnyHeader *header;
-
-       g_return_val_if_fail (transports, NULL);
-       g_return_val_if_fail (msg, NULL);
-
-       header = tny_msg_get_header (msg);
-
-       if (header != NULL && (from = tny_header_dup_from (header))) {
-               GSList *iter;
-               char *from_addr;
-
-               from_addr = modest_text_utils_get_email_address (from);
-               g_free (from);
-               for (iter = transports; iter && !account_pair; iter = iter->next) {
-                       ModestPair *pair = (ModestPair *) iter->data;
-                       char *account_addr = modest_text_utils_get_email_address ((char *) pair->second);
-                       if (account_addr && !strcasecmp(from_addr, account_addr)) {
-                               account_pair = pair;
-                       }
-                       g_free (account_addr);
-               }
-               g_free (from_addr);
-       }
-
-       if (header)
-               g_object_unref (header);
-
-       return account_pair;
-}
-
 static void window_focus (GtkWindow *window,
                          GtkWidget *widget,
                          gpointer userdata)
@@ -966,6 +923,10 @@ modest_msg_edit_window_finalize (GObject *obj)
           call this function before */
        modest_msg_edit_window_disconnect_signals (MODEST_WINDOW (obj));
 
+       if (priv->font_dialog != NULL) {
+               gtk_dialog_response (GTK_DIALOG (priv->font_dialog), GTK_RESPONSE_NONE);
+       }
+
        if (priv->clipboard_text != NULL) {
                g_free (priv->clipboard_text);
                priv->clipboard_text = NULL;
@@ -997,6 +958,8 @@ modest_msg_edit_window_finalize (GObject *obj)
                g_source_remove (priv->clipboard_owner_idle);
                priv->clipboard_owner_idle = 0;
        }
+       if (priv->original_account_name)
+               g_free (priv->original_account_name);
        g_free (priv->msg_uid);
        g_free (priv->last_search);
        g_slist_free (priv->font_items_group);
@@ -1508,7 +1471,6 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name, gboolean pre
        GObject *obj;
        ModestWindowPrivate *parent_priv;
        ModestMsgEditWindowPrivate *priv;
-       ModestPair *account_pair = NULL;
        ModestDimmingRulesGroup *menu_rules_group = NULL;
        ModestDimmingRulesGroup *toolbar_rules_group = NULL;
        ModestDimmingRulesGroup *clipboard_rules_group = NULL;
@@ -1529,6 +1491,7 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name, gboolean pre
        hildon_window_set_menu (HILDON_WINDOW (obj), GTK_MENU (parent_priv->menubar));
        priv->from_field_protos = get_transports ();
        modest_combo_box_set_pair_list (MODEST_COMBO_BOX (priv->from_field), priv->from_field_protos);
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->from_field), (gpointer) account_name);
        modest_msg_edit_window_setup_toolbar (MODEST_MSG_EDIT_WINDOW (obj));
        hildon_window_add_toolbar (HILDON_WINDOW (obj), GTK_TOOLBAR (priv->find_toolbar));
 
@@ -1539,14 +1502,7 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name, gboolean pre
                
        modest_window_set_active_account (MODEST_WINDOW(obj), account_name);
 
-       account_pair = find_transport_from_message_sender (priv->from_field_protos, msg);
-       if (account_pair == NULL) {
-               account_pair = modest_pair_list_find_by_first_as_string (priv->from_field_protos, account_name);
-       }
-       if (account_pair != NULL)
-               modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->from_field), account_pair->first);
-
-       priv->original_account_name = account_pair ? (const gchar *) account_pair->first : NULL;
+       priv->original_account_name = (account_name) ? g_strdup (account_name) : NULL;
 
        parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new ();
        menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE);
@@ -1630,6 +1586,8 @@ get_formatted_data (ModestMsgEditWindow *edit_window)
 
        wp_text_buffer_save_document (WP_TEXT_BUFFER(priv->text_buffer), get_formatted_data_cb, &string_buffer);
 
+       modest_text_utils_hyperlinkify (string_buffer);
+
        gtk_text_buffer_set_modified (priv->text_buffer, TRUE);
 
        return g_string_free (string_buffer, FALSE);
@@ -2302,7 +2260,7 @@ modest_msg_edit_window_offer_attach_file (ModestMsgEditWindow *window)
                
        priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
 
-       if (modest_platform_check_memory_low (MODEST_WINDOW(window)))
+       if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
                return;
        
        dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN);
@@ -2703,10 +2661,9 @@ modest_msg_edit_window_open_addressbook (ModestMsgEditWindow *window,
        /* we check for low-mem; in that case, show a warning, and don't allow
         * for the addressbook
         */
-       if (modest_platform_check_memory_low (MODEST_WINDOW(window)))
+       if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
                return;
 
-
        priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
 
        if (editor == NULL) {
@@ -2926,7 +2883,9 @@ modest_msg_edit_window_select_font (ModestMsgEditWindow *window)
                      NULL);
 
        gtk_widget_show_all (dialog);
+       priv->font_dialog = dialog;
        response = gtk_dialog_run (GTK_DIALOG (dialog));
+       priv->font_dialog = NULL;
        if (response == GTK_RESPONSE_OK) {
 
                g_object_get( dialog,