X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-msg-edit-window.c;h=45f2738093483a99f4cede6b4d01774bf564e285;hp=70d6325ef8bdd57d24a2688c46da19fe8587d8ea;hb=976c05744180efac28a9dc421acefcff18659d67;hpb=bc05e7d854f13b3400ac9e7592a603d562e42226 diff --git a/src/maemo/modest-msg-edit-window.c b/src/maemo/modest-msg-edit-window.c index 70d6325..45f2738 100644 --- a/src/maemo/modest-msg-edit-window.c +++ b/src/maemo/modest-msg-edit-window.c @@ -55,39 +55,15 @@ #include "modest-tny-platform-factory.h" #include "modest-tny-msg.h" #include "modest-address-book.h" +#include "modest-text-utils.h" #include #include #include #include "modest-scroll-area.h" -#ifdef MODEST_HILDON_VERSION_0 -#include -#include -#include -#include -#include -#include -#include -#else -#include -#include -#include -#include -#include -#include -#include -#include -#endif /* MODEST_HILDON_VERSION_0*/ - - +#include "modest-hildon-includes.h" #include "widgets/modest-msg-edit-window-ui.h" -#ifdef MODEST_HILDON_VERSION_0 -#else - -#endif /*MODEST_HILDON_VERSION_0 */ - - #define DEFAULT_FONT_SIZE 3 #define DEFAULT_FONT 2 @@ -100,6 +76,14 @@ static void modest_msg_edit_window_class_init (ModestMsgEditWindowClass *klas static void modest_msg_edit_window_init (ModestMsgEditWindow *obj); static void modest_msg_edit_window_finalize (GObject *obj); +static gboolean msg_body_focus (GtkWidget *focus, GdkEventFocus *event, gpointer userdata); +static void to_field_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor); +static void send_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor); +static void style_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor); +static void setup_insensitive_handlers (ModestMsgEditWindow *editor); +static void reset_modified (ModestMsgEditWindow *editor); +static gboolean is_modified (ModestMsgEditWindow *editor); + static void text_buffer_refresh_attributes (WPTextBuffer *buffer, ModestMsgEditWindow *window); static void text_buffer_mark_set (GtkTextBuffer *buffer, GtkTextIter *location, GtkTextMark *mark, gpointer userdata); static void text_buffer_can_undo (GtkTextBuffer *buffer, gboolean can_undo, ModestMsgEditWindow *window); @@ -168,6 +152,8 @@ struct _ModestMsgEditWindowPrivate { TnyHeaderFlags priority_flags; gdouble zoom_level; + + TnyMsg *draft_msg; }; #define MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -245,6 +231,8 @@ modest_msg_edit_window_init (ModestMsgEditWindow *obj) priv->bcc_caption = NULL; priv->priority_flags = 0; + + priv->draft_msg = NULL; } @@ -253,7 +241,7 @@ static void save_settings (ModestMsgEditWindow *self) { modest_widget_memory_save (modest_runtime_get_conf(), - G_OBJECT(self), "modest-edit-msg-window"); + G_OBJECT(self), MODEST_CONF_EDIT_WINDOW_KEY); } @@ -261,7 +249,7 @@ static void restore_settings (ModestMsgEditWindow *self) { modest_widget_memory_restore (modest_runtime_get_conf(), - G_OBJECT(self), "modest-edit-msg-window"); + G_OBJECT(self), MODEST_CONF_EDIT_WINDOW_KEY); } @@ -274,7 +262,8 @@ get_transports (void) GSList *cursor, *accounts; account_mgr = modest_runtime_get_account_mgr(); - cursor = accounts = modest_account_mgr_account_names (account_mgr); + cursor = accounts = modest_account_mgr_account_names (account_mgr, + TRUE /* only enabled accounts. */); while (cursor) { gchar *account_name = (gchar*)cursor->data; gchar *from_string = modest_account_mgr_get_from_string (account_mgr, @@ -424,6 +413,14 @@ init_window (ModestMsgEditWindow *obj) g_signal_connect_swapped (G_OBJECT (priv->bcc_field), "open-addressbook", G_CALLBACK (modest_msg_edit_window_open_addressbook), obj); + g_signal_connect (G_OBJECT (priv->msg_body), "focus-in-event", + G_CALLBACK (msg_body_focus), obj); + g_signal_connect (G_OBJECT (priv->msg_body), "focus-out-event", + G_CALLBACK (msg_body_focus), obj); + g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field))), + "changed", G_CALLBACK (to_field_changed), obj); + to_field_changed (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field)), MODEST_MSG_EDIT_WINDOW (obj)); + priv->scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scroll), GTK_SHADOW_NONE); @@ -463,8 +460,39 @@ modest_msg_edit_window_finalize (GObject *obj) static gboolean on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgEditWindow *self) { + GtkWidget *close_dialog; + ModestMsgEditWindowPrivate *priv; + gint response; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (self); save_settings (self); - return FALSE; + if (is_modified (self)) { + close_dialog = hildon_note_new_confirmation (GTK_WINDOW (self), _("mcen_nc_no_email_message_modified_save_changes")); + response = gtk_dialog_run (GTK_DIALOG (close_dialog)); + gtk_widget_destroy (close_dialog); + + if (response != GTK_RESPONSE_CANCEL) { + modest_ui_actions_on_save_to_drafts (NULL, self); + } + } +/* /\* remove old message from drafts *\/ */ +/* if (priv->draft_msg) { */ +/* TnyHeader *header = tny_msg_get_header (priv->draft_msg); */ +/* TnyAccount *account = modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), */ +/* account_name, */ +/* TNY_ACCOUNT_TYPE_STORE); */ +/* TnyFolder *folder = modest_tny_account_get_special_folder (account, TNY_FOLDER_TYPE_DRAFTS); */ +/* g_return_val_if_fail (TNY_IS_HEADER (header), FALSE); */ +/* g_return_val_if_fail (TNY_IS_FOLDER (folder), FALSE); */ +/* tny_folder_remove_msg (folder, header, NULL); */ +/* g_object_unref (folder); */ +/* g_object_unref (header); */ +/* g_object_unref (priv->draft_msg); */ +/* priv->draft_msg = NULL; */ +/* } */ + gtk_widget_destroy (GTK_WIDGET (self)); + + return TRUE; } static GtkWidget * @@ -497,8 +525,10 @@ static void set_msg (ModestMsgEditWindow *self, TnyMsg *msg) { TnyHeader *header; - const gchar *to, *cc, *bcc, *subject, *body; + const gchar *to, *cc, *bcc, *subject; + gchar *body; ModestMsgEditWindowPrivate *priv; + GtkTextIter iter; g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self)); g_return_if_fail (TNY_IS_MSG (msg)); @@ -523,30 +553,26 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) /* gtk_text_buffer_set_can_paste_rich_text (priv->text_buffer, TRUE); */ wp_text_buffer_reset_buffer (WP_TEXT_BUFFER (priv->text_buffer), TRUE); body = modest_tny_msg_get_body (msg, FALSE); - if ((body!=NULL) && (body[0] != '\0')) { - 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), - (gchar *) body, - -1); - wp_text_buffer_load_document_end (WP_TEXT_BUFFER (priv->text_buffer)); - } else { - WPTextBufferFormat fmt = {0}; - - fmt.font_size = DEFAULT_FONT_SIZE; - fmt.font = DEFAULT_FONT; - fmt.rich_text = 1; - fmt.text_position = TEXT_POSITION_NORMAL; - fmt.justification = 0; - fmt.cs.font_size = 1; - fmt.cs.font = 1; - fmt.cs.text_position = 1; - fmt.cs.justification = 1; - wp_text_buffer_set_format (WP_TEXT_BUFFER (priv->text_buffer), &fmt); + + if ((body == NULL)||(body[0] == '\0')) { + g_free (body); + body = modest_text_utils_convert_to_html (""); + } + 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), + (gchar *) body, + strlen (body)); + wp_text_buffer_load_document_end (WP_TEXT_BUFFER (priv->text_buffer)); + g_free (body); + + /* Get the default format required from configuration */ + 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); } /* Set the default focus depending on having already a To: field or not */ if ((!to)||(*to == '\0')) { - gtk_widget_grab_focus (priv->to_field); + modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->to_field)); } else { gtk_widget_grab_focus (priv->msg_body); } @@ -560,8 +586,15 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) if (priv->attachments == NULL) gtk_widget_hide_all (priv->attachments_caption); + gtk_text_buffer_get_start_iter (priv->text_buffer, &iter); + gtk_text_buffer_place_cursor (priv->text_buffer, &iter); + + reset_modified (self); + update_dimmed (self); text_buffer_can_undo (priv->text_buffer, FALSE, self); + + priv->draft_msg = msg; } static void @@ -787,7 +820,7 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) gtk_action_group_add_radio_actions (action_group, modest_msg_edit_file_format_action_entries, G_N_ELEMENTS (modest_msg_edit_file_format_action_entries), - MODEST_FILE_FORMAT_FORMATTED_TEXT, + modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_PREFER_FORMATTED_TEXT, NULL), G_CALLBACK (modest_ui_actions_msg_edit_on_change_file_format), obj); gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0); @@ -824,6 +857,8 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) modest_msg_edit_window_setup_toolbar (MODEST_MSG_EDIT_WINDOW (obj)); + setup_insensitive_handlers (MODEST_MSG_EDIT_WINDOW (obj)); + set_msg (MODEST_MSG_EDIT_WINDOW (obj), msg); text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), MODEST_MSG_EDIT_WINDOW (obj)); @@ -1158,7 +1193,7 @@ modest_msg_edit_window_select_color (ModestMsgEditWindow *window) ModestMsgEditWindowPrivate *priv; GtkWidget *dialog = NULL; gint response; - GdkColor *new_color = NULL; + const GdkColor *new_color = NULL; priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); wp_text_buffer_get_attributes (WP_TEXT_BUFFER (priv->text_buffer), buffer_format, FALSE); @@ -1169,7 +1204,7 @@ modest_msg_edit_window_select_color (ModestMsgEditWindow *window) #else dialog = hildon_color_chooser_new (); hildon_color_chooser_set_color (HILDON_COLOR_CHOOSER (dialog), &(buffer_format->color)); -#endif /*MODEST_HILDON_VERSION_9*/ +#endif /*MODEST_HILDON_VERSION_0*/ g_free (buffer_format); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1181,8 +1216,9 @@ modest_msg_edit_window_select_color (ModestMsgEditWindow *window) GdkColor col; hildon_color_chooser_get_color (HILDON_COLOR_CHOOSER(dialog), &col); new_color = &col; - } #endif /*MODEST_HILDON_VERSION_0*/ + } + break; default: break; @@ -1202,7 +1238,7 @@ modest_msg_edit_window_select_background_color (ModestMsgEditWindow *window) GtkWidget *dialog = NULL; gint response; GdkColor *old_color = NULL; - GdkColor *new_color = NULL; + const GdkColor *new_color = NULL; priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); old_color = (GdkColor*)wp_text_buffer_get_background_color (WP_TEXT_BUFFER (priv->text_buffer)); @@ -1224,8 +1260,8 @@ modest_msg_edit_window_select_background_color (ModestMsgEditWindow *window) GdkColor col; hildon_color_chooser_get_color (HILDON_COLOR_CHOOSER(dialog), &col); new_color = &col; - } #endif /*MODEST_HILDON_VERSION_0*/ + } break; default: break; @@ -1561,12 +1597,26 @@ modest_msg_edit_window_open_addressbook (ModestMsgEditWindow *window, GtkWidget *view_focus; view_focus = gtk_window_get_focus (GTK_WINDOW (window)); - if (gtk_widget_get_parent (view_focus) && - MODEST_IS_RECPT_EDITOR (gtk_widget_get_parent (view_focus))) { - editor = MODEST_RECPT_EDITOR (gtk_widget_get_parent (view_focus)); - } else { - editor = MODEST_RECPT_EDITOR (priv->to_field); + /* This code should be kept in sync with ModestRecptEditor. The + textview inside the recpt editor is the one that really gets the + focus. As it's inside a scrolled window, and this one inside the + hbox recpt editor inherits from, we'll need to go up in the + hierarchy to know if the text view is part of the recpt editor + or if it's a different text entry */ + + if (gtk_widget_get_parent (view_focus)) { + GtkWidget *first_parent; + + first_parent = gtk_widget_get_parent (view_focus); + if (gtk_widget_get_parent (first_parent) && + MODEST_IS_RECPT_EDITOR (gtk_widget_get_parent (first_parent))) { + editor = MODEST_RECPT_EDITOR (gtk_widget_get_parent (first_parent)); + } } + + if (editor == NULL) + editor = MODEST_RECPT_EDITOR (priv->to_field); + } modest_address_book_select_addresses (editor); @@ -1576,26 +1626,18 @@ modest_msg_edit_window_open_addressbook (ModestMsgEditWindow *window, void modest_msg_edit_window_select_contacts (ModestMsgEditWindow *window) { - GtkWidget *focused; - ModestMsgEditWindowPrivate *priv; - g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); - priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); - focused = gtk_window_get_focus (GTK_WINDOW (window)); - if (MODEST_IS_RECPT_EDITOR (focused)) { - modest_msg_edit_window_open_addressbook (window, MODEST_RECPT_EDITOR (focused)); - } else { - modest_msg_edit_window_open_addressbook (window, MODEST_RECPT_EDITOR (priv->to_field)); - } - + modest_msg_edit_window_open_addressbook (window, NULL); } + static void modest_msg_edit_window_show_toolbar (ModestWindow *self, gboolean show_toolbar) { ModestWindowPrivate *parent_priv; + g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self)); parent_priv = MODEST_WINDOW_GET_PRIVATE(self); /* FIXME: we can not just use the code of @@ -1830,33 +1872,74 @@ update_dimmed (ModestMsgEditWindow *window) GtkAction *action; GtkWidget *widget; gboolean rich_text; + gboolean editor_focused; rich_text = wp_text_buffer_is_rich_text (WP_TEXT_BUFFER (priv->text_buffer)); + editor_focused = gtk_widget_is_focus (priv->msg_body); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/FormatMenu/SelectFontMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/FormatMenu/BulletedListMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu/AlignmentLeftMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu/AlignmentCenterMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu/AlignmentRightMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/AttachmentsMenu/InsertImageMenu"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ActionsBold"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ActionsItalics"); - gtk_action_set_sensitive (action, rich_text); + gtk_action_set_sensitive (action, rich_text && editor_focused); + widget = priv->font_color_button; + gtk_widget_set_sensitive (widget, rich_text && editor_focused); + widget = priv->font_size_toolitem; + gtk_widget_set_sensitive (widget, rich_text && editor_focused); + widget = priv->font_face_toolitem; + gtk_widget_set_sensitive (widget, rich_text && editor_focused); +} + +static void +setup_insensitive_handlers (ModestMsgEditWindow *window) +{ + ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (window); + ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); + GtkWidget *widget; + + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSend"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (send_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/EmailMenu/SendMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (send_insensitive_press), window); + + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/FormatMenu/SelectFontMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/FormatMenu/BulletedListMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu/AlignmentLeftMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu/AlignmentCenterMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/FormatMenu/AlignmentMenu/AlignmentRightMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/AttachmentsMenu/InsertImageMenu"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ActionsBold"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ActionsItalics"); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); widget = priv->font_color_button; - gtk_widget_set_sensitive (widget, rich_text); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); widget = priv->font_size_toolitem; - gtk_widget_set_sensitive (widget, rich_text); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); widget = priv->font_face_toolitem; - gtk_widget_set_sensitive (widget, rich_text); + g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (style_insensitive_press), window); + } static void @@ -1868,3 +1951,112 @@ text_buffer_can_undo (GtkTextBuffer *buffer, gboolean can_undo, ModestMsgEditWin action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/UndoMenu"); gtk_action_set_sensitive (action, can_undo); } + +static gboolean +msg_body_focus (GtkWidget *focus, + GdkEventFocus *event, + gpointer userdata) +{ + update_dimmed (MODEST_MSG_EDIT_WINDOW (userdata)); + return FALSE; +} + +static void +to_field_changed (GtkTextBuffer *buffer, + ModestMsgEditWindow *editor) +{ + ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (editor); + GtkAction *action; + + action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSend"); + gtk_action_set_sensitive (action, gtk_text_buffer_get_char_count (buffer) != 0); + action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EmailMenu/SendMenu"); + gtk_action_set_sensitive (action, gtk_text_buffer_get_char_count (buffer) != 0); +} + +static void +send_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) +{ + hildon_banner_show_information (NULL, NULL, _("mcen_ib_add_recipients_first")); +} + +static void +style_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) +{ + gboolean rich_text, editor_focused; + + ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (editor); + rich_text = wp_text_buffer_is_rich_text (WP_TEXT_BUFFER (priv->text_buffer)); + editor_focused = gtk_widget_is_focus (priv->msg_body); + + if (!rich_text) + hildon_banner_show_information (NULL, NULL, _("mcen_ib_item_unavailable_plaintext")); + else if (!editor_focused) + hildon_banner_show_information (NULL, NULL, _("mcen_ib_move_cursor_to_message")); +} + +static void +reset_modified (ModestMsgEditWindow *editor) +{ + ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (editor); + GtkTextBuffer *buffer; + + buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR(priv->to_field)); + gtk_text_buffer_set_modified (buffer, FALSE); + buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR(priv->cc_field)); + gtk_text_buffer_set_modified (buffer, FALSE); + buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR(priv->bcc_field)); + gtk_text_buffer_set_modified (buffer, FALSE); + gtk_text_buffer_set_modified (priv->text_buffer, FALSE); +} + +static gboolean +is_modified (ModestMsgEditWindow *editor) +{ + ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (editor); + GtkTextBuffer *buffer; + + buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR(priv->to_field)); + if (gtk_text_buffer_get_modified (buffer)) + return TRUE; + buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR(priv->cc_field)); + if (gtk_text_buffer_get_modified (buffer)) + return TRUE; + buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR(priv->bcc_field)); + if (gtk_text_buffer_get_modified (buffer)) + return TRUE; + if (gtk_text_buffer_get_modified (priv->text_buffer)) + return TRUE; + + return FALSE; +} + +gboolean +modest_msg_edit_window_check_names (ModestMsgEditWindow *window) +{ + ModestMsgEditWindowPrivate *priv = NULL; + + g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE); + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); + + /* check if there's no recipient added */ + if ((gtk_text_buffer_get_char_count (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field))) == 0) && + (gtk_text_buffer_get_char_count (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->cc_field))) == 0) && + (gtk_text_buffer_get_char_count (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->bcc_field))) == 0)) { + /* no recipient contents, then select contacts */ + modest_msg_edit_window_open_addressbook (window, NULL); + return FALSE; + } + + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->to_field))) + return FALSE; + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->cc_field))) + return FALSE; + if (!modest_address_book_check_names (MODEST_RECPT_EDITOR (priv->bcc_field))) + return FALSE; + + modest_recpt_editor_grab_focus (MODEST_RECPT_EDITOR (priv->to_field)); + + return TRUE; + +}