X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-msg-edit-window.c;h=da9416480dc1780f4a9868de05f2bdbeb1dfbb60;hp=93f2c7d4472f32caade6de09846e507431824a18;hb=362784ce756b3f0e31cd451d9ac5e69b909d4053;hpb=5714942850467761bfff8f50c0cb60fee6f6a74e diff --git a/src/maemo/modest-msg-edit-window.c b/src/maemo/modest-msg-edit-window.c index 93f2c7d..da94164 100644 --- a/src/maemo/modest-msg-edit-window.c +++ b/src/maemo/modest-msg-edit-window.c @@ -120,7 +120,8 @@ static void modest_msg_edit_window_add_attachment_clicked (GtkButton *button, ModestMsgEditWindow *window); /* ModestWindow methods implementation */ -static void modest_msg_edit_window_set_zoom (ModestWindow *window, gdouble zoom); +static void modest_msg_edit_window_disconnect_signals (ModestWindow *window); +static void modest_msg_edit_window_set_zoom (ModestWindow *window, gdouble zoom); static gdouble modest_msg_edit_window_get_zoom (ModestWindow *window); static gboolean modest_msg_edit_window_zoom_minus (ModestWindow *window); static gboolean modest_msg_edit_window_zoom_plus (ModestWindow *window); @@ -249,6 +250,7 @@ struct _ModestMsgEditWindowPrivate { gulong clipboard_change_handler_id; TnyMsg *draft_msg; + TnyMsg *outbox_msg; gboolean sent; }; @@ -320,10 +322,9 @@ modest_msg_edit_window_class_init (ModestMsgEditWindowClass *klass) modest_window_class->zoom_minus_func = modest_msg_edit_window_zoom_minus; modest_window_class->show_toolbar_func = modest_msg_edit_window_show_toolbar; modest_window_class->save_state_func = save_state; + modest_window_class->disconnect_signals_func = modest_msg_edit_window_disconnect_signals; g_type_class_add_private (gobject_class, sizeof(ModestMsgEditWindowPrivate)); - - } static void @@ -352,6 +353,7 @@ modest_msg_edit_window_init (ModestMsgEditWindow *obj) priv->last_search = NULL; priv->draft_msg = NULL; + priv->outbox_msg = NULL; priv->clipboard_change_handler_id = 0; priv->sent = FALSE; } @@ -554,17 +556,25 @@ init_window (ModestMsgEditWindow *obj) } +static void +modest_msg_edit_window_disconnect_signals (ModestWindow *window) +{ + ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); + if (g_signal_handler_is_connected (gtk_clipboard_get (GDK_SELECTION_PRIMARY), + priv->clipboard_change_handler_id)) + g_signal_handler_disconnect (gtk_clipboard_get (GDK_SELECTION_PRIMARY), + priv->clipboard_change_handler_id); +} static void modest_msg_edit_window_finalize (GObject *obj) { ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (obj); - if (priv->clipboard_change_handler_id > 0) { - g_signal_handler_disconnect (gtk_clipboard_get (GDK_SELECTION_PRIMARY), priv->clipboard_change_handler_id); - priv->clipboard_change_handler_id = 0; - } + /* Sanity check: shouldn't be needed, the window mgr should + call this function before */ + modest_msg_edit_window_disconnect_signals (MODEST_WINDOW (obj)); if (priv->draft_msg != NULL) { TnyHeader *header = tny_msg_get_header (priv->draft_msg); @@ -575,6 +585,15 @@ modest_msg_edit_window_finalize (GObject *obj) g_object_unref (priv->draft_msg); priv->draft_msg = NULL; } + if (priv->outbox_msg != NULL) { + TnyHeader *header = tny_msg_get_header (priv->outbox_msg); + if (TNY_IS_HEADER (header)) { + ModestWindowMgr *mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_unregister_header (mgr, header); + } + g_object_unref (priv->outbox_msg); + priv->outbox_msg = NULL; + } /* This had to stay alive for as long as the combobox that used it: */ modest_pair_list_free (priv->from_field_protos); @@ -663,7 +682,7 @@ replace_with_attachments (ModestMsgEditWindow *self, GList *attachments) g_object_unref (stream); if (pixbuf != NULL) { - wp_text_buffer_replace_image (WP_TEXT_BUFFER (priv->text_buffer), cid, pixbuf); +/* wp_text_buffer_replace_image (WP_TEXT_BUFFER (priv->text_buffer), cid, pixbuf); */ g_object_unref (pixbuf); } } @@ -691,7 +710,7 @@ update_last_cid (ModestMsgEditWindow *self, GList *attachments) } static void -set_msg (ModestMsgEditWindow *self, TnyMsg *msg) +set_msg (ModestMsgEditWindow *self, TnyMsg *msg, gboolean preserve_is_rich) { TnyHeader *header; const gchar *to, *cc, *bcc, *subject; @@ -700,6 +719,7 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) GtkTextIter iter; TnyHeaderFlags priority_flags; TnyFolder *msg_folder; + gboolean is_html = FALSE; g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self)); g_return_if_fail (TNY_IS_MSG (msg)); @@ -739,11 +759,12 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) update_window_title (self); wp_text_buffer_reset_buffer (WP_TEXT_BUFFER (priv->text_buffer), TRUE); - body = modest_tny_msg_get_body (msg, TRUE); + body = modest_tny_msg_get_body (msg, TRUE, &is_html); if ((body == NULL)||(body[0] == '\0')) { g_free (body); body = modest_text_utils_convert_to_html (""); + is_html = FALSE; } wp_text_buffer_load_document_begin (WP_TEXT_BUFFER (priv->text_buffer), TRUE); wp_text_buffer_load_document_write (WP_TEXT_BUFFER (priv->text_buffer), @@ -752,8 +773,10 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) wp_text_buffer_load_document_end (WP_TEXT_BUFFER (priv->text_buffer)); g_free (body); + if (preserve_is_rich && !is_html) { + wp_text_buffer_enable_rich_text (WP_TEXT_BUFFER (priv->text_buffer), FALSE); /* Get the default format required from configuration */ - if (!modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_PREFER_FORMATTED_TEXT, NULL)) { + } else if (!modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_PREFER_FORMATTED_TEXT, NULL)) { wp_text_buffer_enable_rich_text (WP_TEXT_BUFFER (priv->text_buffer), FALSE); } @@ -793,10 +816,14 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) /* we should set a reference to the incoming message if it is a draft */ msg_folder = tny_msg_get_folder (msg); - if (msg_folder) { - if (modest_tny_folder_is_local_folder (msg_folder) && - modest_tny_folder_get_local_or_mmc_folder_type (msg_folder) == TNY_FOLDER_TYPE_DRAFTS) - priv->draft_msg = g_object_ref(msg); + if (msg_folder) { + if (modest_tny_folder_is_local_folder (msg_folder)) { + TnyFolderType type = modest_tny_folder_get_local_or_mmc_folder_type (msg_folder); + if (type == TNY_FOLDER_TYPE_DRAFTS) + priv->draft_msg = g_object_ref(msg); + if (type == TNY_FOLDER_TYPE_OUTBOX) + priv->outbox_msg = g_object_ref(msg); + } g_object_unref (msg_folder); } } @@ -985,7 +1012,7 @@ modest_msg_edit_window_setup_toolbar (ModestMsgEditWindow *window) ModestWindow* -modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) +modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name, gboolean preserve_is_rich) { GObject *obj; ModestWindowPrivate *parent_priv; @@ -1079,7 +1106,7 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) if (account_pair != NULL) modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->from_field), account_pair->first); - set_msg (MODEST_MSG_EDIT_WINDOW (obj), msg); + set_msg (MODEST_MSG_EDIT_WINDOW (obj), msg, preserve_is_rich); text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), MODEST_MSG_EDIT_WINDOW (obj)); @@ -1127,6 +1154,8 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) update_paste_dimming (MODEST_MSG_EDIT_WINDOW (obj)); priv->update_caption_visibility = TRUE; + + reset_modified (MODEST_MSG_EDIT_WINDOW (obj)); return (ModestWindow*) obj; } @@ -1184,6 +1213,9 @@ modest_msg_edit_window_get_msg_data (ModestMsgEditWindow *edit_window) data->subject = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->subject_field))); if (priv->draft_msg) { data->draft_msg = g_object_ref (priv->draft_msg); + } + if (priv->outbox_msg) { + data->draft_msg = g_object_ref (priv->outbox_msg); } else { data->draft_msg = NULL; } @@ -1191,7 +1223,7 @@ modest_msg_edit_window_get_msg_data (ModestMsgEditWindow *edit_window) GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->msg_body)); GtkTextIter b, e; gtk_text_buffer_get_bounds (buf, &b, &e); - data->plain_body = g_strdup (gtk_text_buffer_get_text (priv->text_buffer, &b, &e, FALSE)); /* returns a copy */ + data->plain_body = modest_text_utils_text_buffer_get_text (priv->text_buffer); /* returns a copy */ if (wp_text_buffer_is_rich_text (WP_TEXT_BUFFER (priv->text_buffer))) data->html_body = get_formatted_data (edit_window); /* returns a copy. */ @@ -1341,7 +1373,7 @@ modest_msg_edit_window_set_format_state (ModestMsgEditWindow *self, buffer_format->cs.bold = ((buffer_format->bold&0x1) != (current_format->bold&0x1)); buffer_format->cs.italic = ((buffer_format->italic&0x1) != (current_format->italic&0x1)); - buffer_format->cs.color = gdk_color_equal(&(buffer_format->color), &(current_format->color)); + buffer_format->cs.color = !gdk_color_equal(&(buffer_format->color), &(current_format->color)); buffer_format->cs.font_size = (buffer_format->font_size != current_format->font_size); buffer_format->cs.font = (buffer_format->font != current_format->font); buffer_format->cs.justification = (buffer_format->justification != current_format->justification); @@ -1379,11 +1411,11 @@ modest_msg_edit_window_set_format_state (ModestMsgEditWindow *self, if (buffer_format->cs.font) { wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_FONT, (gpointer) (buffer_format->font)); } + wp_text_buffer_thaw (WP_TEXT_BUFFER (priv->text_buffer)); if (buffer_format->cs.bullet) { - wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_BULLET, (gpointer) ((int)buffer_format->bullet)); + wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_BULLET, (gpointer) ((buffer_format->bullet)?1:0)); } /* wp_text_buffer_set_format (WP_TEXT_BUFFER (priv->text_buffer), buffer_format); */ - wp_text_buffer_thaw (WP_TEXT_BUFFER (priv->text_buffer)); g_free (current_format);