X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-msg-edit-window.c;h=3a13607f64fb3eb9bf582ae4f3291ec3818f4103;hp=c5124cb7ca050759b481712de853e9ece64610fe;hb=be6ccffc543395f60cd1e8551d0df6f8f037a8d5;hpb=4bc5463d7e87669390d617ecf30a2eed520d4782 diff --git a/src/maemo/modest-msg-edit-window.c b/src/maemo/modest-msg-edit-window.c index c5124cb..3a13607 100644 --- a/src/maemo/modest-msg-edit-window.c +++ b/src/maemo/modest-msg-edit-window.c @@ -34,6 +34,7 @@ #include #include #include +#include #include @@ -89,6 +90,7 @@ static void text_buffer_refresh_attributes (WPTextBuffer *buffer, ModestMsgEdit static void text_buffer_delete_range (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, gpointer userdata); static void text_buffer_can_undo (GtkTextBuffer *buffer, gboolean can_undo, ModestMsgEditWindow *window); static void text_buffer_delete_images_by_id (GtkTextBuffer *buffer, const gchar * image_id); +static void subject_field_changed (GtkEditable *editable, ModestMsgEditWindow *window); static void modest_msg_edit_window_color_button_change (ModestMsgEditWindow *window, gpointer userdata); static void modest_msg_edit_window_size_change (GtkCheckMenuItem *menu_item, @@ -114,6 +116,7 @@ static void modest_msg_edit_window_show_toolbar (ModestWindow *window, static void modest_msg_edit_window_clipboard_owner_change (GtkClipboard *clipboard, GdkEvent *event, ModestMsgEditWindow *window); +static void update_window_title (ModestMsgEditWindow *window); static void update_dimmed (ModestMsgEditWindow *window); @@ -408,6 +411,7 @@ init_window (ModestMsgEditWindow *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)); + g_signal_connect (G_OBJECT (priv->subject_field), "changed", G_CALLBACK (subject_field_changed), 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); @@ -548,11 +552,13 @@ set_msg (ModestMsgEditWindow *self, TnyMsg *msg) if (bcc) modest_recpt_editor_set_recipients (MODEST_RECPT_EDITOR (priv->bcc_field), bcc); if (subject) - gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject); + gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject); + + update_window_title (self); /* 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); + body = modest_tny_msg_get_body (msg, TRUE); if ((body == NULL)||(body[0] == '\0')) { g_free (body); @@ -670,6 +676,7 @@ modest_msg_edit_window_setup_toolbar (ModestMsgEditWindow *window) tool_item = GTK_WIDGET (gtk_tool_item_new ()); priv->font_color_button = hildon_color_button_new (); GTK_WIDGET_UNSET_FLAGS (tool_item, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (priv->font_color_button, GTK_CAN_FOCUS); gtk_container_add (GTK_CONTAINER (tool_item), priv->font_color_button); gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool_item), TRUE); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (tool_item), TRUE); @@ -860,7 +867,6 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) restore_settings (MODEST_MSG_EDIT_WINDOW(obj)); - 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", @@ -947,10 +953,16 @@ modest_msg_edit_window_get_msg_data (ModestMsgEditWindow *edit_window) data = g_slice_new0 (MsgData); data->from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), account_name); + data->account_name = g_strdup (account_name); data->to = g_strdup (modest_recpt_editor_get_recipients (MODEST_RECPT_EDITOR (priv->to_field))); data->cc = g_strdup (modest_recpt_editor_get_recipients (MODEST_RECPT_EDITOR (priv->cc_field))); data->bcc = g_strdup (modest_recpt_editor_get_recipients (MODEST_RECPT_EDITOR (priv->bcc_field))); 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); + } else { + data->draft_msg = NULL; + } GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->msg_body)); GtkTextIter b, e; @@ -984,6 +996,11 @@ modest_msg_edit_window_free_msg_data (ModestMsgEditWindow *edit_window, g_free (data->subject); g_free (data->plain_body); g_free (data->html_body); + if (data->draft_msg != NULL) { + g_object_unref (data->draft_msg); + data->draft_msg = NULL; + } + g_free (data->account_name); /* TODO: Free data->attachments? */ @@ -1408,7 +1425,7 @@ modest_msg_edit_window_attach_file (ModestMsgEditWindow *window) ModestMsgEditWindowPrivate *priv; GtkWidget *dialog = NULL; gint response = 0; - gchar *filename = NULL; + gchar *uri = NULL, *filename = NULL; priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); @@ -1417,6 +1434,7 @@ modest_msg_edit_window_attach_file (ModestMsgEditWindow *window) response = gtk_dialog_run (GTK_DIALOG (dialog)); switch (response) { case GTK_RESPONSE_OK: + uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); break; default: @@ -1424,6 +1442,57 @@ modest_msg_edit_window_attach_file (ModestMsgEditWindow *window) } gtk_widget_destroy (dialog); + if (uri) { + + GnomeVFSHandle *handle = NULL; + GnomeVFSResult result; + + result = gnome_vfs_open (&handle, uri, GNOME_VFS_OPEN_READ); + if (result == GNOME_VFS_OK) { + TnyMimePart *mime_part; + TnyStream *stream; + const gchar *mime_type = NULL; + gchar *basename; + gchar *content_id; + GnomeVFSFileInfo info; + + if (gnome_vfs_get_file_info_from_handle (handle, &info, GNOME_VFS_FILE_INFO_GET_MIME_TYPE) == GNOME_VFS_OK) + mime_type = gnome_vfs_file_info_get_mime_type (&info); + mime_part = tny_platform_factory_new_mime_part + (modest_runtime_get_platform_factory ()); + stream = TNY_STREAM (tny_vfs_stream_new (handle)); + + tny_mime_part_construct_from_stream (mime_part, stream, mime_type); + + content_id = g_strdup_printf ("%d", priv->last_cid); + tny_mime_part_set_content_id (mime_part, content_id); + g_free (content_id); + priv->last_cid++; + + basename = g_path_get_basename (filename); + tny_mime_part_set_filename (mime_part, basename); + g_free (basename); + + priv->attachments = g_list_prepend (priv->attachments, mime_part); + modest_attachments_view_add_attachment (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), + mime_part); + gtk_widget_set_no_show_all (priv->attachments_caption, FALSE); + gtk_widget_show_all (priv->attachments_caption); + } + g_free (filename); + } +} + +void +modest_msg_edit_window_attach_file_noninteractive ( + ModestMsgEditWindow *window, + gchar *filename) +{ + + ModestMsgEditWindowPrivate *priv; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); + if (filename) { gint file_id; @@ -1551,14 +1620,19 @@ modest_msg_edit_window_size_change (GtkCheckMenuItem *menu_item, if (gtk_check_menu_item_get_active (menu_item)) { gchar *markup; + WPTextBufferFormat format; label = gtk_bin_get_child (GTK_BIN (menu_item)); new_size_index = atoi (gtk_label_get_text (GTK_LABEL (label))); - - if (!wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_FONT_SIZE, - (gpointer) wp_get_font_size_index (new_size_index, 12))) - wp_text_view_reset_and_show_im (WP_TEXT_VIEW (priv->msg_body)); + memset (&format, 0, sizeof (format)); + format.cs.font_size = TRUE; + format.font_size = wp_get_font_size_index (new_size_index, DEFAULT_FONT_SIZE); + wp_text_buffer_set_format (WP_TEXT_BUFFER (priv->text_buffer), &format); + +/* if (!wp_text_buffer_set_attribute (WP_TEXT_BUFFER (priv->text_buffer), WPT_FONT_SIZE, */ +/* (gpointer) wp_get_font_size_index (new_size_index, 12))) */ +/* wp_text_view_reset_and_show_im (WP_TEXT_VIEW (priv->msg_body)); */ text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), MODEST_MSG_EDIT_WINDOW (window)); markup = g_strconcat ("", gtk_label_get_text (GTK_LABEL (label)), "", NULL); @@ -2000,12 +2074,11 @@ modest_msg_edit_window_select_font (ModestMsgEditWindow *window) font_size, DEFAULT_FONT_SIZE); fmt.cs.font_size = TRUE; } - gtk_widget_destroy (dialog); - - gtk_widget_grab_focus(GTK_WIDGET(priv->msg_body)); wp_text_buffer_set_format(WP_TEXT_BUFFER(priv->text_buffer), &fmt); } - + gtk_widget_destroy (dialog); + + gtk_widget_grab_focus(GTK_WIDGET(priv->msg_body)); } void @@ -2136,6 +2209,7 @@ text_buffer_delete_images_by_id (GtkTextBuffer *buffer, const gchar * image_id) } } } + gtk_text_iter_forward_char (&iter); } } @@ -2175,6 +2249,7 @@ msg_body_focus (GtkWidget *focus, GdkEventFocus *event, gpointer userdata) { + update_dimmed (MODEST_MSG_EDIT_WINDOW (userdata)); return FALSE; } @@ -2305,3 +2380,25 @@ modest_msg_edit_window_clipboard_owner_change (GtkClipboard *clipboard, action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/CopyMenu"); gtk_action_set_sensitive (action, (selection != NULL) && (!MODEST_IS_ATTACHMENTS_VIEW (focused))); } + +static void +update_window_title (ModestMsgEditWindow *window) +{ + ModestMsgEditWindowPrivate *priv = NULL; + const gchar *subject; + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); + subject = gtk_entry_get_text (GTK_ENTRY (priv->subject_field)); + if (subject == NULL || subject[0] == '\0') + subject = _("mail_va_new_email"); + + gtk_window_set_title (GTK_WINDOW (window), subject); + +} + +static void +subject_field_changed (GtkEditable *editable, + ModestMsgEditWindow *window) +{ + update_window_title (window); +}