X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-msg-edit-window.c;h=503739cf589353ade5a398417ab1d8dbca67dcc6;hp=d0df0ea41a3c044deb641ef18c6497f0667ed25b;hb=ae6cc4558ea0f5afc82a06376200904ee7b061dd;hpb=1f6375ad6e5dd08dac82311056e01bfe434bac9b diff --git a/src/maemo/modest-msg-edit-window.c b/src/maemo/modest-msg-edit-window.c index d0df0ea..503739c 100644 --- a/src/maemo/modest-msg-edit-window.c +++ b/src/maemo/modest-msg-edit-window.c @@ -83,6 +83,7 @@ #define DEFAULT_MAIN_VBOX_SPACING 6 #define SUBJECT_MAX_LENGTH 1000 #define IMAGE_MAX_WIDTH 640 +#define DEFAULT_FONT_SCALE 1.5 static void modest_msg_edit_window_class_init (ModestMsgEditWindowClass *klass); static void modest_msg_edit_window_init (ModestMsgEditWindow *obj); @@ -92,10 +93,6 @@ static gboolean msg_body_focus (GtkWidget *focus, GdkEventFocus *event, gpointer static void recpt_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 remove_attachment_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor); -static void zoom_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor); -static void paste_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor); -static void copy_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor); static void setup_insensitive_handlers (ModestMsgEditWindow *editor); static void reset_modified (ModestMsgEditWindow *editor); @@ -130,9 +127,6 @@ 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 modest_msg_edit_window_system_clipboard_owner_change (GtkClipboard *clipboard, - GdkEvent *event, - ModestMsgEditWindow *window); static void update_window_title (ModestMsgEditWindow *window); static void update_dimmed (ModestMsgEditWindow *window); static void update_paste_dimming (ModestMsgEditWindow *window); @@ -212,7 +206,6 @@ struct _ModestMsgEditWindowPrivate { gdouble zoom_level; gulong clipboard_change_handler_id; - gulong system_clipboard_change_handler_id; TnyMsg *draft_msg; gboolean sent; @@ -318,7 +311,6 @@ modest_msg_edit_window_init (ModestMsgEditWindow *obj) priv->draft_msg = NULL; priv->clipboard_change_handler_id = 0; - priv->system_clipboard_change_handler_id = 0; priv->sent = FALSE; } @@ -392,6 +384,7 @@ init_window (ModestMsgEditWindow *obj) priv->priority_icon = gtk_image_new (); gtk_box_pack_start (GTK_BOX (subject_box), priv->priority_icon, FALSE, FALSE, 0); priv->subject_field = gtk_entry_new_with_max_length (SUBJECT_MAX_LENGTH); + g_object_set (G_OBJECT (priv->subject_field), "truncate-multiline", TRUE, NULL); hildon_gtk_entry_set_input_mode (GTK_ENTRY (priv->subject_field), HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_AUTOCAP); gtk_box_pack_start (GTK_BOX (subject_box), priv->subject_field, TRUE, TRUE, 0); @@ -435,11 +428,12 @@ init_window (ModestMsgEditWindow *obj) priv->msg_body = wp_text_view_new (); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (priv->msg_body), GTK_WRAP_WORD_CHAR); priv->text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->msg_body)); - g_object_set (priv->text_buffer, "font_scale", 1.0, NULL); + g_object_set (priv->text_buffer, "font_scale", DEFAULT_FONT_SCALE, NULL); wp_text_buffer_enable_rich_text (WP_TEXT_BUFFER (priv->text_buffer), TRUE); +#if (GTK_MINOR_VERSION >= 10) gtk_text_buffer_register_serialize_tagset(GTK_TEXT_BUFFER(priv->text_buffer), "wp-text-buffer"); gtk_text_buffer_register_deserialize_tagset(GTK_TEXT_BUFFER(priv->text_buffer), "wp-text-buffer"); - +#endif wp_text_buffer_reset_buffer (WP_TEXT_BUFFER (priv->text_buffer), TRUE); priv->find_toolbar = hildon_find_toolbar_new (NULL); @@ -487,7 +481,8 @@ init_window (ModestMsgEditWindow *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); - + modest_maemo_set_thumbable_scrollbar (GTK_SCROLLED_WINDOW(priv->scroll), TRUE); + main_vbox = gtk_vbox_new (FALSE, DEFAULT_MAIN_VBOX_SPACING); gtk_box_pack_start (GTK_BOX(main_vbox), priv->header_box, FALSE, FALSE, 0); @@ -523,8 +518,6 @@ init_window (ModestMsgEditWindow *obj) priv->clipboard_change_handler_id = g_signal_connect (G_OBJECT (gtk_clipboard_get (GDK_SELECTION_PRIMARY)), "owner-change", G_CALLBACK (modest_msg_edit_window_clipboard_owner_change), obj); - priv->system_clipboard_change_handler_id = g_signal_connect (G_OBJECT (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)), "owner-change", - G_CALLBACK (modest_msg_edit_window_system_clipboard_owner_change), obj); } @@ -539,13 +532,12 @@ modest_msg_edit_window_finalize (GObject *obj) priv->clipboard_change_handler_id = 0; } - if (priv->system_clipboard_change_handler_id > 0) { - g_signal_handler_disconnect (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), - priv->system_clipboard_change_handler_id); - priv->system_clipboard_change_handler_id = 0; - } - if (priv->draft_msg != NULL) { + TnyHeader *header = tny_msg_get_header (priv->draft_msg); + if (TNY_IS_HEADER (header)) { + ModestWindowMgr *mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_unregister_header (mgr, header); + } g_object_unref (priv->draft_msg); priv->draft_msg = NULL; } @@ -972,7 +964,10 @@ modest_msg_edit_window_new (TnyMsg *msg, const gchar *account_name) /* Set window icon */ window_icon = modest_platform_get_icon (MODEST_APP_MSG_EDIT_ICON); - gtk_window_set_icon (GTK_WINDOW (obj), window_icon); + if (window_icon) { + gtk_window_set_icon (GTK_WINDOW (obj), window_icon); + g_object_unref (window_icon); + } /* Dim at start clipboard actions */ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/CutMenu"); @@ -1087,6 +1082,7 @@ modest_msg_edit_window_get_msg_data (ModestMsgEditWindow *edit_window) while (cursor) { if (!(TNY_IS_MIME_PART(cursor->data))) { g_warning ("strange data in attachment list"); + cursor = g_list_next (cursor); continue; } data->attachments = g_list_append (data->attachments, @@ -1507,14 +1503,22 @@ modest_msg_edit_window_insert_image (ModestMsgEditWindow *window) GdkPixbufLoader *loader; GdkPixbuf *pixbuf; GnomeVFSFileInfo info; - gchar *filename, *basename; + gchar *filename, *basename, *escaped_filename; TnyMimePart *mime_part; TnyStream *stream; gchar *content_id; const gchar *mime_type = NULL; + GnomeVFSURI *vfs_uri; + + vfs_uri = gnome_vfs_uri_new (uri); + + escaped_filename = g_path_get_basename (gnome_vfs_uri_get_path (vfs_uri)); + filename = gnome_vfs_unescape_string_for_display (escaped_filename); + g_free (escaped_filename); + gnome_vfs_uri_unref (vfs_uri); - filename = g_filename_from_uri (uri, NULL, NULL); - if (gnome_vfs_get_file_info_from_handle (handle, &info, GNOME_VFS_FILE_INFO_GET_MIME_TYPE) + if (gnome_vfs_get_file_info (uri, &info, GNOME_VFS_FILE_INFO_GET_MIME_TYPE + | GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE) == GNOME_VFS_OK) mime_type = gnome_vfs_file_info_get_mime_type (&info); @@ -1588,6 +1592,7 @@ modest_msg_edit_window_attach_file (ModestMsgEditWindow *window) priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN); + gtk_window_set_title (GTK_WINDOW (dialog), _("mcen_ti_select_attachment_title")); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1612,13 +1617,25 @@ modest_msg_edit_window_attach_file (ModestMsgEditWindow *window) TnyStream *stream; const gchar *mime_type = NULL; gchar *basename; + gchar *escaped_filename; gchar *filename; gchar *content_id; GnomeVFSFileInfo info; + GnomeVFSURI *vfs_uri; - filename = g_filename_from_uri (uri, NULL, NULL); + vfs_uri = gnome_vfs_uri_new (uri); - if (gnome_vfs_get_file_info_from_handle (handle, &info, GNOME_VFS_FILE_INFO_GET_MIME_TYPE) == GNOME_VFS_OK) + + escaped_filename = g_path_get_basename (gnome_vfs_uri_get_path (vfs_uri)); + filename = gnome_vfs_unescape_string_for_display (escaped_filename); + g_free (escaped_filename); + gnome_vfs_uri_unref (vfs_uri); + + if (gnome_vfs_get_file_info (uri, + &info, + GNOME_VFS_FILE_INFO_GET_MIME_TYPE | + GNOME_VFS_FILE_INFO_FORCE_SLOW_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 ()); @@ -1881,7 +1898,7 @@ modest_msg_edit_window_set_zoom (ModestWindow *window, priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); parent_priv = MODEST_WINDOW_GET_PRIVATE (window); priv->zoom_level = zoom; - wp_text_buffer_set_font_scaling_factor (WP_TEXT_BUFFER (priv->text_buffer), zoom); + wp_text_buffer_set_font_scaling_factor (WP_TEXT_BUFFER (priv->text_buffer), zoom*DEFAULT_FONT_SCALE); /* Zoom level menu options should be updated with the current zoom level */ parent_priv = MODEST_WINDOW_GET_PRIVATE (window); @@ -2412,23 +2429,6 @@ setup_insensitive_handlers (ModestMsgEditWindow *window) 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"); @@ -2440,15 +2440,6 @@ setup_insensitive_handlers (ModestMsgEditWindow *window) widget = priv->font_face_toolitem; 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/RemoveAttachmentsMenu"); - g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (remove_attachment_insensitive_press), window); - widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/ViewMenu/ZoomMenu"); - g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (zoom_insensitive_press), window); - - widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/EditMenu/PasteMenu"); - g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (paste_insensitive_press), window); - widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/EditMenu/CopyMenu"); - g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (copy_insensitive_press), window); } static void @@ -2572,35 +2563,6 @@ send_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) hildon_banner_show_information (NULL, NULL, _("mcen_ib_add_recipients_first")); } -static void -zoom_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) -{ - hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_cannot_zoom_here")); -} - -static void -remove_attachment_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) -{ - ModestWindowPrivate *parent_priv; - ModestMsgEditWindowPrivate *priv; - GList *selected_attachments = NULL; - gint n_att_selected = 0; - - priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (editor); - parent_priv = MODEST_WINDOW_GET_PRIVATE (editor); - - selected_attachments = modest_attachments_view_get_selection (MODEST_ATTACHMENTS_VIEW (priv->attachments_view)); - n_att_selected = g_list_length (selected_attachments); - g_list_free (selected_attachments); - - if (n_att_selected > 1) - hildon_banner_show_information (NULL, NULL, _("mcen_ib_unable_to_display_more")); - else if (n_att_selected == 0) - hildon_banner_show_information (NULL, NULL, _("TODO: select one attachment")); - else - hildon_banner_show_information (NULL, NULL, _("mail_ib_unable_to_purge_attachments")); -} - static void style_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) { @@ -2704,6 +2666,9 @@ modest_msg_edit_window_clipboard_owner_change (GtkClipboard *clipboard, priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); parent_priv = MODEST_WINDOW_GET_PRIVATE (window); + + if (!GTK_WIDGET_VISIBLE (window)) + return; has_selection = gtk_clipboard_wait_for_targets (clipboard, NULL, NULL); focused = gtk_window_get_focus (GTK_WINDOW (window)); @@ -2914,34 +2879,6 @@ update_paste_dimming (ModestMsgEditWindow *window) } -static void -paste_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) -{ - GtkWidget *focused = gtk_window_get_focus (GTK_WINDOW (editor)); - - if (MODEST_IS_ATTACHMENTS_VIEW (focused)) - hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_unable_to_paste_here")); - else - hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ecoc_ib_edwin_nothing_to_paste")); - -} - -static void -copy_insensitive_press (GtkWidget *widget, ModestMsgEditWindow *editor) -{ - hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_unable_to_copy")); - -} - - -static void -modest_msg_edit_window_system_clipboard_owner_change (GtkClipboard *clipboard, - GdkEvent *event, - ModestMsgEditWindow *window) -{ - update_paste_dimming (window); -} - static void update_select_all_dimming (ModestMsgEditWindow *window) { @@ -2986,6 +2923,7 @@ edit_menu_activated (GtkAction *action, ModestMsgEditWindow *window = MODEST_MSG_EDIT_WINDOW (userdata); update_select_all_dimming (window); + update_paste_dimming (window); } static void view_menu_activated (GtkAction *action, @@ -3016,3 +2954,33 @@ modest_msg_edit_window_set_sent (ModestMsgEditWindow *window, } +void +modest_msg_edit_window_set_draft (ModestMsgEditWindow *window, + TnyMsg *draft) +{ + ModestMsgEditWindowPrivate *priv; + TnyHeader *header = NULL; + + g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); + g_return_if_fail ((draft == NULL)||(TNY_IS_MSG (draft))); + + priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); + ModestWindowMgr *mgr = modest_runtime_get_window_mgr (); + + if (priv->draft_msg != NULL) { + header = tny_msg_get_header (priv->draft_msg); + if (TNY_IS_HEADER (header)) { + modest_window_mgr_unregister_header (mgr, header); + } + g_object_unref (priv->draft_msg); + } + + if (draft != NULL) { + g_object_ref (draft); + header = tny_msg_get_header (draft); + if (TNY_IS_HEADER (header)) + modest_window_mgr_register_header (mgr, header); + } + + priv->draft_msg = draft; +}