From 8e2b445e9dd2ec76be420bfffdf13bbacae14a3e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 27 Dec 2008 15:14:29 +0000 Subject: Define a new interface called EMailReader, which implements operations common to both the main shell window and the message browser. Replaces EMFolderView. Also begin to define EMailBrowser (GtkWindow subclass), which implements EMailReader and replaces EMMessageBrowser. svn path=/branches/kill-bonobo/; revision=36933 --- mail/e-mail-reader.c | 1653 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1653 insertions(+) create mode 100644 mail/e-mail-reader.c (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c new file mode 100644 index 0000000000..ca23deda78 --- /dev/null +++ b/mail/e-mail-reader.c @@ -0,0 +1,1653 @@ +/* + * e-mail-reader.c + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see + * + * + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + */ + +#include "e-mail-reader.h" + +#include +#include +#include + +#ifdef HAVE_XFREE +#include +#endif + +#include "e-util/gconf-bridge.h" + +#include "mail/e-mail-reader-utils.h" +#include "mail/em-composer-utils.h" +#include "mail/em-folder-selector.h" +#include "mail/em-folder-tree.h" +#include "mail/em-utils.h" +#include "mail/mail-autofilter.h" +#include "mail/mail-ops.h" + +/* Remembers the previously selected folder when transferring messages. */ +static gchar *default_xfer_messages_uri; + +static void +action_mail_add_sender_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelMessageInfo *info; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + const gchar *address; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uids = message_list_get_selected (message_list); + + if (uids->len != 1) + goto exit; + + info = camel_folder_get_message_info (folder, uids->pdata[0]); + if (info == NULL) + goto exit; + + address = camel_message_info_from (info); + if (address == NULL || *address == '\0') + goto exit; + + em_utils_add_address (window, address); + +exit: + em_utils_uids_free (uids); +} + +static void +action_mail_caret_mode_cb (GtkToggleAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + gboolean active; + + display = e_mail_reader_get_display (reader); + active = gtk_toggle_action_get_active (action); + + em_format_html_display_set_caret_mode (display, active); +} + +static void +action_mail_check_for_junk_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GPtrArray *uids; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + + uids = message_list_get_selected (message_list); + + mail_filter_junk (folder, uids); +} + +static void +action_mail_clipboard_copy_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + GtkHTML *html; + + display = e_mail_reader_get_display (reader); + html = ((EMFormatHTML *) display)->html; + + gtk_html_copy (html); +} + +static void +action_mail_copy_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + EMFolderTreeModel *model; + CamelFolder *folder; + GtkWidget *folder_tree; + GtkWidget *dialog; + GPtrArray *selected; + const gchar *uri; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + model = e_mail_reader_get_tree_model (reader); + + folder_tree = em_folder_tree_new_with_model (model); + selected = message_list_get_selected (message_list); + + em_folder_tree_set_excluded ( + EM_FOLDER_TREE (folder_tree), + EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | + EMFT_EXCLUDE_VTRASH); + + dialog = em_folder_selector_new ( + EM_FOLDER_TREE (folder_tree), + EM_FOLDER_SELECTOR_CAN_CREATE, + _("Select Folder"), NULL, _("C_opy")); + + if (default_xfer_messages_uri != NULL) + em_folder_selector_set_selected ( + EM_FOLDER_SELECTOR (dialog), + default_xfer_messages_uri); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK) + goto exit; + + uri = em_folder_selector_get_selected_uri ( + EM_FOLDER_SELECTOR (dialog)); + + g_free (default_xfer_messages_uri); + default_xfer_messages_uri = g_strdup (uri); + + if (uri != NULL) { + mail_transfer_messages ( + folder, selected, FALSE, uri, 0, NULL, NULL); + selected = NULL; + } + +exit: + if (selected != NULL) + em_utils_uids_free (selected); + + gtk_widget_destroy (dialog); +} + +static void +action_mail_delete_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED; + guint32 set = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED; + + if (!e_mail_reader_confirm_delete (reader)) + return; + + /* FIXME Verify all selected messages are deletable. + * But handle it by disabling this action. */ + + if (e_mail_reader_mark_selected (reader, mask, set) == 1) + e_mail_reader_select_next_message (reader, FALSE); +} + +static void +action_mail_filter_on_mailing_list_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_filter_from_selected (reader, AUTO_MLIST); +} + +static void +action_mail_filter_on_recipients_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_filter_from_selected (reader, AUTO_TO); +} + +static void +action_mail_filter_on_sender_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_filter_from_selected (reader, AUTO_FROM); +} + +static void +action_mail_filter_on_subject_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_filter_from_selected (reader, AUTO_SUBJECT); +} + +static void +action_mail_filters_apply_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GPtrArray *uids; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + + uids = message_list_get_selected (message_list); + + mail_filter_on_demand (folder, uids); +} + +static void +action_mail_find_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ +} + +static void +action_mail_flag_clear_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + + display = e_mail_reader_get_display (reader); + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uids = message_list_get_selected (message_list); + + em_utils_flag_for_followup_clear (window, folder, uids); + + em_format_redraw ((EMFormat *) display); +} + +static void +action_mail_flag_completed_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + + display = e_mail_reader_get_display (reader); + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uids = message_list_get_selected (message_list); + + em_utils_flag_for_followup_completed (window, folder, uids); + + em_format_redraw ((EMFormat *) display); +} + +static void +action_mail_flag_for_followup_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uids = message_list_get_selected (message_list); + + em_utils_flag_for_followup (window, folder, uids); +} + +static void +action_mail_forward_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + const gchar *folder_uri; + + folder = e_mail_reader_get_folder (reader); + folder_uri = e_mail_reader_get_folder_uri (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + uids = message_list_get_selected (message_list); + + em_utils_forward_messages (folder, uids, folder_uri); +} + +static void +action_mail_forward_attached_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + const gchar *folder_uri; + + folder = e_mail_reader_get_folder (reader); + folder_uri = e_mail_reader_get_folder_uri (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + uids = message_list_get_selected (message_list); + + em_utils_forward_attached (folder, uids, folder_uri); +} + +static void +action_mail_forward_inline_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + const gchar *folder_uri; + + folder = e_mail_reader_get_folder (reader); + folder_uri = e_mail_reader_get_folder_uri (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + uids = message_list_get_selected (message_list); + + em_utils_forward_inline (folder, uids, folder_uri); +} + +static void +action_mail_forward_quoted_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + const gchar *folder_uri; + + folder = e_mail_reader_get_folder (reader); + folder_uri = e_mail_reader_get_folder_uri (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + uids = message_list_get_selected (message_list); + + em_utils_forward_quoted (folder, uids, folder_uri); +} + +static void +action_mail_load_images_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + + display = e_mail_reader_get_display (reader); + + em_format_html_load_http ((EMFormatHTML *) display); +} + +static void +action_mail_mark_important_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_DELETED; + guint32 set = CAMEL_MESSAGE_FLAGGED; + + e_mail_reader_mark_selected (reader, mask, set); +} + +static void +action_mail_mark_junk_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_JUNK | + CAMEL_MESSAGE_NOTJUNK | CAMEL_MESSAGE_JUNK_LEARN; + guint32 set = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_JUNK | + CAMEL_MESSAGE_JUNK_LEARN; + + if (e_mail_reader_mark_selected (reader, mask, set) == 1) + e_mail_reader_select_next_message (reader, TRUE); +} + +static void +action_mail_mark_notjunk_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_JUNK | CAMEL_MESSAGE_NOTJUNK | + CAMEL_MESSAGE_JUNK_LEARN; + guint32 set = CAMEL_MESSAGE_NOTJUNK | CAMEL_MESSAGE_JUNK_LEARN; + + if (e_mail_reader_mark_selected (reader, mask, set) == 1) + e_mail_reader_select_next_message (reader, TRUE); +} + +static void +action_mail_mark_read_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_SEEN; + guint32 set = CAMEL_MESSAGE_SEEN; + + e_mail_reader_mark_selected (reader, mask, set); +} + +static void +action_mail_mark_unimportant_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_FLAGGED; + guint32 set = 0; + + e_mail_reader_mark_selected (reader, mask, set); +} + +static void +action_mail_mark_unread_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + guint32 mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED; + guint32 set = 0; + + message_list = e_mail_reader_get_message_list (reader); + + e_mail_reader_mark_selected (reader, mask, set); + + if (message_list->seen_id != 0) { + g_source_remove (message_list->seen_id); + message_list->seen_id = 0; + } +} + +static void +action_mail_message_edit_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + + folder = e_mail_reader_get_folder (reader); + window = e_mail_reader_get_window (reader); + message_list = e_mail_reader_get_message_list (reader); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + uids = message_list_get_selected (message_list); + + em_utils_edit_messages (folder, uids, FALSE); +} + +static void +action_mail_message_new_cb (GtkAction *action, + EMailReader *reader) +{ + GtkWindow *window; + const gchar *folder_uri; + + folder_uri = e_mail_reader_get_folder_uri (reader); + window = e_mail_reader_get_window (reader); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + em_utils_compose_new_message (folder_uri); +} + +static void +action_mail_message_open_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME This belongs in EMailShellView */ + e_mail_reader_open_selected (reader); +} + +static void +action_mail_message_post_cb (GtkAction *action, + EMailReader *reader) +{ + CamelFolder *folder; + + folder = e_mail_reader_get_folder (reader); + + em_utils_post_to_folder (folder); +} + +static void +action_mail_move_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + EMFolderTreeModel *model; + CamelFolder *folder; + GtkWidget *folder_tree; + GtkWidget *dialog; + GPtrArray *selected; + const gchar *uri; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + model = e_mail_reader_get_tree_model (reader); + + folder_tree = em_folder_tree_new_with_model (model); + selected = message_list_get_selected (message_list); + + em_folder_tree_set_excluded ( + EM_FOLDER_TREE (folder_tree), + EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | + EMFT_EXCLUDE_VTRASH); + + dialog = em_folder_selector_new ( + EM_FOLDER_TREE (folder_tree), + EM_FOLDER_SELECTOR_CAN_CREATE, + _("Select Folder"), NULL, _("C_opy")); + + if (default_xfer_messages_uri != NULL) + em_folder_selector_set_selected ( + EM_FOLDER_SELECTOR (dialog), + default_xfer_messages_uri); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK) + goto exit; + + uri = em_folder_selector_get_selected_uri ( + EM_FOLDER_SELECTOR (dialog)); + + g_free (default_xfer_messages_uri); + default_xfer_messages_uri = g_strdup (uri); + + if (uri != NULL) { + mail_transfer_messages ( + folder, selected, TRUE, uri, 0, NULL, NULL); + selected = NULL; + } + +exit: + if (selected != NULL) + em_utils_uids_free (selected); + + gtk_widget_destroy (dialog); +} + +static void +action_mail_next_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + MessageListSelectDirection direction; + guint32 flags, mask; + + direction = MESSAGE_LIST_SELECT_NEXT; + flags = 0; + mask = 0; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select (message_list, direction, flags, mask); +} + +static void +action_mail_next_important_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + MessageListSelectDirection direction; + guint32 flags, mask; + + direction = MESSAGE_LIST_SELECT_NEXT | MESSAGE_LIST_SELECT_WRAP; + flags = CAMEL_MESSAGE_FLAGGED; + mask = CAMEL_MESSAGE_FLAGGED; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select (message_list, direction, flags, mask); +} + +static void +action_mail_next_thread_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select_next_thread (message_list); +} + +static void +action_mail_next_unread_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + MessageListSelectDirection direction; + guint32 flags, mask; + + direction = MESSAGE_LIST_SELECT_NEXT | MESSAGE_LIST_SELECT_WRAP; + flags = 0; + mask = CAMEL_MESSAGE_SEEN; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select (message_list, direction, flags, mask); +} + +static void +action_mail_previous_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + MessageListSelectDirection direction; + guint32 flags, mask; + + direction = MESSAGE_LIST_SELECT_PREVIOUS; + flags = 0; + mask = 0; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select (message_list, direction, flags, mask); +} + +static void +action_mail_previous_important_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + MessageListSelectDirection direction; + guint32 flags, mask; + + direction = MESSAGE_LIST_SELECT_PREVIOUS | MESSAGE_LIST_SELECT_WRAP; + flags = CAMEL_MESSAGE_FLAGGED; + mask = CAMEL_MESSAGE_FLAGGED; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select (message_list, direction, flags, mask); +} + +static void +action_mail_previous_unread_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + MessageListSelectDirection direction; + guint32 flags, mask; + + direction = MESSAGE_LIST_SELECT_PREVIOUS | MESSAGE_LIST_SELECT_WRAP; + flags = 0; + mask = CAMEL_MESSAGE_SEEN; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select (message_list, direction, flags, mask); +} + +static void +action_mail_print_cb (GtkAction *action, + EMailReader *reader) +{ + GtkPrintOperationAction print_action; + + print_action = GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG; + e_mail_reader_print (reader, print_action); +} + +static void +action_mail_print_preview_cb (GtkAction *action, + EMailReader *reader) +{ + GtkPrintOperationAction print_action; + + print_action = GTK_PRINT_OPERATION_ACTION_PREVIEW; + e_mail_reader_print (reader, print_action); +} + +static void +action_mail_redirect_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + const gchar *uid; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uid = message_list->cursor_uid; + g_return_if_fail (uid != NULL); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + em_utils_redirect_message_by_uid (folder, uid); +} + +static void +action_mail_reply_all_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_reply_to_message (reader, REPLY_MODE_ALL); +} + +static void +action_mail_reply_list_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_reply_to_message (reader, REPLY_MODE_LIST); +} + +static void +action_mail_reply_post_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + const gchar *uid; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uid = message_list->cursor_uid; + g_return_if_fail (uid != NULL); + + if (!em_utils_check_user_can_send_mail (window)) + return; + + em_utils_post_reply_to_message_by_uid (folder, uid); +} + +static void +action_mail_reply_sender_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_reply_to_message (reader, REPLY_MODE_SENDER); +} + +static void +action_mail_save_as_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GtkWindow *window; + GPtrArray *uids; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + + uids = message_list_get_selected (message_list); + + em_utils_save_messages (window, folder, uids); +} + +static void +action_mail_search_folder_from_mailing_list_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_vfolder_from_selected (reader, AUTO_MLIST); +} + +static void +action_mail_search_folder_from_recipients_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_vfolder_from_selected (reader, AUTO_TO); +} + +static void +action_mail_search_folder_from_sender_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_vfolder_from_selected (reader, AUTO_FROM); +} + +static void +action_mail_search_folder_from_subject_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_create_vfolder_from_selected (reader, AUTO_SUBJECT); +} + +static void +action_mail_select_all_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ +} + +static void +action_mail_show_all_headers_cb (GtkToggleAction *action, + EMailReader *reader) +{ + /* FIXME */ +} + +static void +action_mail_show_source_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ +} + +static void +action_mail_toggle_important_cb (GtkAction *action, + EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GPtrArray *uids; + guint ii; + + folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); + + uids = message_list_get_selected (message_list); + + camel_folder_freeze (folder); + + for (ii = 0; ii < uids->len; ii++) { + guint32 flags; + + flags = camel_folder_get_message_flags ( + folder, uids->pdata[ii]); + flags ^= CAMEL_MESSAGE_FLAGGED; + if (flags & CAMEL_MESSAGE_FLAGGED) + flags &= ~CAMEL_MESSAGE_DELETED; + camel_folder_set_message_flags ( + folder, uids->pdata[ii], CAMEL_MESSAGE_FLAGGED | + CAMEL_MESSAGE_DELETED, flags); + } + + camel_folder_thaw (folder); + + message_list_free_uids (message_list, uids); +} + +static void +action_mail_undelete_cb (GtkAction *action, + EMailReader *reader) +{ + guint32 mask = CAMEL_MESSAGE_DELETED; + guint32 set = 0; + + e_mail_reader_mark_selected (reader, mask, set); +} + +static void +action_mail_zoom_100_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + + display = e_mail_reader_get_display (reader); + + em_format_html_display_zoom_reset (display); +} + +static void +action_mail_zoom_in_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + + display = e_mail_reader_get_display (reader); + + em_format_html_display_zoom_in (display); +} + +static void +action_mail_zoom_out_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *display; + + display = e_mail_reader_get_display (reader); + + em_format_html_display_zoom_out (display); +} + +static GtkActionEntry mail_reader_entries[] = { + + { "mail-add-sender", + NULL, + N_("A_dd Sender to Address Book"), + NULL, + N_("Add sender to address book"), + G_CALLBACK (action_mail_add_sender_cb) }, + + { "mail-check-for-junk", + "mail-mark-junk", + N_("Check for _Junk"), + NULL, + N_("Filter the selected messages for junk status"), + G_CALLBACK (action_mail_check_for_junk_cb) }, + + { "mail-clipboard-copy", + GTK_STOCK_COPY, + NULL, + NULL, + N_("Copy selected messages to the clipboard"), + G_CALLBACK (action_mail_clipboard_copy_cb) }, + + { "mail-copy", + "mail-copy", + N_("_Copy to Folder"), + "y", + N_("Copy selected messages to another folder"), + G_CALLBACK (action_mail_copy_cb) }, + + { "mail-delete", + "user-trash", + N_("_Delete Message"), + "d", + N_("Mark the selected messages for deletion"), + G_CALLBACK (action_mail_delete_cb) }, + + { "mail-filter-on-mailing-list", + NULL, + N_("Filter on Mailing _List..."), + NULL, + N_("Create a rule to filter messages to this mailing list"), + G_CALLBACK (action_mail_filter_on_mailing_list_cb) }, + + { "mail-filter-on-recipients", + NULL, + N_("Filter on _Recipients..."), + NULL, + N_("Create a rule to filter messages to these recipients"), + G_CALLBACK (action_mail_filter_on_recipients_cb) }, + + { "mail-filter-on-sender", + NULL, + N_("Filter on Se_nder..."), + NULL, + N_("Create a rule to filter messages from this sender"), + G_CALLBACK (action_mail_filter_on_sender_cb) }, + + { "mail-filter-on-subject", + NULL, + N_("Filter on _Subject..."), + NULL, + N_("Create a rule to filter messages with this subject"), + G_CALLBACK (action_mail_filter_on_subject_cb) }, + + { "mail-filters-apply", + "stock_mail-filters-apply", + N_("A_pply Filters"), + "y", + N_("Apply filter rules to the selected messages"), + G_CALLBACK (action_mail_filters_apply_cb) }, + + { "mail-find", + GTK_STOCK_FIND, + N_("_Find in Message..."), + "f", + N_("Search for text in the body of the displayed message"), + G_CALLBACK (action_mail_find_cb) }, + + { "mail-flag-clear", + NULL, + N_("_Clear Flag"), + NULL, + N_("Remove the follow-up flag from the selected messages"), + G_CALLBACK (action_mail_flag_clear_cb) }, + + { "mail-flag-completed", + NULL, + N_("_Flag Completed"), + NULL, + N_("Set the follow-up flag to completed on the selected messages"), + G_CALLBACK (action_mail_flag_completed_cb) }, + + { "mail-flag-for-followup", + "stock_mail-flag-for-followup", + N_("Follow _Up..."), + "g", + N_("Flag the selected messages for follow-up"), + G_CALLBACK (action_mail_flag_for_followup_cb) }, + + { "mail-forward", + "mail-forward", + N_("_Forward"), + "f", + N_("Forward the selected message to someone"), + G_CALLBACK (action_mail_forward_cb) }, + + { "mail-forward-attached", + NULL, + N_("_Attached"), + NULL, + N_("Forward the selected message to someone as an attachment"), + G_CALLBACK (action_mail_forward_attached_cb) }, + + { "mail-forward-inline", + NULL, + N_("_Inline"), + NULL, + N_("Forward the selected message in the body of a new message"), + G_CALLBACK (action_mail_forward_inline_cb) }, + + { "mail-forward-quoted", + NULL, + N_("_Quoted"), + NULL, + N_("Forward the selected message quoted like a reply"), + G_CALLBACK (action_mail_forward_quoted_cb) }, + + { "mail-load-images", + "image-x-generic", + N_("_Load Images"), + "i", + N_("Force images in HTML mail to be loaded"), + G_CALLBACK (action_mail_load_images_cb) }, + + { "mail-mark-important", + "mail-mark-important", + N_("_Important"), + NULL, + N_("Mark the selected messages as important"), + G_CALLBACK (action_mail_mark_important_cb) }, + + { "mail-mark-junk", + "mail-mark-junk", + N_("_Junk"), + "j", + N_("Mark the selected messages as junk"), + G_CALLBACK (action_mail_mark_junk_cb) }, + + { "mail-mark-notjunk", + "mail-mark-notjunk", + N_("_Not Junk"), + "j", + N_("Mark the selected messasges as not being junk"), + G_CALLBACK (action_mail_mark_notjunk_cb) }, + + { "mail-mark-read", + "mail-mark-read", + N_("_Read"), + "k", + N_("Mark the selected messages as having been read"), + G_CALLBACK (action_mail_mark_read_cb) }, + + { "mail-mark-unimportant", + NULL, + N_("Uni_mportant"), + NULL, + N_("Mark the selected messages as unimportant"), + G_CALLBACK (action_mail_mark_unimportant_cb) }, + + { "mail-mark-unread", + "mail-mark-unread", + N_("_Unread"), + "k", + N_("Mark the selected messages as not having been read"), + G_CALLBACK (action_mail_mark_unread_cb) }, + + { "mail-message-edit", + NULL, + N_("_Edit as New Message..."), + NULL, + N_("Open the selected messages in the composer for editing"), + G_CALLBACK (action_mail_message_edit_cb) }, + + { "mail-message-new", + "mail-message-new", + N_("Compose _New Message"), + "m", + N_("Open a window for composing a mail message"), + G_CALLBACK (action_mail_message_new_cb) }, + + { "mail-message-open", + NULL, + N_("_Open in New Window"), + "o", + N_("Open the selected messages in a new window"), + G_CALLBACK (action_mail_message_open_cb) }, + + { "mail-message-post", + NULL, + N_("Pos_t New Message to Folder"), + NULL, + N_("Post a message to a public folder"), + G_CALLBACK (action_mail_message_post_cb) }, + + { "mail-move", + "mail-move", + N_("_Move to Folder"), + "v", + N_("Move selected messages to another folder"), + G_CALLBACK (action_mail_move_cb) }, + + { "mail-next", + GTK_STOCK_GO_FORWARD, + N_("_Next Message"), + "Page_Down", + N_("Display the next message"), + G_CALLBACK (action_mail_next_cb) }, + + { "mail-next-important", + NULL, + N_("Next _Important Message"), + NULL, + N_("Display the next important message"), + G_CALLBACK (action_mail_next_important_cb) }, + + { "mail-next-thread", + NULL, + N_("Next _Thread"), + NULL, + N_("Display the next thread"), + G_CALLBACK (action_mail_next_thread_cb) }, + + { "mail-next-unread", + NULL, + N_("Next _Unread Message"), + "bracketright", + N_("Display the next unread message"), + G_CALLBACK (action_mail_next_unread_cb) }, + + { "mail-previous", + GTK_STOCK_GO_BACK, + N_("_Previous Message"), + "Page_Up", + N_("Display the previous message"), + G_CALLBACK (action_mail_previous_cb) }, + + { "mail-previous-important", + NULL, + N_("Pr_evious Important Message"), + NULL, + N_("Display the previous important message"), + G_CALLBACK (action_mail_previous_important_cb) }, + + { "mail-previous-unread", + NULL, + N_("P_revious Unread Message"), + "bracketleft", + N_("Display the previous unread message"), + G_CALLBACK (action_mail_previous_unread_cb) }, + + { "mail-print", + GTK_STOCK_PRINT, + NULL, + NULL, + N_("Print this message"), + G_CALLBACK (action_mail_print_cb) }, + + { "mail-print-preview", + GTK_STOCK_PRINT_PREVIEW, + NULL, + NULL, + N_("Preview the message to be printed"), + G_CALLBACK (action_mail_print_preview_cb) }, + + { "mail-redirect", + NULL, + N_("Re_direct"), + NULL, + N_("Redirect (bounce) the selected message to someone"), + G_CALLBACK (action_mail_redirect_cb) }, + + { "mail-reply-all", + "mail-reply-all", + N_("Reply to _All"), + "r", + N_("Compose a reply to all the recipients of the selected message"), + G_CALLBACK (action_mail_reply_all_cb) }, + + { "mail-reply-list", + NULL, + N_("Reply to _List"), + "l", + N_("Compose a reply to the mailing list of the selected message"), + G_CALLBACK (action_mail_reply_list_cb) }, + + { "mail-reply-post", + NULL, + N_("Post a Repl_y"), + NULL, + N_("Post a reply to a message in a public folder"), + G_CALLBACK (action_mail_reply_post_cb) }, + + { "mail-reply-sender", + "mail-reply-sender", + N_("_Reply to Sender"), + "r", + N_("Compose a reply to the sender of the selected message"), + G_CALLBACK (action_mail_reply_sender_cb) }, + + { "mail-save-as", + GTK_STOCK_SAVE_AS, + N_("_Save as mbox..."), + NULL, + N_("Save selected messages as an mbox file"), + G_CALLBACK (action_mail_save_as_cb) }, + + { "mail-search-folder-from-mailing-list", + NULL, + N_("Search Folder from Mailing _List..."), + NULL, + N_("Create a search folder for this mailing list"), + G_CALLBACK (action_mail_search_folder_from_mailing_list_cb) }, + + { "mail-search-folder-from-recipients", + NULL, + N_("Search Folder from Recipien_ts..."), + NULL, + N_("Create a search folder for these recipients"), + G_CALLBACK (action_mail_search_folder_from_recipients_cb) }, + + { "mail-search-folder-from-sender", + NULL, + N_("Search Folder from Sen_der..."), + NULL, + N_("Create a search folder for this sender"), + G_CALLBACK (action_mail_search_folder_from_sender_cb) }, + + { "mail-search-folder-from-subject", + NULL, + N_("Search Folder from S_ubject..."), + NULL, + N_("Create a search folder for this subject"), + G_CALLBACK (action_mail_search_folder_from_subject_cb) }, + + { "mail-select-all", + NULL, + N_("Select _All Text"), + "x", + N_("Select all the text in a message"), + G_CALLBACK (action_mail_select_all_cb) }, + + { "mail-show-source", + NULL, + N_("_Message Source"), + "u", + N_("Show the raw email source of the message"), + G_CALLBACK (action_mail_show_source_cb) }, + + { "mail-toggle-important", + NULL, + NULL, /* No menu item; key press only */ + NULL, + NULL, + G_CALLBACK (action_mail_toggle_important_cb) }, + + { "mail-undelete", + NULL, + N_("_Undelete Message"), + "d", + N_("Undelete the selected messages"), + G_CALLBACK (action_mail_undelete_cb) }, + + { "mail-zoom-100", + GTK_STOCK_ZOOM_100, + N_("_Normal Size"), + "0", + N_("Reset the text to its original size"), + G_CALLBACK (action_mail_zoom_100_cb) }, + + { "mail-zoom-in", + GTK_STOCK_ZOOM_IN, + N_("_Zoom In"), + "plus", + N_("Increase the text size"), + G_CALLBACK (action_mail_zoom_in_cb) }, + + { "mail-zoom-out", + GTK_STOCK_ZOOM_OUT, + N_("Zoom _Out"), + "minus", + N_("Decrease the text size"), + G_CALLBACK (action_mail_zoom_out_cb) }, + + /*** Menus ***/ + + { "mail-create-rule-menu", + NULL, + N_("Create R_ule"), + NULL, + NULL, + NULL }, + + { "mail-encoding-menu", + NULL, + N_("Ch_aracter Encoding"), + NULL, + NULL, + NULL }, + + { "mail-forward-as-menu", + NULL, + N_("F_orward As..."), + NULL, + NULL, + NULL }, + + { "mail-goto-menu", + GTK_STOCK_JUMP_TO, + N_("_Go To"), + NULL, + NULL, + NULL }, + + { "mail-mark-as-menu", + NULL, + N_("Mar_k As"), + NULL, + NULL, + NULL }, + + { "mail-message-menu", + NULL, + N_("_Message"), + NULL, + NULL, + NULL }, + + { "mail-zoom-menu", + NULL, + N_("_Zoom"), + NULL, + NULL, + NULL } +}; + +static GtkToggleActionEntry mail_reader_toggle_entries[] = { + + { "mail-caret-mode", + NULL, + N_("_Caret Mode"), + "F7", + N_("Show a blinking cursor in the body of displayed messages"), + G_CALLBACK (action_mail_caret_mode_cb), + FALSE }, + + { "mail-show-all-headers", + NULL, + N_("All Message _Headers"), + NULL, + N_("Show messages with all email headers"), + G_CALLBACK (action_mail_show_all_headers_cb), + FALSE } +}; + +static void +mail_reader_double_click_cb (EMailReader *reader, + gint row, + ETreePath path, + gint col, + GdkEvent *event) +{ + /* Ignore double clicks on columns that handle their own state. */ + if (MESSAGE_LIST_COLUMN_IS_ACTIVE (col)) + return; + + e_mail_reader_activate (reader, "mail-message-open"); +} + +static gint +mail_reader_key_press_cb (EMailReader *reader, + gint row, + ETreePath path, + gint col, + GdkEvent *event) +{ + const gchar *action_name; + + if ((event->key.state & GDK_CONTROL_MASK) != 0) + return FALSE; + + switch (event->key.keyval) { + case GDK_Return: + case GDK_KP_Enter: + case GDK_ISO_Enter: + action_name = "mail-message-open"; + break; + +#ifdef HAVE_XFREE + case XF86XK_Reply: + action_name = "mail-reply-all"; + break; + + case XF86XK_MailForward: + action_name = "mail-forward"; + break; +#endif + + case '!': + action_name = "mail-toggle-important"; + break; + + default: + return FALSE; + } + + e_mail_reader_activate (reader, action_name); + + return TRUE; +} + +static void +mail_reader_class_init (EMailReaderIface *iface) +{ +} + +GType +e_mail_reader_get_type (void) +{ + static GType type = 0; + + if (G_UNLIKELY (type == 0)) { + static const GTypeInfo type_info = { + sizeof (EMailReaderIface), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) mail_reader_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + 0, /* instance_size */ + 0, /* n_preallocs */ + NULL, /* instance_init */ + NULL /* value_table */ + }; + + type = g_type_register_static ( + G_TYPE_INTERFACE, "EMailReader", &type_info, 0); + + g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); + } + + return type; +} + +void +e_mail_reader_init (EMailReader *reader) +{ + MessageList *message_list; + GtkActionGroup *action_group; + GConfBridge *bridge; + GtkAction *action; + const gchar *key; + + g_return_if_fail (E_IS_MAIL_READER (reader)); + + action_group = e_mail_reader_get_action_group (reader); + message_list = e_mail_reader_get_message_list (reader); + + gtk_action_group_add_actions ( + action_group, mail_reader_entries, + G_N_ELEMENTS (mail_reader_entries), reader); + gtk_action_group_add_toggle_actions ( + action_group, mail_reader_toggle_entries, + G_N_ELEMENTS (mail_reader_toggle_entries), reader); + + /* Bind GObject properties to GConf keys. */ + + bridge = gconf_bridge_get (); + + key = "/apps/evolution/mail/display/caret_mode"; + action = gtk_action_group_get_action (action_group, "mail-caret-mode"); + gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); + + /* Fine tuning. */ + + action = gtk_action_group_get_action (action_group, "mail-delete"); + g_object_set (action, "short-label", _("Delete"), NULL); + + action = gtk_action_group_get_action (action_group, "mail-next"); + g_object_set (action, "short-label", _("Next"), NULL); + + action = gtk_action_group_get_action (action_group, "mail-previous"); + g_object_set (action, "short-label", _("Previous"), NULL); + + action = gtk_action_group_get_action (action_group, "mail-reply"); + g_object_set (action, "short-label", _("Reply"), NULL); + + /* Connect signals. */ + + g_signal_connect_swapped ( + message_list->tree, "double-click", + G_CALLBACK (mail_reader_double_click_cb), reader); + + g_signal_connect_swapped ( + message_list->tree, "key-press", + G_CALLBACK (mail_reader_key_press_cb), reader); +} + +GtkActionGroup * +e_mail_reader_get_action_group (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_action_group != NULL, NULL); + + return iface->get_action_group (reader); +} + +EMFormatHTMLDisplay * +e_mail_reader_get_display (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_display != NULL, NULL); + + return iface->get_display (reader); +} + +CamelFolder * +e_mail_reader_get_folder (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_folder != NULL, NULL); + + return iface->get_folder (reader); +} + +const gchar * +e_mail_reader_get_folder_uri (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_folder_uri != NULL, NULL); + + return iface->get_folder_uri (reader); +} + +gboolean +e_mail_reader_get_hide_deleted (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), FALSE); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_hide_deleted != NULL, FALSE); + + return iface->get_hide_deleted (reader); +} + +MessageList * +e_mail_reader_get_message_list (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_message_list != NULL, NULL); + + return iface->get_message_list (reader); +} + +EShellSettings * +e_mail_reader_get_shell_settings (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_shell_settings != NULL, NULL); + + return iface->get_shell_settings (reader); +} + +EMFolderTreeModel * +e_mail_reader_get_tree_model (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_tree_model != NULL, NULL); + + return iface->get_tree_model (reader); +} + +GtkWindow * +e_mail_reader_get_window (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_window != NULL, NULL); + + return iface->get_window (reader); +} -- cgit v1.2.3 From a6c6f6d90674cf789a114768f8597086b572ffae Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 28 Dec 2008 04:16:48 +0000 Subject: Solve a translation issue related to the New menu. svn path=/branches/kill-bonobo/; revision=36934 --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index ca23deda78..112e8e9a80 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1521,7 +1521,7 @@ e_mail_reader_init (EMailReader *reader) action = gtk_action_group_get_action (action_group, "mail-previous"); g_object_set (action, "short-label", _("Previous"), NULL); - action = gtk_action_group_get_action (action_group, "mail-reply"); + action = gtk_action_group_get_action (action_group, "mail-reply-sender"); g_object_set (action, "short-label", _("Reply"), NULL); /* Connect signals. */ -- cgit v1.2.3 From 11e1bc38c325665c24b1c831d009f89b7112ebe5 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 29 Dec 2008 13:42:07 +0000 Subject: Get the basic mail browser window working. No message contents yet. svn path=/branches/kill-bonobo/; revision=36946 --- mail/e-mail-reader.c | 74 ++++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 112e8e9a80..702bf624f3 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -80,13 +80,13 @@ static void action_mail_caret_mode_cb (GtkToggleAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; gboolean active; - display = e_mail_reader_get_display (reader); active = gtk_toggle_action_get_active (action); + html_display = e_mail_reader_get_html_display (reader); - em_format_html_display_set_caret_mode (display, active); + em_format_html_display_set_caret_mode (html_display, active); } static void @@ -109,11 +109,11 @@ static void action_mail_clipboard_copy_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; GtkHTML *html; - display = e_mail_reader_get_display (reader); - html = ((EMFormatHTML *) display)->html; + html_display = e_mail_reader_get_html_display (reader); + html = ((EMFormatHTML *) html_display)->html; gtk_html_copy (html); } @@ -246,14 +246,14 @@ static void action_mail_flag_clear_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; MessageList *message_list; CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - display = e_mail_reader_get_display (reader); folder = e_mail_reader_get_folder (reader); + html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); @@ -261,21 +261,21 @@ action_mail_flag_clear_cb (GtkAction *action, em_utils_flag_for_followup_clear (window, folder, uids); - em_format_redraw ((EMFormat *) display); + em_format_redraw ((EMFormat *) html_display); } static void action_mail_flag_completed_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; MessageList *message_list; CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - display = e_mail_reader_get_display (reader); folder = e_mail_reader_get_folder (reader); + html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); @@ -283,7 +283,7 @@ action_mail_flag_completed_cb (GtkAction *action, em_utils_flag_for_followup_completed (window, folder, uids); - em_format_redraw ((EMFormat *) display); + em_format_redraw ((EMFormat *) html_display); } static void @@ -400,11 +400,11 @@ static void action_mail_load_images_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; - display = e_mail_reader_get_display (reader); + html_display = e_mail_reader_get_html_display (reader); - em_format_html_load_http ((EMFormatHTML *) display); + em_format_html_load_http ((EMFormatHTML *) html_display); } static void @@ -898,33 +898,33 @@ static void action_mail_zoom_100_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; - display = e_mail_reader_get_display (reader); + html_display = e_mail_reader_get_html_display (reader); - em_format_html_display_zoom_reset (display); + em_format_html_display_zoom_reset (html_display); } static void action_mail_zoom_in_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; - display = e_mail_reader_get_display (reader); + html_display = e_mail_reader_get_html_display (reader); - em_format_html_display_zoom_in (display); + em_format_html_display_zoom_in (html_display); } static void action_mail_zoom_out_cb (GtkAction *action, EMailReader *reader) { - EMFormatHTMLDisplay *display; + EMFormatHTMLDisplay *html_display; - display = e_mail_reader_get_display (reader); + html_display = e_mail_reader_get_html_display (reader); - em_format_html_display_zoom_out (display); + em_format_html_display_zoom_out (html_display); } static GtkActionEntry mail_reader_entries[] = { @@ -1548,19 +1548,6 @@ e_mail_reader_get_action_group (EMailReader *reader) return iface->get_action_group (reader); } -EMFormatHTMLDisplay * -e_mail_reader_get_display (EMailReader *reader) -{ - EMailReaderIface *iface; - - g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); - - iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_display != NULL, NULL); - - return iface->get_display (reader); -} - CamelFolder * e_mail_reader_get_folder (EMailReader *reader) { @@ -1600,6 +1587,19 @@ e_mail_reader_get_hide_deleted (EMailReader *reader) return iface->get_hide_deleted (reader); } +EMFormatHTMLDisplay * +e_mail_reader_get_html_display (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->get_html_display != NULL, NULL); + + return iface->get_html_display (reader); +} + MessageList * e_mail_reader_get_message_list (EMailReader *reader) { -- cgit v1.2.3 From 9d915124c28eb0772b4e1086d6988e7d56d9a04c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 31 Dec 2008 20:24:59 +0000 Subject: Get the Character Encoding menu working. Kill e_charset_picker_bonobo_ui_populate(). svn path=/branches/kill-bonobo/; revision=36950 --- mail/e-mail-reader.c | 258 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 188 insertions(+), 70 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 702bf624f3..4c09f96c55 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -29,9 +29,12 @@ #include #endif +#include "e-util/e-util.h" #include "e-util/gconf-bridge.h" +#include "widgets/misc/e-charset-picker.h" #include "mail/e-mail-reader-utils.h" +#include "mail/e-mail-shell-module.h" #include "mail/em-composer-utils.h" #include "mail/em-folder-selector.h" #include "mail/em-folder-tree.h" @@ -53,10 +56,10 @@ action_mail_add_sender_cb (GtkAction *action, GPtrArray *uids; const gchar *address; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); if (uids->len != 1) @@ -89,6 +92,24 @@ action_mail_caret_mode_cb (GtkToggleAction *action, em_format_html_display_set_caret_mode (html_display, active); } +static void +action_mail_charset_cb (GtkRadioAction *action, + GtkRadioAction *current, + EMailReader *reader) +{ + EMFormatHTMLDisplay *html_display; + const gchar *charset; + + if (action != current) + return; + + html_display = e_mail_reader_get_html_display (reader); + charset = g_object_get_data (G_OBJECT (action), "charset"); + + /* Charset for "Default" action will be NULL. */ + em_format_set_charset ((EMFormat *) html_display, charset); +} + static void action_mail_check_for_junk_cb (GtkAction *action, EMailReader *reader) @@ -97,9 +118,9 @@ action_mail_check_for_junk_cb (GtkAction *action, CamelFolder *folder; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); mail_filter_junk (folder, uids); @@ -122,6 +143,7 @@ static void action_mail_copy_cb (GtkAction *action, EMailReader *reader) { + EShellModule *shell_module; MessageList *message_list; EMFolderTreeModel *model; CamelFolder *folder; @@ -130,13 +152,15 @@ action_mail_copy_cb (GtkAction *action, GPtrArray *selected; const gchar *uri; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); - model = e_mail_reader_get_tree_model (reader); + shell_module = e_mail_reader_get_shell_module (reader); + model = e_mail_shell_module_get_folder_tree_model (shell_module); folder_tree = em_folder_tree_new_with_model (model); selected = message_list_get_selected (message_list); + folder = message_list->folder; + em_folder_tree_set_excluded ( EM_FOLDER_TREE (folder_tree), EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | @@ -227,9 +251,9 @@ action_mail_filters_apply_cb (GtkAction *action, CamelFolder *folder; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); mail_filter_on_demand (folder, uids); @@ -252,11 +276,11 @@ action_mail_flag_clear_cb (GtkAction *action, GtkWindow *window; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); em_utils_flag_for_followup_clear (window, folder, uids); @@ -274,11 +298,11 @@ action_mail_flag_completed_cb (GtkAction *action, GtkWindow *window; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); em_utils_flag_for_followup_completed (window, folder, uids); @@ -295,10 +319,10 @@ action_mail_flag_for_followup_cb (GtkAction *action, GtkWindow *window; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); em_utils_flag_for_followup (window, folder, uids); @@ -314,14 +338,14 @@ action_mail_forward_cb (GtkAction *action, GPtrArray *uids; const gchar *folder_uri; - folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); if (!em_utils_check_user_can_send_mail (window)) return; + folder = message_list->folder; + folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); em_utils_forward_messages (folder, uids, folder_uri); @@ -337,14 +361,14 @@ action_mail_forward_attached_cb (GtkAction *action, GPtrArray *uids; const gchar *folder_uri; - folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); if (!em_utils_check_user_can_send_mail (window)) return; + folder = message_list->folder; + folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); em_utils_forward_attached (folder, uids, folder_uri); @@ -360,14 +384,14 @@ action_mail_forward_inline_cb (GtkAction *action, GPtrArray *uids; const gchar *folder_uri; - folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); if (!em_utils_check_user_can_send_mail (window)) return; + folder = message_list->folder; + folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); em_utils_forward_inline (folder, uids, folder_uri); @@ -383,14 +407,14 @@ action_mail_forward_quoted_cb (GtkAction *action, GPtrArray *uids; const gchar *folder_uri; - folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); if (!em_utils_check_user_can_send_mail (window)) return; + folder = message_list->folder; + folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); em_utils_forward_quoted (folder, uids, folder_uri); @@ -489,13 +513,13 @@ action_mail_message_edit_cb (GtkAction *action, GtkWindow *window; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); window = e_mail_reader_get_window (reader); message_list = e_mail_reader_get_message_list (reader); if (!em_utils_check_user_can_send_mail (window)) return; + folder = message_list->folder; uids = message_list_get_selected (message_list); em_utils_edit_messages (folder, uids, FALSE); @@ -505,16 +529,16 @@ static void action_mail_message_new_cb (GtkAction *action, EMailReader *reader) { + MessageList *message_list; GtkWindow *window; - const gchar *folder_uri; - folder_uri = e_mail_reader_get_folder_uri (reader); + message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); if (!em_utils_check_user_can_send_mail (window)) return; - em_utils_compose_new_message (folder_uri); + em_utils_compose_new_message (message_list->folder_uri); } static void @@ -529,17 +553,18 @@ static void action_mail_message_post_cb (GtkAction *action, EMailReader *reader) { - CamelFolder *folder; + MessageList *message_list; - folder = e_mail_reader_get_folder (reader); + message_list = e_mail_reader_get_message_list (reader); - em_utils_post_to_folder (folder); + em_utils_post_to_folder (message_list->folder); } static void action_mail_move_cb (GtkAction *action, EMailReader *reader) { + EShellModule *shell_module; MessageList *message_list; EMFolderTreeModel *model; CamelFolder *folder; @@ -548,13 +573,15 @@ action_mail_move_cb (GtkAction *action, GPtrArray *selected; const gchar *uri; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); - model = e_mail_reader_get_tree_model (reader); + shell_module = e_mail_reader_get_shell_module (reader); + model = e_mail_shell_module_get_folder_tree_model (shell_module); folder_tree = em_folder_tree_new_with_model (model); selected = message_list_get_selected (message_list); + folder = message_list->folder; + em_folder_tree_set_excluded ( EM_FOLDER_TREE (folder_tree), EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | @@ -727,10 +754,10 @@ action_mail_redirect_cb (GtkAction *action, GtkWindow *window; const gchar *uid; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uid = message_list->cursor_uid; g_return_if_fail (uid != NULL); @@ -763,10 +790,10 @@ action_mail_reply_post_cb (GtkAction *action, GtkWindow *window; const gchar *uid; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uid = message_list->cursor_uid; g_return_if_fail (uid != NULL); @@ -792,10 +819,10 @@ action_mail_save_as_cb (GtkAction *action, GtkWindow *window; GPtrArray *uids; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); em_utils_save_messages (window, folder, uids); @@ -840,7 +867,17 @@ static void action_mail_show_all_headers_cb (GtkToggleAction *action, EMailReader *reader) { - /* FIXME */ + EMFormatHTMLDisplay *html_display; + em_format_mode_t mode; + + html_display = e_mail_reader_get_html_display (reader); + + if (gtk_toggle_action_get_active (action)) + mode = EM_FORMAT_ALLHEADERS; + else + mode = EM_FORMAT_NORMAL; + + em_format_set_mode ((EMFormat *) html_display, mode); } static void @@ -859,9 +896,9 @@ action_mail_toggle_important_cb (GtkAction *action, GPtrArray *uids; guint ii; - folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); + folder = message_list->folder; uids = message_list_get_selected (message_list); camel_folder_freeze (folder); @@ -1448,9 +1485,62 @@ mail_reader_key_press_cb (EMailReader *reader, return TRUE; } +static void +mail_reader_set_folder (EMailReader *reader, + CamelFolder *folder, + const gchar *folder_uri) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + gboolean outgoing; + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + outgoing = em_utils_folder_is_drafts (folder, folder_uri) || + em_utils_folder_is_outbox (folder, folder_uri) || + em_utils_folder_is_sent (folder, folder_uri); + + if (message_list->folder != NULL) + mail_sync_folder (message_list->folder, NULL, NULL); + + em_format_format ((EMFormat *) html_display, NULL, NULL, NULL); + message_list_set_folder (message_list, folder, folder_uri, outgoing); +} + +static void +mail_reader_init_charset_actions (EMailReader *reader) +{ + GtkActionGroup *action_group; + GtkRadioAction *default_action; + GSList *radio_group; + + action_group = e_mail_reader_get_action_group (reader); + + radio_group = e_charset_add_radio_actions ( + action_group, "mail-charset-", NULL, + G_CALLBACK (action_mail_charset_cb), reader); + + /* XXX Add a tooltip! */ + default_action = gtk_radio_action_new ( + "mail-charset-default", _("Default"), NULL, NULL, -1); + + gtk_radio_action_set_group (default_action, radio_group); + + g_signal_connect ( + default_action, "changed", + G_CALLBACK (action_mail_charset_cb), reader); + + gtk_action_group_add_action ( + action_group, GTK_ACTION (default_action)); + + gtk_radio_action_set_current_value (default_action, -1); +} + static void mail_reader_class_init (EMailReaderIface *iface) { + iface->set_folder = mail_reader_set_folder; } GType @@ -1488,6 +1578,7 @@ e_mail_reader_init (EMailReader *reader) GtkActionGroup *action_group; GConfBridge *bridge; GtkAction *action; + const gchar *action_name; const gchar *key; g_return_if_fail (E_IS_MAIL_READER (reader)); @@ -1502,12 +1593,20 @@ e_mail_reader_init (EMailReader *reader) action_group, mail_reader_toggle_entries, G_N_ELEMENTS (mail_reader_toggle_entries), reader); + mail_reader_init_charset_actions (reader); + /* Bind GObject properties to GConf keys. */ bridge = gconf_bridge_get (); + action_name = "mail-caret-mode"; key = "/apps/evolution/mail/display/caret_mode"; - action = gtk_action_group_get_action (action_group, "mail-caret-mode"); + action = gtk_action_group_get_action (action_group, action_name); + gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); + + action_name = "mail-show-all-headers"; + key = "/apps/evolution/mail/display/show_all_headers"; + action = gtk_action_group_get_action (action_group, action_name); gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); /* Fine tuning. */ @@ -1548,32 +1647,6 @@ e_mail_reader_get_action_group (EMailReader *reader) return iface->get_action_group (reader); } -CamelFolder * -e_mail_reader_get_folder (EMailReader *reader) -{ - EMailReaderIface *iface; - - g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); - - iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_folder != NULL, NULL); - - return iface->get_folder (reader); -} - -const gchar * -e_mail_reader_get_folder_uri (EMailReader *reader) -{ - EMailReaderIface *iface; - - g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); - - iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_folder_uri != NULL, NULL); - - return iface->get_folder_uri (reader); -} - gboolean e_mail_reader_get_hide_deleted (EMailReader *reader) { @@ -1613,41 +1686,86 @@ e_mail_reader_get_message_list (EMailReader *reader) return iface->get_message_list (reader); } -EShellSettings * -e_mail_reader_get_shell_settings (EMailReader *reader) +EShellModule * +e_mail_reader_get_shell_module (EMailReader *reader) { EMailReaderIface *iface; g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_shell_settings != NULL, NULL); + g_return_val_if_fail (iface->get_shell_module != NULL, NULL); - return iface->get_shell_settings (reader); + return iface->get_shell_module (reader); } -EMFolderTreeModel * -e_mail_reader_get_tree_model (EMailReader *reader) +GtkWindow * +e_mail_reader_get_window (EMailReader *reader) { EMailReaderIface *iface; g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_tree_model != NULL, NULL); + g_return_val_if_fail (iface->get_window != NULL, NULL); - return iface->get_tree_model (reader); + return iface->get_window (reader); } -GtkWindow * -e_mail_reader_get_window (EMailReader *reader) +void +e_mail_reader_set_folder (EMailReader *reader, + CamelFolder *folder, + const gchar *folder_uri) { EMailReaderIface *iface; - g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + g_return_if_fail (E_IS_MAIL_READER (reader)); + g_return_if_fail (CAMEL_IS_FOLDER (folder)); + g_return_if_fail (folder_uri != NULL); iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_window != NULL, NULL); + g_return_if_fail (iface->set_folder != NULL); - return iface->get_window (reader); + iface->set_folder (reader, folder, folder_uri); +} + +void +e_mail_reader_create_charset_menu (EMailReader *reader, + GtkUIManager *ui_manager, + guint merge_id) +{ + GtkActionGroup *action_group; + GtkAction *action; + const gchar *action_name; + const gchar *path; + GSList *list; + + g_return_if_fail (E_IS_MAIL_READER (reader)); + g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager)); + + action_name = "mail-charset-default"; + action_group = e_mail_reader_get_action_group (reader); + action = gtk_action_group_get_action (action_group, action_name); + g_return_if_fail (action != NULL); + + list = gtk_radio_action_get_group (GTK_RADIO_ACTION (action)); + list = g_slist_copy (list); + list = g_slist_remove (list, action); + list = g_slist_sort (list, (GCompareFunc) e_action_compare_by_label); + + path = "/main-menu/view-menu/mail-message-view-actions/mail-encoding-menu"; + + while (list != NULL) { + action = list->data; + + gtk_ui_manager_add_ui ( + ui_manager, merge_id, path, + gtk_action_get_name (action), + gtk_action_get_name (action), + GTK_UI_MANAGER_AUTO, FALSE); + + list = g_slist_delete_link (list, list); + } + + gtk_ui_manager_ensure_update (ui_manager); } -- cgit v1.2.3 From 8d8e4ac1c23905892a42b779188c852fdead7f5f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 7 Jan 2009 18:23:46 +0000 Subject: Tweak the EShell API. Disable File -> Close Window when there's only one window. Replace EMMessageBrowser with EMailBrowser. svn path=/branches/kill-bonobo/; revision=37009 --- mail/e-mail-reader.c | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 4c09f96c55..93279c2bfe 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -24,6 +24,7 @@ #include #include #include +#include #ifdef HAVE_XFREE #include @@ -31,11 +32,13 @@ #include "e-util/e-util.h" #include "e-util/gconf-bridge.h" +#include "shell/e-shell.h" #include "widgets/misc/e-charset-picker.h" #include "mail/e-mail-reader-utils.h" #include "mail/e-mail-shell-module.h" #include "mail/em-composer-utils.h" +#include "mail/em-event.h" #include "mail/em-folder-selector.h" #include "mail/em-folder-tree.h" #include "mail/em-utils.h" @@ -1485,6 +1488,164 @@ mail_reader_key_press_cb (EMailReader *reader, return TRUE; } +static gboolean +mail_reader_message_read_cb (EMailReader *reader) +{ + MessageList *message_list; + const gchar *uid; + + message_list = e_mail_reader_get_message_list (reader); + + uid = g_object_get_data (G_OBJECT (reader), "mark-read-uid"); + g_return_if_fail (uid != NULL); + + if (g_strcmp0 (message_list->cursor_uid, uid) == 0) + e_mail_reader_mark_as_read (reader, uid); +} + +static void +mail_reader_message_loaded_cb (CamelFolder *folder, + const gchar *message_uid, + CamelMimeMessage *message, + gpointer user_data, + CamelException *ex) +{ + EMailReader *reader = user_data; + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + EShellModule *shell_module; + EShellSettings *shell_settings; + EShell *shell; + EMEvent *event; + EMEventTargetMessage *target; + gboolean mark_read; + gint timeout_interval; + gpointer data; + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + shell_module = e_mail_reader_get_shell_module (reader); + shell = e_shell_module_get_shell (shell_module); + shell_settings = e_shell_get_shell_settings (shell); + + /* If the user picked a different message in the time it took + * to fetch this message, then don't bother rendering it. */ + if (g_strcmp0 (message_list->cursor_uid, message_uid) != 0) + return; + + /** @Event: message.reading + * @Title: Viewing a message + * @Target: EMEventTargetMessage + * + * message.reading is emitted whenever a user views a message. + */ + event = em_event_peek (); + target = em_event_target_new_message ( + event, folder, message, message_uid, 0); + e_event_emit ( + (EEvent *) event, "message.reading", + (EEventTarget *) target); + + em_format_format ( + (EMFormat *) html_display, folder, message_uid, message); + + /* Reset the shell view icon. */ + e_shell_event (shell, "mail-icon", "evolution-mail"); + + /* Determine whether to mark the message as read. */ + g_object_get ( + shell_settings, + "mail-mark-seen", &mark_read, + "mail-mark-seen-timeout", &timeout_interval, NULL); + + g_object_set_data_full ( + G_OBJECT (reader), "mark-read-uid", + g_strdup (message_uid), (GDestroyNotify) g_free); + + if (message_list->seen_id > 0) + g_source_remove (message_list->seen_id); + + if (mark_read) { + message_list->seen_id = g_timeout_add ( + timeout_interval, (GSourceFunc) + mail_reader_message_read_cb, reader); + + } else if (camel_exception_is_set (ex)) { + GtkHTMLStream *stream; + + /* Display the error inline and clear the exception. */ + stream = gtk_html_begin ( + ((EMFormatHTML *) html_display)->html); + gtk_html_stream_printf ( + stream, "

%s

%s

", + _("Unable to retrieve message"), + ex->desc); + gtk_html_stream_close (stream, GTK_HTML_STREAM_OK); + camel_exception_clear (ex); + } + + /* We referenced this in the call to mail_get_messagex(). */ + g_object_unref (reader); +} + +static gboolean +mail_reader_message_selected_timeout_cb (EMailReader *reader) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + const gchar *cursor_uid; + const gchar *format_uid; + const gchar *key; + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + cursor_uid = message_list->cursor_uid; + format_uid = ((EMFormat *) html_display)->uid; + + if (cursor_uid != NULL) { + if (g_strcmp0 (cursor_uid, format_uid) != 0) + mail_get_messagex ( + message_list->folder, cursor_uid, + mail_reader_message_loaded_cb, + g_object_ref (reader), + mail_msg_fast_ordered_push); + } else + em_format_format ((EMFormat *) html_display, NULL, NULL, NULL); + + key = "message-selected-timeout"; + g_object_set_data (G_OBJECT (reader), key, NULL); + + return FALSE; +} + +static void +mail_reader_message_selected_cb (EMailReader *reader, + const gchar *uid) +{ + const gchar *key; + guint source_id; + gpointer data; + + /* XXX This is kludgy, but we have no other place to store + * timeout state information. */ + + key = "message-selected-timeout"; + data = g_object_get_data (G_OBJECT (reader), key); + source_id = GPOINTER_TO_UINT (data); + + if (source_id > 0) + g_source_remove (source_id); + + source_id = g_timeout_add ( + 100, (GSourceFunc) + mail_reader_message_selected_timeout_cb, reader); + + data = GUINT_TO_POINTER (source_id); + g_object_set_data (G_OBJECT (reader), key, data); +} + static void mail_reader_set_folder (EMailReader *reader, CamelFolder *folder, @@ -1508,6 +1669,18 @@ mail_reader_set_folder (EMailReader *reader, message_list_set_folder (message_list, folder, folder_uri, outgoing); } +static void +mail_reader_set_message (EMailReader *reader, + const gchar *uid, + gboolean mark_read) +{ + MessageList *message_list; + gpointer data; + + message_list = e_mail_reader_get_message_list (reader); + message_list_select_uid (message_list, uid); +} + static void mail_reader_init_charset_actions (EMailReader *reader) { @@ -1541,6 +1714,7 @@ static void mail_reader_class_init (EMailReaderIface *iface) { iface->set_folder = mail_reader_set_folder; + iface->set_message = mail_reader_set_message; } GType @@ -1625,6 +1799,10 @@ e_mail_reader_init (EMailReader *reader) /* Connect signals. */ + g_signal_connect_swapped ( + message_list, "message-selected", + G_CALLBACK (mail_reader_message_selected_cb), reader); + g_signal_connect_swapped ( message_list->tree, "double-click", G_CALLBACK (mail_reader_double_click_cb), reader); @@ -1729,6 +1907,21 @@ e_mail_reader_set_folder (EMailReader *reader, iface->set_folder (reader, folder, folder_uri); } +void +e_mail_reader_set_message (EMailReader *reader, + const gchar *uid, + gboolean mark_read) +{ + EMailReaderIface *iface; + + g_return_if_fail (E_IS_MAIL_READER (reader)); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_if_fail (iface->set_message != NULL); + + iface->set_message (reader, uid, mark_read); +} + void e_mail_reader_create_charset_menu (EMailReader *reader, GtkUIManager *ui_manager, -- cgit v1.2.3 From 19f1e3fe20c29690aaf07d26e81760405cc577df Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 7 Jan 2009 21:27:06 +0000 Subject: Fix some miscellaneous mailer bugs. svn path=/branches/kill-bonobo/; revision=37011 --- mail/e-mail-reader.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 4 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 93279c2bfe..5a623baa96 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -548,7 +548,6 @@ static void action_mail_message_open_cb (GtkAction *action, EMailReader *reader) { - /* FIXME This belongs in EMailShellView */ e_mail_reader_open_selected (reader); } @@ -1456,15 +1455,29 @@ mail_reader_key_press_cb (EMailReader *reader, const gchar *action_name; if ((event->key.state & GDK_CONTROL_MASK) != 0) - return FALSE; + goto ctrl; + /* alone */ switch (event->key.keyval) { + case GDK_Delete: + case GDK_KP_Delete: + action_name = "mail-delete"; + break; + case GDK_Return: case GDK_KP_Enter: case GDK_ISO_Enter: action_name = "mail-message-open"; break; + case GDK_period: + action_name = "mail-next-unread"; + break; + + case GDK_comma: + action_name = "mail-previous-unread"; + break; + #ifdef HAVE_XFREE case XF86XK_Reply: action_name = "mail-reply-all"; @@ -1483,6 +1496,25 @@ mail_reader_key_press_cb (EMailReader *reader, return FALSE; } + goto exit; + +ctrl: + + /* Ctrl + */ + switch (event->key.keyval) { + case GDK_period: + action_name = "mail-next-unread"; + break; + + case GDK_comma: + action_name = "mail-previous-unread"; + break; + + default: + return FALSE; + } + +exit: e_mail_reader_activate (reader, action_name); return TRUE; @@ -1520,7 +1552,6 @@ mail_reader_message_loaded_cb (CamelFolder *folder, EMEventTargetMessage *target; gboolean mark_read; gint timeout_interval; - gpointer data; html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); @@ -1675,7 +1706,6 @@ mail_reader_set_message (EMailReader *reader, gboolean mark_read) { MessageList *message_list; - gpointer data; message_list = e_mail_reader_get_message_list (reader); message_list_select_uid (message_list, uid); @@ -1907,6 +1937,30 @@ e_mail_reader_set_folder (EMailReader *reader, iface->set_folder (reader, folder, folder_uri); } +/* Helper for e_mail_reader_set_folder_uri() */ +static void +mail_reader_got_folder_cb (gchar *folder_uri, + CamelFolder *folder, + gpointer user_data) +{ + EMailReader *reader = user_data; + + e_mail_reader_set_folder (reader, folder, folder_uri); +} + +void +e_mail_reader_set_folder_uri (EMailReader *reader, + const gchar *folder_uri) +{ + g_return_if_fail (E_IS_MAIL_READER (reader)); + g_return_if_fail (folder_uri != NULL); + + /* Fetch the CamelFolder asynchronously. */ + mail_get_folder ( + folder_uri, 0, mail_reader_got_folder_cb, + reader, mail_msg_fast_ordered_push); +} + void e_mail_reader_set_message (EMailReader *reader, const gchar *uid, -- cgit v1.2.3 From 59d1f3405c653eb45ca462508d5e6ed968513e42 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 9 Jan 2009 19:15:57 +0000 Subject: Add missing accelerator for File -> Print. svn path=/branches/kill-bonobo/; revision=37023 --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 5a623baa96..bdf9ec84b0 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1230,7 +1230,7 @@ static GtkActionEntry mail_reader_entries[] = { { "mail-print", GTK_STOCK_PRINT, NULL, - NULL, + "p", N_("Print this message"), G_CALLBACK (action_mail_print_cb) }, -- cgit v1.2.3 From e0610b2e0cea191f631dc825cdc8023cdcd9433d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 11 Jan 2009 14:20:50 +0000 Subject: Continue chipping away at EMFolderView and EMFolderBrowser. Migrate from gnome_url_show() to e_show_uri(). svn path=/branches/kill-bonobo/; revision=37038 --- mail/e-mail-reader.c | 324 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 314 insertions(+), 10 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index bdf9ec84b0..7260dcd47e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -35,6 +35,7 @@ #include "shell/e-shell.h" #include "widgets/misc/e-charset-picker.h" +#include "mail/e-mail-browser.h" #include "mail/e-mail-reader-utils.h" #include "mail/e-mail-shell-module.h" #include "mail/em-composer-utils.h" @@ -45,9 +46,17 @@ #include "mail/mail-autofilter.h" #include "mail/mail-ops.h" +enum { + CHANGED, + FOLDER_LOADED, + LAST_SIGNAL +}; + /* Remembers the previously selected folder when transferring messages. */ static gchar *default_xfer_messages_uri; +static guint signals[LAST_SIGNAL]; + static void action_mail_add_sender_cb (GtkAction *action, EMailReader *reader) @@ -862,7 +871,22 @@ static void action_mail_select_all_cb (GtkAction *action, EMailReader *reader) { - /* FIXME */ + EMFormatHTMLDisplay *html_display; + GtkActionGroup *action_group; + GtkHTML *html; + const gchar *action_name; + gboolean selection_active; + + html_display = e_mail_reader_get_html_display (reader); + html = ((EMFormatHTML *) html_display)->html; + + gtk_html_select_all (html); + + action_name = "mail-clipboard-copy"; + action_group = e_mail_reader_get_action_group (reader); + action = gtk_action_group_get_action (action_group, action_name); + selection_active = gtk_html_command (html, "is-selection-active"); + gtk_action_set_sensitive (action, selection_active); } static void @@ -886,7 +910,32 @@ static void action_mail_show_source_cb (GtkAction *action, EMailReader *reader) { - /* FIXME */ + EMFormatHTMLDisplay *html_display; + EShellModule *shell_module; + MessageList *message_list; + CamelFolder *folder; + GtkWidget *browser; + GPtrArray *uids; + const gchar *folder_uri; + + message_list = e_mail_reader_get_message_list (reader); + shell_module = e_mail_reader_get_shell_module (reader); + + folder = message_list->folder; + folder_uri = message_list->folder_uri; + uids = message_list_get_selected (message_list); + g_return_if_fail (uids->len > 0); + + /* FIXME Set session. */ + browser = e_mail_browser_new (shell_module); + reader = E_MAIL_READER (browser); + html_display = e_mail_reader_get_html_display (reader); + em_format_set_mode ((EMFormat *) html_display, EM_FORMAT_SOURCE); + e_mail_reader_set_folder (reader, folder, folder_uri); + e_mail_reader_set_message (reader, uids->pdata[0], FALSE); + gtk_widget_show (browser); + + message_list_free_uids (message_list, uids); } static void @@ -933,6 +982,46 @@ action_mail_undelete_cb (GtkAction *action, e_mail_reader_mark_selected (reader, mask, set); } +static void +action_mail_uri_call_to_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ + g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); +} + +static void +action_mail_uri_copy_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ + g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); +} + +static void +action_mail_uri_copy_address_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ + g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); +} + +static void +action_mail_uri_to_search_folder_recipient_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ + g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); +} + +static void +action_mail_uri_to_search_folder_sender_cb (GtkAction *action, + EMailReader *reader) +{ + /* FIXME */ + g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); +} + static void action_mail_zoom_100_cb (GtkAction *action, EMailReader *reader) @@ -991,7 +1080,7 @@ static GtkActionEntry mail_reader_entries[] = { { "mail-copy", "mail-copy", - N_("_Copy to Folder"), + N_("_Copy to Folder..."), "y", N_("Copy selected messages to another folder"), G_CALLBACK (action_mail_copy_cb) }, @@ -1173,7 +1262,7 @@ static GtkActionEntry mail_reader_entries[] = { { "mail-move", "mail-move", - N_("_Move to Folder"), + N_("_Move to Folder..."), "v", N_("Move selected messages to another folder"), G_CALLBACK (action_mail_move_cb) }, @@ -1339,6 +1428,41 @@ static GtkActionEntry mail_reader_entries[] = { N_("Undelete the selected messages"), G_CALLBACK (action_mail_undelete_cb) }, + { "mail-uri-call-to", + NULL, + N_("C_all To..."), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_mail_uri_call_to_cb) }, + + { "mail-uri-copy", + NULL, + N_("_Copy Link Location"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_mail_uri_copy_cb) }, + + { "mail-uri-copy-address", + GTK_STOCK_COPY, + N_("Copy _Email Address"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_mail_uri_copy_address_cb) }, + + { "mail-uri-to-search-folder-recipient", + NULL, + N_("_To This Address"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_mail_uri_to_search_folder_recipient_cb) }, + + { "mail-uri-to-search-folder-sender", + NULL, + N_("_From This Address"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_mail_uri_to_search_folder_sender_cb) }, + { "mail-zoom-100", GTK_STOCK_ZOOM_100, N_("_Normal Size"), @@ -1360,6 +1484,57 @@ static GtkActionEntry mail_reader_entries[] = { N_("Decrease the text size"), G_CALLBACK (action_mail_zoom_out_cb) }, + /*** Popup Menu Variations ***/ + + { "mail-popup-flag-for-followup", + "stock_mail-flag-for-followup", + N_("Mark for Follo_w Up..."), + NULL, + N_("Flag the selected messages for follow-up"), + G_CALLBACK (action_mail_flag_for_followup_cb) }, + + { "mail-popup-mark-important", + "mail-mark-important", + N_("Mark as _Important"), + NULL, + N_("Mark the selected messages as important"), + G_CALLBACK (action_mail_mark_important_cb) }, + + { "mail-popup-mark-junk", + "mail-mark-junk", + N_("Mark as _Junk"), + NULL, + N_("Mark the selected messages as junk"), + G_CALLBACK (action_mail_mark_junk_cb) }, + + { "mail-popup-mark-notjunk", + "mail-mark-notjunk", + N_("Mark as _Not Junk"), + NULL, + N_("Mark the selected messages as not being junk"), + G_CALLBACK (action_mail_mark_notjunk_cb) }, + + { "mail-popup-mark-read", + "mail-mark-read", + N_("Mark as _Read"), + NULL, + N_("Mark the selected messages as having been read"), + G_CALLBACK (action_mail_mark_read_cb) }, + + { "mail-popup-mark-unimportant", + NULL, + N_("Mark as Uni_mportant"), + NULL, + N_("Mark the selected message as unimportant"), + G_CALLBACK (action_mail_mark_unimportant_cb) }, + + { "mail-popup-mark-unread", + "mail-mark-unread", + N_("Mark as _Unread"), + NULL, + N_("Mark the selected messages as not having been read"), + G_CALLBACK (action_mail_mark_unread_cb) }, + /*** Menus ***/ { "mail-create-rule-menu", @@ -1390,6 +1565,13 @@ static GtkActionEntry mail_reader_entries[] = { NULL, NULL }, + { "mail-label-menu", + NULL, + N_("_Label"), + NULL, + NULL, + NULL }, + { "mail-mark-as-menu", NULL, N_("Mar_k As"), @@ -1404,6 +1586,13 @@ static GtkActionEntry mail_reader_entries[] = { NULL, NULL }, + { "mail-uri-to-search-folder-menu", + NULL, + N_("Create _Search Folder"), + NULL, + NULL, + NULL }, + { "mail-zoom-menu", NULL, N_("_Zoom"), @@ -1431,6 +1620,59 @@ static GtkToggleActionEntry mail_reader_toggle_entries[] = { FALSE } }; +static void +mail_reader_link_clicked_cb (EMailReader *reader, + const gchar *uri, + EMFormatHTMLDisplay *html_display) +{ + GtkHTML *html; + GtkWindow *window; + MessageList *message_list; + const gchar *folder_uri; + + html = ((EMFormatHTML *) html_display)->html; + message_list = e_mail_reader_get_message_list (reader); + window = e_mail_reader_get_window (reader); + folder_uri = message_list->folder_uri; + + if (g_str_has_prefix (uri, "##")) + return; + + if (g_ascii_strncasecmp (uri, "mailto:", 7) == 0) + em_utils_compose_new_message_with_mailto (uri, folder_uri); + + else if (*uri == '#') + gtk_html_jump_to_anchor (html, uri + 1); + + else if (g_ascii_strncasecmp (uri, "thismessage:", 12) == 0) + /* ignore */ ; + + else if (g_ascii_strncasecmp (uri, "cid:", 4) == 0) + /* ignore */ ; + + else + e_show_uri (window, uri); +} + +static gboolean +mail_reader_html_button_release_event_cb (EMailReader *reader, + GdkEventButton *button, + GtkHTML *html) +{ + GtkActionGroup *action_group; + GtkAction *action; + const gchar *action_name; + gboolean selection_active; + + action_name = "mail-clipboard-copy"; + action_group = e_mail_reader_get_action_group (reader); + action = gtk_action_group_get_action (action_group, action_name); + selection_active = gtk_html_command (html, "is-selection-active"); + gtk_action_set_sensitive (action, selection_active); + + return FALSE; +} + static void mail_reader_double_click_cb (EMailReader *reader, gint row, @@ -1529,10 +1771,12 @@ mail_reader_message_read_cb (EMailReader *reader) message_list = e_mail_reader_get_message_list (reader); uid = g_object_get_data (G_OBJECT (reader), "mark-read-uid"); - g_return_if_fail (uid != NULL); + g_return_val_if_fail (uid != NULL, FALSE); if (g_strcmp0 (message_list->cursor_uid, uid) == 0) e_mail_reader_mark_as_read (reader, uid); + + return FALSE; } static void @@ -1675,6 +1919,14 @@ mail_reader_message_selected_cb (EMailReader *reader, data = GUINT_TO_POINTER (source_id); g_object_set_data (G_OBJECT (reader), key, data); + + e_mail_reader_changed (reader); +} + +static void +mail_reader_emit_folder_loaded (EMailReader *reader) +{ + g_signal_emit (reader, signals[FOLDER_LOADED], 0); } static void @@ -1698,6 +1950,8 @@ mail_reader_set_folder (EMailReader *reader, em_format_format ((EMFormat *) html_display, NULL, NULL, NULL); message_list_set_folder (message_list, folder, folder_uri, outgoing); + + mail_reader_emit_folder_loaded (reader); } static void @@ -1745,6 +1999,22 @@ mail_reader_class_init (EMailReaderIface *iface) { iface->set_folder = mail_reader_set_folder; iface->set_message = mail_reader_set_message; + + signals[CHANGED] = g_signal_new ( + "changed", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[FOLDER_LOADED] = g_signal_new ( + "folder-loaded", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } GType @@ -1778,8 +2048,9 @@ e_mail_reader_get_type (void) void e_mail_reader_init (EMailReader *reader) { - MessageList *message_list; + EMFormatHTMLDisplay *html_display; GtkActionGroup *action_group; + MessageList *message_list; GConfBridge *bridge; GtkAction *action; const gchar *action_name; @@ -1788,6 +2059,7 @@ e_mail_reader_init (EMailReader *reader) g_return_if_fail (E_IS_MAIL_READER (reader)); action_group = e_mail_reader_get_action_group (reader); + html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); gtk_action_group_add_actions ( @@ -1815,24 +2087,44 @@ e_mail_reader_init (EMailReader *reader) /* Fine tuning. */ - action = gtk_action_group_get_action (action_group, "mail-delete"); + action_name = "mail-clipboard-copy"; + action = gtk_action_group_get_action (action_group, action_name); + gtk_action_set_sensitive (action, FALSE); + + action_name = "mail-delete"; + action = gtk_action_group_get_action (action_group, action_name); g_object_set (action, "short-label", _("Delete"), NULL); - action = gtk_action_group_get_action (action_group, "mail-next"); + action_name = "mail-next"; + action = gtk_action_group_get_action (action_group, action_name); g_object_set (action, "short-label", _("Next"), NULL); - action = gtk_action_group_get_action (action_group, "mail-previous"); + action_name = "mail-previous"; + action = gtk_action_group_get_action (action_group, action_name); g_object_set (action, "short-label", _("Previous"), NULL); - action = gtk_action_group_get_action (action_group, "mail-reply-sender"); + action_name = "mail-reply-sender"; + action = gtk_action_group_get_action (action_group, action_name); g_object_set (action, "short-label", _("Reply"), NULL); /* Connect signals. */ + g_signal_connect_swapped ( + html_display, "link-clicked", + G_CALLBACK (mail_reader_link_clicked_cb), reader); + + g_signal_connect_swapped ( + ((EMFormatHTML *) html_display)->html, "button-release-event", + G_CALLBACK (mail_reader_html_button_release_event_cb), reader); + g_signal_connect_swapped ( message_list, "message-selected", G_CALLBACK (mail_reader_message_selected_cb), reader); + g_signal_connect_swapped ( + message_list, "message-list-built", + G_CALLBACK (mail_reader_emit_folder_loaded), reader); + g_signal_connect_swapped ( message_list->tree, "double-click", G_CALLBACK (mail_reader_double_click_cb), reader); @@ -1840,6 +2132,18 @@ e_mail_reader_init (EMailReader *reader) g_signal_connect_swapped ( message_list->tree, "key-press", G_CALLBACK (mail_reader_key_press_cb), reader); + + g_signal_connect_swapped ( + message_list->tree, "selection-change", + G_CALLBACK (e_mail_reader_changed), reader); +} + +void +e_mail_reader_changed (EMailReader *reader) +{ + g_return_if_fail (E_IS_MAIL_READER (reader)); + + g_signal_emit (reader, signals[CHANGED], 0); } GtkActionGroup * -- cgit v1.2.3 From 8e546420df08f5fe243aa4227be44915fd79b86b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 17 Jan 2009 23:46:45 +0000 Subject: Fix a runtime warning. svn path=/branches/kill-bonobo/; revision=37094 --- mail/e-mail-reader.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 7260dcd47e..697142aa6d 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1941,9 +1941,10 @@ mail_reader_set_folder (EMailReader *reader, html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); - outgoing = em_utils_folder_is_drafts (folder, folder_uri) || + outgoing = folder != NULL && folder_uri != NULL && ( + em_utils_folder_is_drafts (folder, folder_uri) || em_utils_folder_is_outbox (folder, folder_uri) || - em_utils_folder_is_sent (folder, folder_uri); + em_utils_folder_is_sent (folder, folder_uri)); if (message_list->folder != NULL) mail_sync_folder (message_list->folder, NULL, NULL); @@ -2232,8 +2233,6 @@ e_mail_reader_set_folder (EMailReader *reader, EMailReaderIface *iface; g_return_if_fail (E_IS_MAIL_READER (reader)); - g_return_if_fail (CAMEL_IS_FOLDER (folder)); - g_return_if_fail (folder_uri != NULL); iface = E_MAIL_READER_GET_IFACE (reader); g_return_if_fail (iface->set_folder != NULL); -- cgit v1.2.3 From 22d41a51fae2d18315887b05000cf7facc36e887 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 20 Jan 2009 00:05:40 +0000 Subject: Formalize the "no disabled items in popup menus" policy in the form of a GtkAction subclass called EPopupAction. Migrate all the modules over to using EPopupActions in their popup menus. Add sensitivity management of GtkActions to EMailReader. Not finished. svn path=/branches/kill-bonobo/; revision=37106 --- mail/e-mail-reader.c | 554 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 487 insertions(+), 67 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 697142aa6d..204141b430 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -31,9 +31,11 @@ #endif #include "e-util/e-util.h" +#include "e-util/e-binding.h" #include "e-util/gconf-bridge.h" #include "shell/e-shell.h" #include "widgets/misc/e-charset-picker.h" +#include "widgets/misc/e-popup-action.h" #include "mail/e-mail-browser.h" #include "mail/e-mail-reader-utils.h" @@ -872,7 +874,6 @@ action_mail_select_all_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; - GtkActionGroup *action_group; GtkHTML *html; const gchar *action_name; gboolean selection_active; @@ -883,8 +884,7 @@ action_mail_select_all_cb (GtkAction *action, gtk_html_select_all (html); action_name = "mail-clipboard-copy"; - action_group = e_mail_reader_get_action_group (reader); - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); selection_active = gtk_html_command (html, "is-selection-active"); gtk_action_set_sensitive (action, selection_active); } @@ -1484,57 +1484,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Decrease the text size"), G_CALLBACK (action_mail_zoom_out_cb) }, - /*** Popup Menu Variations ***/ - - { "mail-popup-flag-for-followup", - "stock_mail-flag-for-followup", - N_("Mark for Follo_w Up..."), - NULL, - N_("Flag the selected messages for follow-up"), - G_CALLBACK (action_mail_flag_for_followup_cb) }, - - { "mail-popup-mark-important", - "mail-mark-important", - N_("Mark as _Important"), - NULL, - N_("Mark the selected messages as important"), - G_CALLBACK (action_mail_mark_important_cb) }, - - { "mail-popup-mark-junk", - "mail-mark-junk", - N_("Mark as _Junk"), - NULL, - N_("Mark the selected messages as junk"), - G_CALLBACK (action_mail_mark_junk_cb) }, - - { "mail-popup-mark-notjunk", - "mail-mark-notjunk", - N_("Mark as _Not Junk"), - NULL, - N_("Mark the selected messages as not being junk"), - G_CALLBACK (action_mail_mark_notjunk_cb) }, - - { "mail-popup-mark-read", - "mail-mark-read", - N_("Mark as _Read"), - NULL, - N_("Mark the selected messages as having been read"), - G_CALLBACK (action_mail_mark_read_cb) }, - - { "mail-popup-mark-unimportant", - NULL, - N_("Mark as Uni_mportant"), - NULL, - N_("Mark the selected message as unimportant"), - G_CALLBACK (action_mail_mark_unimportant_cb) }, - - { "mail-popup-mark-unread", - "mail-mark-unread", - N_("Mark as _Unread"), - NULL, - N_("Mark the selected messages as not having been read"), - G_CALLBACK (action_mail_mark_unread_cb) }, - /*** Menus ***/ { "mail-create-rule-menu", @@ -1601,6 +1550,77 @@ static GtkActionEntry mail_reader_entries[] = { NULL } }; +static EPopupActionEntry mail_reader_popup_entries[] = { + + { "mail-popup-copy", + NULL, + "mail-copy" }, + + { "mail-popup-delete", + NULL, + "mail-delete" }, + + { "mail-popup-flag-for-followup", + N_("Mark for Follo_w Up..."), + "mail-flag-for-followup" }, + + { "mail-popup-forward", + NULL, + "mail-forward" }, + + { "mail-popup-mark-important", + N_("Mark as _Important"), + "mail-mark-important" }, + + { "mail-popup-mark-junk", + N_("Mark as _Junk"), + "mail-mark-junk" }, + + { "mail-popup-mark-notjunk", + N_("Mark as _Not Junk"), + "mail-mark-notjunk" }, + + { "mail-popup-mark-read", + N_("Mark as _Read"), + "mail-mark-read" }, + + { "mail-popup-mark-unimportant", + N_("Mark as Uni_mportant"), + "mail-mark-unimportant" }, + + { "mail-popup-mark-unread", + N_("Mark as _Unread"), + "mail-mark-unread" }, + + { "mail-popup-message-edit", + NULL, + "mail-message-edit" }, + + { "mail-popup-move", + NULL, + "mail-move" }, + + { "mail-popup-print", + NULL, + "mail-print" }, + + { "mail-popup-reply-all", + NULL, + "mail-reply-all" }, + + { "mail-popup-reply-sender", + NULL, + "mail-reply-sender" }, + + { "mail-popup-save-as", + NULL, + "mail-save-as" }, + + { "mail-popup-undelete", + NULL, + "mail-undelete" } +}; + static GtkToggleActionEntry mail_reader_toggle_entries[] = { { "mail-caret-mode", @@ -1659,14 +1679,12 @@ mail_reader_html_button_release_event_cb (EMailReader *reader, GdkEventButton *button, GtkHTML *html) { - GtkActionGroup *action_group; GtkAction *action; const gchar *action_name; gboolean selection_active; action_name = "mail-clipboard-copy"; - action_group = e_mail_reader_get_action_group (reader); - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); selection_active = gtk_html_command (html, "is-selection-active"); gtk_action_set_sensitive (action, selection_active); @@ -1860,6 +1878,8 @@ mail_reader_message_loaded_cb (CamelFolder *folder, camel_exception_clear (ex); } + e_mail_reader_update_actions (reader); + /* We referenced this in the call to mail_get_messagex(). */ g_object_unref (reader); } @@ -2066,6 +2086,9 @@ e_mail_reader_init (EMailReader *reader) gtk_action_group_add_actions ( action_group, mail_reader_entries, G_N_ELEMENTS (mail_reader_entries), reader); + e_action_group_add_popup_actions ( + action_group, mail_reader_popup_entries, + G_N_ELEMENTS (mail_reader_popup_entries)); gtk_action_group_add_toggle_actions ( action_group, mail_reader_toggle_entries, G_N_ELEMENTS (mail_reader_toggle_entries), reader); @@ -2078,34 +2101,34 @@ e_mail_reader_init (EMailReader *reader) action_name = "mail-caret-mode"; key = "/apps/evolution/mail/display/caret_mode"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); action_name = "mail-show-all-headers"; key = "/apps/evolution/mail/display/show_all_headers"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); /* Fine tuning. */ action_name = "mail-clipboard-copy"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, FALSE); action_name = "mail-delete"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Delete"), NULL); action_name = "mail-next"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Next"), NULL); action_name = "mail-previous"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Previous"), NULL); action_name = "mail-reply-sender"; - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Reply"), NULL); /* Connect signals. */ @@ -2147,6 +2170,405 @@ e_mail_reader_changed (EMailReader *reader) g_signal_emit (reader, signals[CHANGED], 0); } +guint32 +e_mail_reader_check_state (EMailReader *reader) +{ + MessageList *message_list; + GPtrArray *uids; + CamelFolder *folder; + CamelStore *store = NULL; + const gchar *folder_uri; + const gchar *tag; + gboolean can_clear_flags = FALSE; + gboolean can_flag_completed = FALSE; + gboolean can_flag_for_followup = FALSE; + gboolean has_deleted = FALSE; + gboolean has_important = FALSE; + gboolean has_junk = FALSE; + gboolean has_not_junk = FALSE; + gboolean has_read = FALSE; + gboolean has_undeleted = FALSE; + gboolean has_unimportant = FALSE; + gboolean has_unread = FALSE; + gboolean draft_or_outbox; + guint32 state = 0; + guint ii; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), 0); + + message_list = e_mail_reader_get_message_list (reader); + uids = message_list_get_selected (message_list); + folder_uri = message_list->folder_uri; + folder = message_list->folder; + + if (folder != NULL) + store = CAMEL_STORE (folder->parent_store); + + draft_or_outbox = + em_utils_folder_is_drafts (folder, folder_uri) || + em_utils_folder_is_outbox (folder, folder_uri); + if (!draft_or_outbox && store != NULL) { + has_junk = !(store->flags & CAMEL_STORE_VJUNK); + has_not_junk = TRUE; + } + + for (ii = 0; ii < uids->len; ii++) { + CamelMessageInfo *info; + guint32 flags; + + info = camel_folder_get_message_info ( + folder, uids->pdata[ii]); + if (info == NULL) + continue; + + flags = camel_message_info_flags (info); + + if (flags & CAMEL_MESSAGE_SEEN) + has_read = TRUE; + else + has_unread = TRUE; + + if (flags & CAMEL_MESSAGE_DELETED) + has_deleted = TRUE; + else + has_undeleted = TRUE; + + if (flags & CAMEL_MESSAGE_FLAGGED) + has_important = TRUE; + else + has_unimportant = TRUE; + + tag = camel_message_info_user_tag (info, "follow-up"); + if (tag != NULL && *tag != '\0') { + can_clear_flags = TRUE; + tag = camel_message_info_user_tag ( + info, "completed-on"); + if (tag != NULL && *tag != '\0') + can_flag_completed = TRUE; + } else + can_flag_for_followup = TRUE; + } + + if (uids->len == 1) + state |= E_MAIL_READER_SELECTION_SINGLE; + if (uids->len > 1) + state |= E_MAIL_READER_SELECTION_MULTIPLE; + if (!draft_or_outbox && uids->len == 1) + state |= E_MAIL_READER_SELECTION_CAN_ADD_SENDER; +#if 0 /* FIXME */ + if (can_edit) + state |= E_MAIL_READER_SELECTION_CAN_EDIT; +#endif + if (can_clear_flags) + state |= E_MAIL_READER_SELECTION_FLAG_CLEAR; + if (can_flag_completed) + state |= E_MAIL_READER_SELECTION_FLAG_COMPLETED; + if (can_flag_for_followup) + state |= E_MAIL_READER_SELECTION_FLAG_FOLLOWUP; + if (has_deleted) + state |= E_MAIL_READER_SELECTION_HAS_DELETED; + if (has_important) + state |= E_MAIL_READER_SELECTION_HAS_IMPORTANT; + if (has_junk) + state |= E_MAIL_READER_SELECTION_HAS_JUNK; + if (has_not_junk) + state |= E_MAIL_READER_SELECTION_HAS_NOT_JUNK; + if (has_read) + state |= E_MAIL_READER_SELECTION_HAS_READ; + if (has_undeleted) + state |= E_MAIL_READER_SELECTION_HAS_UNDELETED; + if (has_unimportant) + state |= E_MAIL_READER_SELECTION_HAS_UNIMPORTANT; + if (has_unread) + state |= E_MAIL_READER_SELECTION_HAS_UNREAD; +#if 0 /* FIXME */ + if (has_callto_uri) + state |= E_MAIL_READER_SELECTION_HAS_URI_CALLTO; + if (has_http_uri) + state |= E_MAIL_READER_SELECTION_HAS_URI_HTTP; + if (has_mailto_uri) + state |= E_MAIL_READER_SELECTION_HAS_URI_MAILTO; + if (is_mailing_list) + state |= E_MAIL_READER_SELECTION_IS_MAILING_LIST; +#endif + + em_utils_uids_free (uids); + + return state; + +} + +void +e_mail_reader_update_actions (EMailReader *reader) +{ + GtkAction *action; + GtkActionGroup *action_group; + const gchar *action_name; + gboolean sensitive; + guint32 state; + + /* Be descriptive. */ + gboolean any_messages_selected; + gboolean enable_flag_clear; + gboolean enable_flag_completed; + gboolean enable_flag_for_followup; + gboolean single_message_selected; + gboolean multiple_messages_selected; + gboolean selection_has_deleted_messages; + gboolean selection_has_important_messages; + gboolean selection_has_junk_messages; + gboolean selection_has_not_junk_messages; + gboolean selection_has_read_messages; + gboolean selection_has_undeleted_messages; + gboolean selection_has_unimportant_messages; + gboolean selection_has_unread_messages; + gboolean selection_is_mailing_list; + + g_return_if_fail (E_IS_MAIL_READER (reader)); + + action_group = e_mail_reader_get_action_group (reader); + state = e_mail_reader_check_state (reader); + + single_message_selected = + (state & E_MAIL_READER_SELECTION_SINGLE); + multiple_messages_selected = + (state & E_MAIL_READER_SELECTION_MULTIPLE); + /* FIXME Missing booleans */ + enable_flag_clear = + (state & E_MAIL_READER_SELECTION_FLAG_CLEAR); + enable_flag_completed = + (state & E_MAIL_READER_SELECTION_FLAG_COMPLETED); + enable_flag_for_followup = + (state & E_MAIL_READER_SELECTION_FLAG_FOLLOWUP); + selection_has_deleted_messages = + (state & E_MAIL_READER_SELECTION_HAS_DELETED); + selection_has_important_messages = + (state & E_MAIL_READER_SELECTION_HAS_IMPORTANT); + selection_has_junk_messages = + (state & E_MAIL_READER_SELECTION_HAS_JUNK); + selection_has_not_junk_messages = + (state & E_MAIL_READER_SELECTION_HAS_NOT_JUNK); + selection_has_read_messages = + (state & E_MAIL_READER_SELECTION_HAS_READ); + selection_has_undeleted_messages = + (state & E_MAIL_READER_SELECTION_HAS_UNDELETED); + selection_has_unimportant_messages = + (state & E_MAIL_READER_SELECTION_HAS_UNIMPORTANT); + selection_has_unread_messages = + (state & E_MAIL_READER_SELECTION_HAS_UNREAD); + /* FIXME Missing booleans */ + selection_is_mailing_list = + (state & E_MAIL_READER_SELECTION_IS_MAILING_LIST); + + any_messages_selected = + (single_message_selected || multiple_messages_selected); + + action_name = "mail-check-for-junk"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-copy"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-delete"; + sensitive = selection_has_undeleted_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-filters-apply"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-forward"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-forward-attached"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-forward-inline"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-forward-quoted"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-load-images"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-mark-important"; + sensitive = selection_has_unimportant_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-mark-junk"; + sensitive = selection_has_not_junk_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-mark-notjunk"; + sensitive = selection_has_junk_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-mark-read"; + sensitive = selection_has_unread_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-mark-unimportant"; + sensitive = selection_has_important_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-mark-unread"; + sensitive = selection_has_read_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-message-edit"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-message-open"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-move"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-next-important"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-next-thread"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-next-unread"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-previous-important"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-previous-unread"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-print"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-print-preview"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-redirect"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-reply-all"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-reply-list"; + sensitive = single_message_selected && selection_is_mailing_list; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-reply-post"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-reply-sender"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-save-as"; + sensitive = any_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-select-all"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-show-source"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-undelete"; + sensitive = selection_has_deleted_messages; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-zoom-100"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-zoom-in"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-zoom-out"; + sensitive = single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); +} + +GtkAction * +e_mail_reader_get_action (EMailReader *reader, + const gchar *action_name) +{ + GtkActionGroup *action_group; + GtkAction *action; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + g_return_val_if_fail (action_name != NULL, NULL); + + action_group = e_mail_reader_get_action_group (reader); + action = gtk_action_group_get_action (action_group, action_name); + + if (action == NULL) + g_critical ( + "%s: action `%s' not found", G_STRFUNC, action_name); + + return action; +} + GtkActionGroup * e_mail_reader_get_action_group (EMailReader *reader) { @@ -2284,7 +2706,6 @@ e_mail_reader_create_charset_menu (EMailReader *reader, GtkUIManager *ui_manager, guint merge_id) { - GtkActionGroup *action_group; GtkAction *action; const gchar *action_name; const gchar *path; @@ -2294,8 +2715,7 @@ e_mail_reader_create_charset_menu (EMailReader *reader, g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager)); action_name = "mail-charset-default"; - action_group = e_mail_reader_get_action_group (reader); - action = gtk_action_group_get_action (action_group, action_name); + action = e_mail_reader_get_action (reader, action_name); g_return_if_fail (action != NULL); list = gtk_radio_action_get_group (GTK_RADIO_ACTION (action)); -- cgit v1.2.3 From 8bfadde575e8a49da66bf7ba17e89963aa84bbf5 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 25 Jan 2009 17:36:30 +0000 Subject: Fix more runtime warnings. svn path=/branches/kill-bonobo/; revision=37132 --- mail/e-mail-reader.c | 1 - 1 file changed, 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 204141b430..f32d389bb6 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -926,7 +926,6 @@ action_mail_show_source_cb (GtkAction *action, uids = message_list_get_selected (message_list); g_return_if_fail (uids->len > 0); - /* FIXME Set session. */ browser = e_mail_browser_new (shell_module); reader = E_MAIL_READER (browser); html_display = e_mail_reader_get_html_display (reader); -- cgit v1.2.3 From bc80332460c353e391cd620f2cc51f7b56eef4de Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 26 Jan 2009 18:49:51 +0000 Subject: Miscellaneous stuff. svn path=/branches/kill-bonobo/; revision=37134 --- mail/e-mail-reader.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index f32d389bb6..1d39309361 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1846,10 +1846,10 @@ mail_reader_message_loaded_cb (CamelFolder *folder, e_shell_event (shell, "mail-icon", "evolution-mail"); /* Determine whether to mark the message as read. */ - g_object_get ( - shell_settings, - "mail-mark-seen", &mark_read, - "mail-mark-seen-timeout", &timeout_interval, NULL); + mark_read = e_shell_settings_get_boolean ( + shell_settings, "mail-mark-seen"); + timeout_interval = e_shell_settings_get_int ( + shell_settings, "mail-mark-seen-timeout"); g_object_set_data_full ( G_OBJECT (reader), "mark-read-uid", -- cgit v1.2.3 From 98d262b594caefd053a2d075e2d8482b2d8a12c8 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 27 Jan 2009 03:50:19 +0000 Subject: Add action groups to support lockdown, starting with printing. Other categories to follow. Editors still need lockdown support. svn path=/branches/kill-bonobo/; revision=37136 --- mail/e-mail-reader.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 1d39309361..d1ea62857c 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2300,6 +2300,9 @@ e_mail_reader_check_state (EMailReader *reader) void e_mail_reader_update_actions (EMailReader *reader) { + EShell *shell; + EShellModule *shell_module; + EShellSettings *shell_settings; GtkAction *action; GtkActionGroup *action_group; const gchar *action_name; @@ -2308,6 +2311,7 @@ e_mail_reader_update_actions (EMailReader *reader) /* Be descriptive. */ gboolean any_messages_selected; + gboolean disable_printing; gboolean enable_flag_clear; gboolean enable_flag_completed; gboolean enable_flag_for_followup; @@ -2328,6 +2332,13 @@ e_mail_reader_update_actions (EMailReader *reader) action_group = e_mail_reader_get_action_group (reader); state = e_mail_reader_check_state (reader); + shell_module = e_mail_reader_get_shell_module (reader); + shell = e_shell_module_get_shell (shell_module); + shell_settings = e_shell_get_shell_settings (shell); + + disable_printing = e_shell_settings_get_boolean ( + shell_settings, "disable-printing"); + single_message_selected = (state & E_MAIL_READER_SELECTION_SINGLE); multiple_messages_selected = @@ -2478,12 +2489,12 @@ e_mail_reader_update_actions (EMailReader *reader) gtk_action_set_sensitive (action, sensitive); action_name = "mail-print"; - sensitive = single_message_selected; + sensitive = single_message_selected && !disable_printing; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-print-preview"; - sensitive = single_message_selected; + sensitive = single_message_selected && !disable_printing; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); -- cgit v1.2.3 From 14e8637d6b1a98b4ed6bedc70d0fca744b7b3e0f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 7 Feb 2009 20:04:52 +0000 Subject: Rewrite the mail label code from top to bottom. - Kill the e-util-labels API and read label information into a single-column GtkListStore. Use GConfBridge to automatically keep GConf synched with the list store. - The list store (a singleton instance) is stored in EShellSettings so it's available everywhere. - The list store serves as the model for EMailLabelTreeView, which itself is embedded in EMailLabelManager; a complete label management UI as seen in the preferences dialog. - EMailLabelDialog is used to add or edit a label. Avoid using a color button, instead embed a GtkColorSelection directly in the dialog so everything is in one window. Open issues: - The weird toggle/color/text menu items in the popup menu aren't there. For now they're just regular toggle items. I'll deal with it later. - Filter intergration is broken at the moment. svn path=/branches/kill-bonobo/; revision=37233 --- mail/e-mail-reader.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index d1ea62857c..456e046152 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -46,6 +46,7 @@ #include "mail/em-folder-tree.h" #include "mail/em-utils.h" #include "mail/mail-autofilter.h" +#include "mail/mail-config.h" #include "mail/mail-ops.h" enum { @@ -1513,13 +1514,6 @@ static GtkActionEntry mail_reader_entries[] = { NULL, NULL }, - { "mail-label-menu", - NULL, - N_("_Label"), - NULL, - NULL, - NULL }, - { "mail-mark-as-menu", NULL, N_("Mar_k As"), -- cgit v1.2.3 From fd564be3203400024147469faaa7de0884861566 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 19 Feb 2009 01:36:04 +0000 Subject: Clean up the EMFormat stack. Add some GObject properties to bind to. Add some handy color conversion functions to e-util. svn path=/branches/kill-bonobo/; revision=37290 --- mail/e-mail-reader.c | 83 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 29 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 456e046152..ab7c86c160 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -94,19 +94,6 @@ exit: em_utils_uids_free (uids); } -static void -action_mail_caret_mode_cb (GtkToggleAction *action, - EMailReader *reader) -{ - EMFormatHTMLDisplay *html_display; - gboolean active; - - active = gtk_toggle_action_get_active (action); - html_display = e_mail_reader_get_html_display (reader); - - em_format_html_display_set_caret_mode (html_display, active); -} - static void action_mail_charset_cb (GtkRadioAction *action, GtkRadioAction *current, @@ -122,7 +109,7 @@ action_mail_charset_cb (GtkRadioAction *action, charset = g_object_get_data (G_OBJECT (action), "charset"); /* Charset for "Default" action will be NULL. */ - em_format_set_charset ((EMFormat *) html_display, charset); + em_format_set_charset (EM_FORMAT (html_display), charset); } static void @@ -149,7 +136,7 @@ action_mail_clipboard_copy_cb (GtkAction *action, GtkHTML *html; html_display = e_mail_reader_get_html_display (reader); - html = ((EMFormatHTML *) html_display)->html; + html = EM_FORMAT_HTML (html_display)->html; gtk_html_copy (html); } @@ -300,7 +287,7 @@ action_mail_flag_clear_cb (GtkAction *action, em_utils_flag_for_followup_clear (window, folder, uids); - em_format_redraw ((EMFormat *) html_display); + em_format_redraw (EM_FORMAT (html_display)); } static void @@ -322,7 +309,7 @@ action_mail_flag_completed_cb (GtkAction *action, em_utils_flag_for_followup_completed (window, folder, uids); - em_format_redraw ((EMFormat *) html_display); + em_format_redraw (EM_FORMAT (html_display)); } static void @@ -443,7 +430,7 @@ action_mail_load_images_cb (GtkAction *action, html_display = e_mail_reader_get_html_display (reader); - em_format_html_load_http ((EMFormatHTML *) html_display); + em_format_html_load_images (EM_FORMAT_HTML (html_display)); } static void @@ -880,7 +867,7 @@ action_mail_select_all_cb (GtkAction *action, gboolean selection_active; html_display = e_mail_reader_get_html_display (reader); - html = ((EMFormatHTML *) html_display)->html; + html = EM_FORMAT_HTML (html_display)->html; gtk_html_select_all (html); @@ -904,7 +891,7 @@ action_mail_show_all_headers_cb (GtkToggleAction *action, else mode = EM_FORMAT_NORMAL; - em_format_set_mode ((EMFormat *) html_display, mode); + em_format_set_mode (EM_FORMAT (html_display), mode); } static void @@ -930,7 +917,7 @@ action_mail_show_source_cb (GtkAction *action, browser = e_mail_browser_new (shell_module); reader = E_MAIL_READER (browser); html_display = e_mail_reader_get_html_display (reader); - em_format_set_mode ((EMFormat *) html_display, EM_FORMAT_SOURCE); + em_format_set_mode (EM_FORMAT (html_display), EM_FORMAT_SOURCE); e_mail_reader_set_folder (reader, folder, folder_uri); e_mail_reader_set_message (reader, uids->pdata[0], FALSE); gtk_widget_show (browser); @@ -1621,7 +1608,7 @@ static GtkToggleActionEntry mail_reader_toggle_entries[] = { N_("_Caret Mode"), "F7", N_("Show a blinking cursor in the body of displayed messages"), - G_CALLBACK (action_mail_caret_mode_cb), + NULL, /* No callback required */ FALSE }, { "mail-show-all-headers", @@ -1643,7 +1630,7 @@ mail_reader_link_clicked_cb (EMailReader *reader, MessageList *message_list; const gchar *folder_uri; - html = ((EMFormatHTML *) html_display)->html; + html = EM_FORMAT_HTML (html_display)->html; message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); folder_uri = message_list->folder_uri; @@ -1834,7 +1821,7 @@ mail_reader_message_loaded_cb (CamelFolder *folder, (EEventTarget *) target); em_format_format ( - (EMFormat *) html_display, folder, message_uid, message); + EM_FORMAT (html_display), folder, message_uid, message); /* Reset the shell view icon. */ e_shell_event (shell, "mail-icon", "evolution-mail"); @@ -1862,7 +1849,7 @@ mail_reader_message_loaded_cb (CamelFolder *folder, /* Display the error inline and clear the exception. */ stream = gtk_html_begin ( - ((EMFormatHTML *) html_display)->html); + EM_FORMAT_HTML (html_display)->html); gtk_html_stream_printf ( stream, "

%s

%s

", _("Unable to retrieve message"), @@ -1890,7 +1877,7 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) message_list = e_mail_reader_get_message_list (reader); cursor_uid = message_list->cursor_uid; - format_uid = ((EMFormat *) html_display)->uid; + format_uid = EM_FORMAT (html_display)->uid; if (cursor_uid != NULL) { if (g_strcmp0 (cursor_uid, format_uid) != 0) @@ -1900,7 +1887,7 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) g_object_ref (reader), mail_msg_fast_ordered_push); } else - em_format_format ((EMFormat *) html_display, NULL, NULL, NULL); + em_format_format (EM_FORMAT (html_display), NULL, NULL, NULL); key = "message-selected-timeout"; g_object_set_data (G_OBJECT (reader), key, NULL); @@ -1962,7 +1949,7 @@ mail_reader_set_folder (EMailReader *reader, if (message_list->folder != NULL) mail_sync_folder (message_list->folder, NULL, NULL); - em_format_format ((EMFormat *) html_display, NULL, NULL, NULL); + em_format_format (EM_FORMAT (html_display), NULL, NULL, NULL); message_list_set_folder (message_list, folder, folder_uri, outgoing); mail_reader_emit_folder_loaded (reader); @@ -2062,6 +2049,9 @@ e_mail_reader_get_type (void) void e_mail_reader_init (EMailReader *reader) { + EShell *shell; + EShellModule *shell_module; + EShellSettings *shell_settings; EMFormatHTMLDisplay *html_display; GtkActionGroup *action_group; MessageList *message_list; @@ -2075,6 +2065,10 @@ e_mail_reader_init (EMailReader *reader) action_group = e_mail_reader_get_action_group (reader); html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); + shell_module = e_mail_reader_get_shell_module (reader); + + shell = e_shell_module_get_shell (shell_module); + shell_settings = e_shell_get_shell_settings (shell); gtk_action_group_add_actions ( action_group, mail_reader_entries, @@ -2124,6 +2118,37 @@ e_mail_reader_init (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Reply"), NULL); + /* Bind properties. */ + + e_binding_new_full ( + G_OBJECT (shell_settings), "mail-citation-color", + G_OBJECT (html_display), "citation-color", + e_binding_transform_string_to_color, + NULL, NULL); + + e_binding_new ( + G_OBJECT (shell_settings), "mail-image-loading-policy", + G_OBJECT (html_display), "image-loading-policy"); + + e_binding_new ( + G_OBJECT (shell_settings), "mail-only-local-photos", + G_OBJECT (html_display), "only-local-photos"); + + e_binding_new ( + G_OBJECT (shell_settings), "mail-show-animated-images", + G_OBJECT (html_display), "animate"); + + e_binding_new ( + G_OBJECT (shell_settings), "mail-show-sender-photo", + G_OBJECT (html_display), "show-sender-photo"); + + action_name = "mail-caret-mode"; + action = e_mail_reader_get_action (reader, action_name); + + e_mutual_binding_new ( + G_OBJECT (action), "active", + G_OBJECT (html_display), "caret-mode"); + /* Connect signals. */ g_signal_connect_swapped ( @@ -2131,7 +2156,7 @@ e_mail_reader_init (EMailReader *reader) G_CALLBACK (mail_reader_link_clicked_cb), reader); g_signal_connect_swapped ( - ((EMFormatHTML *) html_display)->html, "button-release-event", + EM_FORMAT_HTML (html_display)->html, "button-release-event", G_CALLBACK (mail_reader_html_button_release_event_cb), reader); g_signal_connect_swapped ( -- cgit v1.2.3 From 08b1d0ae8e36ef20da800bf6358ca0cd9fb4e026 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 1 Mar 2009 13:16:31 +0000 Subject: Split the interactive parts of the message display out of EMFormatHTMLDisplay to a new GtkHTML subclass named EMailDisplay, and have EMFormatHTML create an instance of that. EMailDisplay will handle link clicking, mousing over URIs, popup menus, and interactive search. This makes EMFormatHTMLDisplay and EMailReader more lightweight. Clean up more of the EMFormat stack. svn path=/branches/kill-bonobo/; revision=37346 --- mail/e-mail-reader.c | 45 +++++---------------------------------------- 1 file changed, 5 insertions(+), 40 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index ab7c86c160..b058fda07e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1620,40 +1620,6 @@ static GtkToggleActionEntry mail_reader_toggle_entries[] = { FALSE } }; -static void -mail_reader_link_clicked_cb (EMailReader *reader, - const gchar *uri, - EMFormatHTMLDisplay *html_display) -{ - GtkHTML *html; - GtkWindow *window; - MessageList *message_list; - const gchar *folder_uri; - - html = EM_FORMAT_HTML (html_display)->html; - message_list = e_mail_reader_get_message_list (reader); - window = e_mail_reader_get_window (reader); - folder_uri = message_list->folder_uri; - - if (g_str_has_prefix (uri, "##")) - return; - - if (g_ascii_strncasecmp (uri, "mailto:", 7) == 0) - em_utils_compose_new_message_with_mailto (uri, folder_uri); - - else if (*uri == '#') - gtk_html_jump_to_anchor (html, uri + 1); - - else if (g_ascii_strncasecmp (uri, "thismessage:", 12) == 0) - /* ignore */ ; - - else if (g_ascii_strncasecmp (uri, "cid:", 4) == 0) - /* ignore */ ; - - else - e_show_uri (window, uri); -} - static gboolean mail_reader_html_button_release_event_cb (EMailReader *reader, GdkEventButton *button, @@ -2057,6 +2023,7 @@ e_mail_reader_init (EMailReader *reader) MessageList *message_list; GConfBridge *bridge; GtkAction *action; + GtkHTML *html; const gchar *action_name; const gchar *key; @@ -2070,6 +2037,8 @@ e_mail_reader_init (EMailReader *reader) shell = e_shell_module_get_shell (shell_module); shell_settings = e_shell_get_shell_settings (shell); + html = EM_FORMAT_HTML (html_display)->html; + gtk_action_group_add_actions ( action_group, mail_reader_entries, G_N_ELEMENTS (mail_reader_entries), reader); @@ -2136,7 +2105,7 @@ e_mail_reader_init (EMailReader *reader) e_binding_new ( G_OBJECT (shell_settings), "mail-show-animated-images", - G_OBJECT (html_display), "animate"); + G_OBJECT (html), "animate"); e_binding_new ( G_OBJECT (shell_settings), "mail-show-sender-photo", @@ -2147,14 +2116,10 @@ e_mail_reader_init (EMailReader *reader) e_mutual_binding_new ( G_OBJECT (action), "active", - G_OBJECT (html_display), "caret-mode"); + G_OBJECT (html), "caret-mode"); /* Connect signals. */ - g_signal_connect_swapped ( - html_display, "link-clicked", - G_CALLBACK (mail_reader_link_clicked_cb), reader); - g_signal_connect_swapped ( EM_FORMAT_HTML (html_display)->html, "button-release-event", G_CALLBACK (mail_reader_html_button_release_event_cb), reader); -- cgit v1.2.3 From 85d0142d21286ce87cd5f6c3d1e2f71aa994151f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 2 Mar 2009 03:14:42 +0000 Subject: Move text searching UI into a new EMailSearchBar widget. svn path=/branches/kill-bonobo/; revision=37351 --- mail/e-mail-reader.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index b058fda07e..b28221d5e9 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -52,6 +52,7 @@ enum { CHANGED, FOLDER_LOADED, + SHOW_SEARCH_BAR, LAST_SIGNAL }; @@ -265,7 +266,7 @@ static void action_mail_find_cb (GtkAction *action, EMailReader *reader) { - /* FIXME */ + e_mail_reader_show_search_bar (reader); } static void @@ -1982,6 +1983,15 @@ mail_reader_class_init (EMailReaderIface *iface) 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + + signals[SHOW_SEARCH_BAR] = g_signal_new ( + "show-search-bar", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EMailReaderIface, show_search_bar), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } GType @@ -2733,3 +2743,11 @@ e_mail_reader_create_charset_menu (EMailReader *reader, gtk_ui_manager_ensure_update (ui_manager); } + +void +e_mail_reader_show_search_bar (EMailReader *reader) +{ + g_return_if_fail (E_IS_MAIL_READER (reader)); + + g_signal_emit (reader, signals[SHOW_SEARCH_BAR], 0); +} -- cgit v1.2.3 From 4cec9fc7169dc3b810321555a70cda916720867d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 20 Mar 2009 19:06:59 +0000 Subject: Saving progress on a massive attachment handling rewrite. svn path=/branches/kill-bonobo/; revision=37465 --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index b28221d5e9..a026f6db8d 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2009,7 +2009,7 @@ e_mail_reader_get_type (void) NULL, /* class_data */ 0, /* instance_size */ 0, /* n_preallocs */ - NULL, /* instance_init */ + (GInstanceInitFunc) NULL, NULL /* value_table */ }; -- cgit v1.2.3 From da68ab65008bff803a3ea7940fa861c7cb055d08 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 2 Apr 2009 21:12:13 +0000 Subject: Split the attachment button into a separate widget that integrates with EAttachmentView and EAttachmentStore. Clicking the button works, but I still have to finish the pop-up menu and drag-and-drop. Kill e-util/e-gui-utils.c: e_icon_for_mime_type() replaced by g_content_type_get_icon() svn path=/branches/kill-bonobo/; revision=37491 --- mail/e-mail-reader.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index a026f6db8d..196f2f0323 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1015,10 +1015,12 @@ action_mail_zoom_100_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; + GtkHTML *html; html_display = e_mail_reader_get_html_display (reader); + html = EM_FORMAT_HTML (html_display)->html; - em_format_html_display_zoom_reset (html_display); + gtk_html_zoom_reset (html); } static void @@ -1026,10 +1028,12 @@ action_mail_zoom_in_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; + GtkHTML *html; html_display = e_mail_reader_get_html_display (reader); + html = EM_FORMAT_HTML (html_display)->html; - em_format_html_display_zoom_in (html_display); + gtk_html_zoom_out (html); } static void @@ -1037,10 +1041,12 @@ action_mail_zoom_out_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; + GtkHTML *html; html_display = e_mail_reader_get_html_display (reader); + html = EM_FORMAT_HTML (html_display)->html; - em_format_html_display_zoom_out (html_display); + gtk_html_zoom_out (html); } static GtkActionEntry mail_reader_entries[] = { -- cgit v1.2.3 From 9b73ae5c7d2c016a3b1f07b1040355063b32814b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 23 Apr 2009 16:48:05 -0400 Subject: Miscellaneous bug fixes. --- mail/e-mail-reader.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 196f2f0323..dd8e24bd55 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1658,20 +1658,17 @@ mail_reader_double_click_cb (EMailReader *reader, e_mail_reader_activate (reader, "mail-message-open"); } -static gint -mail_reader_key_press_cb (EMailReader *reader, - gint row, - ETreePath path, - gint col, - GdkEvent *event) +static gboolean +mail_reader_key_press_event_cb (EMailReader *reader, + GdkEventKey *event) { const gchar *action_name; - if ((event->key.state & GDK_CONTROL_MASK) != 0) + if ((event->state & GDK_CONTROL_MASK) != 0) goto ctrl; /* alone */ - switch (event->key.keyval) { + switch (event->keyval) { case GDK_Delete: case GDK_KP_Delete: action_name = "mail-delete"; @@ -1714,7 +1711,7 @@ mail_reader_key_press_cb (EMailReader *reader, ctrl: /* Ctrl + */ - switch (event->key.keyval) { + switch (event->keyval) { case GDK_period: action_name = "mail-next-unread"; break; @@ -1733,6 +1730,16 @@ exit: return TRUE; } +static gint +mail_reader_key_press_cb (EMailReader *reader, + gint row, + ETreePath path, + gint col, + GdkEvent *event) +{ + return mail_reader_key_press_event_cb (reader, &event->key); +} + static gboolean mail_reader_message_read_cb (EMailReader *reader) { @@ -2137,9 +2144,13 @@ e_mail_reader_init (EMailReader *reader) /* Connect signals. */ g_signal_connect_swapped ( - EM_FORMAT_HTML (html_display)->html, "button-release-event", + html, "button-release-event", G_CALLBACK (mail_reader_html_button_release_event_cb), reader); + g_signal_connect_swapped ( + html, "key-press-event", + G_CALLBACK (mail_reader_key_press_event_cb), reader); + g_signal_connect_swapped ( message_list, "message-selected", G_CALLBACK (mail_reader_message_selected_cb), reader); -- cgit v1.2.3 From bde9c2bff430b74c3eea7832221e2a8de2fb8272 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 28 Apr 2009 14:29:05 -0400 Subject: =?UTF-8?q?Bug=20579269=20=E2=80=93=20Non=20junk=20option=20(tool?= =?UTF-8?q?=20bar)=20is=20disabled=20in=20junk=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attempted to sort out the sensitivity logic of the junk actions. --- mail/e-mail-reader.c | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index dd8e24bd55..c5db73c4f9 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2200,7 +2200,8 @@ e_mail_reader_check_state (EMailReader *reader) gboolean has_undeleted = FALSE; gboolean has_unimportant = FALSE; gboolean has_unread = FALSE; - gboolean draft_or_outbox; + gboolean drafts_or_outbox; + gboolean store_supports_vjunk = FALSE; guint32 state = 0; guint ii; @@ -2211,16 +2212,14 @@ e_mail_reader_check_state (EMailReader *reader) folder_uri = message_list->folder_uri; folder = message_list->folder; - if (folder != NULL) + if (folder != NULL) { store = CAMEL_STORE (folder->parent_store); + store_supports_vjunk = (store->flags & CAMEL_STORE_VJUNK); + } - draft_or_outbox = + drafts_or_outbox = em_utils_folder_is_drafts (folder, folder_uri) || em_utils_folder_is_outbox (folder, folder_uri); - if (!draft_or_outbox && store != NULL) { - has_junk = !(store->flags & CAMEL_STORE_VJUNK); - has_not_junk = TRUE; - } for (ii = 0; ii < uids->len; ii++) { CamelMessageInfo *info; @@ -2238,6 +2237,38 @@ e_mail_reader_check_state (EMailReader *reader) else has_unread = TRUE; + if (drafts_or_outbox) { + has_junk = FALSE; + has_not_junk = FALSE; + } else if (store_supports_vjunk) { + guint32 bitmask; + + /* XXX Strictly speaking, this logic is correct. + * Problem is there's nothing in the message + * list that indicates whether a message is + * already marked "Not Junk". So the user may + * think the "Not Junk" button is enabling and + * disabling itself randomly as he reads mail. */ + + if (flags & CAMEL_MESSAGE_JUNK) + has_junk = TRUE; + if (flags & CAMEL_MESSAGE_NOTJUNK) + has_not_junk = TRUE; + + bitmask = CAMEL_MESSAGE_JUNK | CAMEL_MESSAGE_NOTJUNK; + + /* If neither junk flag is set, the + * message can be marked either way. */ + if ((flags & bitmask) == 0) { + has_junk = TRUE; + has_not_junk = TRUE; + } + + } else { + has_junk = TRUE; + has_not_junk = TRUE; + } + if (flags & CAMEL_MESSAGE_DELETED) has_deleted = TRUE; else @@ -2263,7 +2294,7 @@ e_mail_reader_check_state (EMailReader *reader) state |= E_MAIL_READER_SELECTION_SINGLE; if (uids->len > 1) state |= E_MAIL_READER_SELECTION_MULTIPLE; - if (!draft_or_outbox && uids->len == 1) + if (!drafts_or_outbox && uids->len == 1) state |= E_MAIL_READER_SELECTION_CAN_ADD_SENDER; #if 0 /* FIXME */ if (can_edit) -- cgit v1.2.3 From 16e2beab9e4d412399f495f6165d27da80cb3675 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 7 May 2009 16:38:32 -0400 Subject: Adapt mail to EShellBackend changes. Again, builds but not tested. Lots of compiler warnings to clean up, but I don't have the energy for it. This was pretty grueling. --- mail/e-mail-reader.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c5db73c4f9..c65feaae2d 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -39,7 +39,7 @@ #include "mail/e-mail-browser.h" #include "mail/e-mail-reader-utils.h" -#include "mail/e-mail-shell-module.h" +#include "mail/e-mail-shell-backend.h" #include "mail/em-composer-utils.h" #include "mail/em-event.h" #include "mail/em-folder-selector.h" @@ -146,7 +146,7 @@ static void action_mail_copy_cb (GtkAction *action, EMailReader *reader) { - EShellModule *shell_module; + EShellBackend *shell_backend; MessageList *message_list; EMFolderTreeModel *model; CamelFolder *folder; @@ -156,8 +156,8 @@ action_mail_copy_cb (GtkAction *action, const gchar *uri; message_list = e_mail_reader_get_message_list (reader); - shell_module = e_mail_reader_get_shell_module (reader); - model = e_mail_shell_module_get_folder_tree_model (shell_module); + shell_backend = e_mail_reader_get_shell_backend (reader); + model = e_mail_shell_backend_get_folder_tree_model (shell_backend); folder_tree = em_folder_tree_new_with_model (model); selected = message_list_get_selected (message_list); @@ -566,7 +566,7 @@ static void action_mail_move_cb (GtkAction *action, EMailReader *reader) { - EShellModule *shell_module; + EShellBackend *shell_backend; MessageList *message_list; EMFolderTreeModel *model; CamelFolder *folder; @@ -576,8 +576,8 @@ action_mail_move_cb (GtkAction *action, const gchar *uri; message_list = e_mail_reader_get_message_list (reader); - shell_module = e_mail_reader_get_shell_module (reader); - model = e_mail_shell_module_get_folder_tree_model (shell_module); + shell_backend = e_mail_reader_get_shell_backend (reader); + model = e_mail_shell_backend_get_folder_tree_model (shell_backend); folder_tree = em_folder_tree_new_with_model (model); selected = message_list_get_selected (message_list); @@ -900,7 +900,7 @@ action_mail_show_source_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; - EShellModule *shell_module; + EShellBackend *shell_backend; MessageList *message_list; CamelFolder *folder; GtkWidget *browser; @@ -908,14 +908,14 @@ action_mail_show_source_cb (GtkAction *action, const gchar *folder_uri; message_list = e_mail_reader_get_message_list (reader); - shell_module = e_mail_reader_get_shell_module (reader); + shell_backend = e_mail_reader_get_shell_backend (reader); folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); g_return_if_fail (uids->len > 0); - browser = e_mail_browser_new (shell_module); + browser = e_mail_browser_new (shell_backend); reader = E_MAIL_READER (browser); html_display = e_mail_reader_get_html_display (reader); em_format_set_mode (EM_FORMAT (html_display), EM_FORMAT_SOURCE); @@ -1767,7 +1767,7 @@ mail_reader_message_loaded_cb (CamelFolder *folder, EMailReader *reader = user_data; EMFormatHTMLDisplay *html_display; MessageList *message_list; - EShellModule *shell_module; + EShellBackend *shell_backend; EShellSettings *shell_settings; EShell *shell; EMEvent *event; @@ -1778,8 +1778,8 @@ mail_reader_message_loaded_cb (CamelFolder *folder, html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); - shell_module = e_mail_reader_get_shell_module (reader); - shell = e_shell_module_get_shell (shell_module); + shell_backend = e_mail_reader_get_shell_backend (reader); + shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); /* If the user picked a different message in the time it took @@ -2039,7 +2039,7 @@ void e_mail_reader_init (EMailReader *reader) { EShell *shell; - EShellModule *shell_module; + EShellBackend *shell_backend; EShellSettings *shell_settings; EMFormatHTMLDisplay *html_display; GtkActionGroup *action_group; @@ -2055,9 +2055,9 @@ e_mail_reader_init (EMailReader *reader) action_group = e_mail_reader_get_action_group (reader); html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); - shell_module = e_mail_reader_get_shell_module (reader); + shell_backend = e_mail_reader_get_shell_backend (reader); - shell = e_shell_module_get_shell (shell_module); + shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); html = EM_FORMAT_HTML (html_display)->html; @@ -2343,7 +2343,7 @@ void e_mail_reader_update_actions (EMailReader *reader) { EShell *shell; - EShellModule *shell_module; + EShellBackend *shell_backend; EShellSettings *shell_settings; GtkAction *action; GtkActionGroup *action_group; @@ -2374,8 +2374,8 @@ e_mail_reader_update_actions (EMailReader *reader) action_group = e_mail_reader_get_action_group (reader); state = e_mail_reader_check_state (reader); - shell_module = e_mail_reader_get_shell_module (reader); - shell = e_shell_module_get_shell (shell_module); + shell_backend = e_mail_reader_get_shell_backend (reader); + shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); disable_printing = e_shell_settings_get_boolean ( @@ -2673,17 +2673,17 @@ e_mail_reader_get_message_list (EMailReader *reader) return iface->get_message_list (reader); } -EShellModule * -e_mail_reader_get_shell_module (EMailReader *reader) +EShellBackend * +e_mail_reader_get_shell_backend (EMailReader *reader) { EMailReaderIface *iface; g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); iface = E_MAIL_READER_GET_IFACE (reader); - g_return_val_if_fail (iface->get_shell_module != NULL, NULL); + g_return_val_if_fail (iface->get_shell_backend != NULL, NULL); - return iface->get_shell_module (reader); + return iface->get_shell_backend (reader); } GtkWindow * -- cgit v1.2.3 From 03fe4bdcbc8a2e644339bbfcd12843da1f766375 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 7 May 2009 21:12:02 -0400 Subject: Fix most of the compiler warnings in mail. --- mail/e-mail-reader.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c65feaae2d..7b50774153 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -157,7 +157,8 @@ action_mail_copy_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); shell_backend = e_mail_reader_get_shell_backend (reader); - model = e_mail_shell_backend_get_folder_tree_model (shell_backend); + model = e_mail_shell_backend_get_folder_tree_model ( + E_MAIL_SHELL_BACKEND (shell_backend)); folder_tree = em_folder_tree_new_with_model (model); selected = message_list_get_selected (message_list); @@ -577,7 +578,8 @@ action_mail_move_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); shell_backend = e_mail_reader_get_shell_backend (reader); - model = e_mail_shell_backend_get_folder_tree_model (shell_backend); + model = e_mail_shell_backend_get_folder_tree_model ( + E_MAIL_SHELL_BACKEND (shell_backend)); folder_tree = em_folder_tree_new_with_model (model); selected = message_list_get_selected (message_list); @@ -900,6 +902,7 @@ action_mail_show_source_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; + EMailShellBackend *mail_shell_backend; EShellBackend *shell_backend; MessageList *message_list; CamelFolder *folder; @@ -909,13 +912,14 @@ action_mail_show_source_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); shell_backend = e_mail_reader_get_shell_backend (reader); + mail_shell_backend = E_MAIL_SHELL_BACKEND (shell_backend); folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); g_return_if_fail (uids->len > 0); - browser = e_mail_browser_new (shell_backend); + browser = e_mail_browser_new (mail_shell_backend); reader = E_MAIL_READER (browser); html_display = e_mail_reader_get_html_display (reader); em_format_set_mode (EM_FORMAT (html_display), EM_FORMAT_SOURCE); -- cgit v1.2.3 From d8fd55f9ec0e70a0d5c8529ea989f8c272d0c443 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 14 May 2009 21:31:16 -0400 Subject: Remove useless "Call To..." popup menu option. --- mail/e-mail-reader.c | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 7b50774153..499f8fa25a 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -974,14 +974,6 @@ action_mail_undelete_cb (GtkAction *action, e_mail_reader_mark_selected (reader, mask, set); } -static void -action_mail_uri_call_to_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - static void action_mail_uri_copy_cb (GtkAction *action, EMailReader *reader) @@ -1426,13 +1418,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Undelete the selected messages"), G_CALLBACK (action_mail_undelete_cb) }, - { "mail-uri-call-to", - NULL, - N_("C_all To..."), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_call_to_cb) }, - { "mail-uri-copy", NULL, N_("_Copy Link Location"), -- cgit v1.2.3 From aaa180af5abef44bb3e3d3c3c5968ca191a3dbda Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 21 May 2009 06:55:49 -0400 Subject: Kill obsolete menu items. URI Popup Menu -> Call To... Message -> Post New Message to Folder Message -> Post a Reply --- mail/e-mail-reader.c | 52 ---------------------------------------------------- 1 file changed, 52 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 499f8fa25a..3969f4babd 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -552,17 +552,6 @@ action_mail_message_open_cb (GtkAction *action, e_mail_reader_open_selected (reader); } -static void -action_mail_message_post_cb (GtkAction *action, - EMailReader *reader) -{ - MessageList *message_list; - - message_list = e_mail_reader_get_message_list (reader); - - em_utils_post_to_folder (message_list->folder); -} - static void action_mail_move_cb (GtkAction *action, EMailReader *reader) @@ -785,28 +774,6 @@ action_mail_reply_list_cb (GtkAction *action, e_mail_reader_reply_to_message (reader, REPLY_MODE_LIST); } -static void -action_mail_reply_post_cb (GtkAction *action, - EMailReader *reader) -{ - MessageList *message_list; - CamelFolder *folder; - GtkWindow *window; - const gchar *uid; - - message_list = e_mail_reader_get_message_list (reader); - window = e_mail_reader_get_window (reader); - - folder = message_list->folder; - uid = message_list->cursor_uid; - g_return_if_fail (uid != NULL); - - if (!em_utils_check_user_can_send_mail (window)) - return; - - em_utils_post_reply_to_message_by_uid (folder, uid); -} - static void action_mail_reply_sender_cb (GtkAction *action, EMailReader *reader) @@ -1243,13 +1210,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Open the selected messages in a new window"), G_CALLBACK (action_mail_message_open_cb) }, - { "mail-message-post", - NULL, - N_("Pos_t New Message to Folder"), - NULL, - N_("Post a message to a public folder"), - G_CALLBACK (action_mail_message_post_cb) }, - { "mail-move", "mail-move", N_("_Move to Folder..."), @@ -1341,13 +1301,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Compose a reply to the mailing list of the selected message"), G_CALLBACK (action_mail_reply_list_cb) }, - { "mail-reply-post", - NULL, - N_("Post a Repl_y"), - NULL, - N_("Post a reply to a message in a public folder"), - G_CALLBACK (action_mail_reply_post_cb) }, - { "mail-reply-sender", "mail-reply-sender", N_("_Reply to Sender"), @@ -2544,11 +2497,6 @@ e_mail_reader_update_actions (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); - action_name = "mail-reply-post"; - sensitive = single_message_selected; - action = e_mail_reader_get_action (reader, action_name); - gtk_action_set_sensitive (action, sensitive); - action_name = "mail-reply-sender"; sensitive = single_message_selected; action = e_mail_reader_get_action (reader, action_name); -- cgit v1.2.3 From 71db41ef693bb3444cb9b459ef73fb5bdb0d4764 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 28 May 2009 00:47:04 -0400 Subject: Get the mailer's URI popup menu working. Except for "Add to Address Book", which looks like a project unto itself. This also kills off another plugin (copy-tool). --- mail/e-mail-reader.c | 183 +++++++++++++++++++++++++++++---------------------- 1 file changed, 106 insertions(+), 77 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 1cf9ff983e..edea7cfa6f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -38,6 +38,7 @@ #include "widgets/misc/e-popup-action.h" #include "mail/e-mail-browser.h" +#include "mail/e-mail-display.h" #include "mail/e-mail-reader-utils.h" #include "mail/e-mail-shell-backend.h" #include "mail/em-composer-utils.h" @@ -48,6 +49,7 @@ #include "mail/mail-autofilter.h" #include "mail/mail-config.h" #include "mail/mail-ops.h" +#include "mail/mail-vfolder.h" enum { CHANGED, @@ -941,38 +943,6 @@ action_mail_undelete_cb (GtkAction *action, e_mail_reader_mark_selected (reader, mask, set); } -static void -action_mail_uri_copy_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void -action_mail_uri_copy_address_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void -action_mail_uri_to_search_folder_recipient_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void -action_mail_uri_to_search_folder_sender_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - static void action_mail_zoom_100_cb (GtkAction *action, EMailReader *reader) @@ -1012,6 +982,88 @@ action_mail_zoom_out_cb (GtkAction *action, gtk_html_zoom_out (html); } +static void +action_search_folder_recipient_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + EMailDisplay *display; + CamelURL *curl; + const gchar *uri; + + /* This action is defined in EMailDisplay. */ + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + display = E_MAIL_DISPLAY (EM_FORMAT_HTML (html_display)->html); + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + curl = camel_url_new (uri, NULL); + g_return_if_fail (curl != NULL); + + if (curl->path != NULL && *curl->path != '\0') { + CamelInternetAddress *inet_addr; + const gchar *folder_uri; + + /* Ensure vfolder is running. */ + vfolder_load_storage (); + + folder_uri = message_list->folder_uri; + + inet_addr = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); + vfolder_gui_add_from_address (inet_addr, AUTO_TO, folder_uri); + camel_object_unref (inet_addr); + } + + camel_url_free (curl); +} + +static void +action_search_folder_sender_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + EMailDisplay *display; + CamelURL *curl; + const gchar *uri; + + /* This action is defined in EMailDisplay. */ + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + display = E_MAIL_DISPLAY (EM_FORMAT_HTML (html_display)->html); + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + curl = camel_url_new (uri, NULL); + g_return_if_fail (curl != NULL); + + if (curl->path != NULL && *curl->path != '\0') { + CamelInternetAddress *inet_addr; + const gchar *folder_uri; + + /* Ensure vfolder is running. */ + vfolder_load_storage (); + + folder_uri = message_list->folder_uri; + + inet_addr = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); + vfolder_gui_add_from_address (inet_addr, AUTO_FROM, folder_uri); + camel_object_unref (inet_addr); + } + + camel_url_free (curl); +} + static GtkActionEntry mail_reader_entries[] = { { "mail-add-sender", @@ -1371,34 +1423,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Undelete the selected messages"), G_CALLBACK (action_mail_undelete_cb) }, - { "mail-uri-copy", - NULL, - N_("_Copy Link Location"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_copy_cb) }, - - { "mail-uri-copy-address", - GTK_STOCK_COPY, - N_("Copy _Email Address"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_copy_address_cb) }, - - { "mail-uri-to-search-folder-recipient", - NULL, - N_("_To This Address"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_to_search_folder_recipient_cb) }, - - { "mail-uri-to-search-folder-sender", - NULL, - N_("_From This Address"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_to_search_folder_sender_cb) }, - { "mail-zoom-100", GTK_STOCK_ZOOM_100, N_("_Normal Size"), @@ -1464,13 +1488,6 @@ static GtkActionEntry mail_reader_entries[] = { NULL, NULL }, - { "mail-uri-to-search-folder-menu", - NULL, - N_("Create _Search Folder"), - NULL, - NULL, - NULL }, - { "mail-zoom-menu", NULL, N_("_Zoom"), @@ -1570,9 +1587,9 @@ static GtkToggleActionEntry mail_reader_toggle_entries[] = { }; static gboolean -mail_reader_html_button_release_event_cb (EMailReader *reader, - GdkEventButton *button, - GtkHTML *html) +mail_reader_button_release_event_cb (EMailReader *reader, + GdkEventButton *button, + GtkHTML *html) { GtkAction *action; const gchar *action_name; @@ -1984,11 +2001,11 @@ e_mail_reader_init (EMailReader *reader) EShellBackend *shell_backend; EShellSettings *shell_settings; EMFormatHTMLDisplay *html_display; + EMailDisplay *display; GtkActionGroup *action_group; MessageList *message_list; GConfBridge *bridge; GtkAction *action; - GtkHTML *html; const gchar *action_name; const gchar *key; @@ -2002,7 +2019,7 @@ e_mail_reader_init (EMailReader *reader) shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); - html = EM_FORMAT_HTML (html_display)->html; + display = E_MAIL_DISPLAY (EM_FORMAT_HTML (html_display)->html); gtk_action_group_add_actions ( action_group, mail_reader_entries, @@ -2052,6 +2069,18 @@ e_mail_reader_init (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Reply"), NULL); + action_name = "search-folder-recipient"; + action = e_mail_display_get_action (display, action_name); + g_signal_connect ( + action, "activate", + G_CALLBACK (action_search_folder_recipient_cb), reader); + + action_name = "search-folder-sender"; + action = e_mail_display_get_action (display, action_name); + g_signal_connect ( + action, "activate", + G_CALLBACK (action_search_folder_sender_cb), reader); + /* Bind properties. */ e_binding_new_full ( @@ -2070,7 +2099,7 @@ e_mail_reader_init (EMailReader *reader) e_binding_new ( G_OBJECT (shell_settings), "mail-show-animated-images", - G_OBJECT (html), "animate"); + G_OBJECT (display), "animate"); e_binding_new ( G_OBJECT (shell_settings), "mail-show-sender-photo", @@ -2081,16 +2110,16 @@ e_mail_reader_init (EMailReader *reader) e_mutual_binding_new ( G_OBJECT (action), "active", - G_OBJECT (html), "caret-mode"); + G_OBJECT (display), "caret-mode"); /* Connect signals. */ g_signal_connect_swapped ( - html, "button-release-event", - G_CALLBACK (mail_reader_html_button_release_event_cb), reader); + display, "button-release-event", + G_CALLBACK (mail_reader_button_release_event_cb), reader); g_signal_connect_swapped ( - html, "key-press-event", + display, "key-press-event", G_CALLBACK (mail_reader_key_press_event_cb), reader); g_signal_connect_swapped ( -- cgit v1.2.3 From be8ee5393471a83b24aed4de1669afd723cb3168 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 9 Jun 2009 23:15:20 -0400 Subject: Use key files for tracking widget states. Each EShellView now maintains a GKeyFile for recording disposable widget state such as tree view path expansion, scroll bar positions, combo box selections, etc. The EShellView records changes to the key file to ~/.evolution//config/state, and automatically restores the GKeyFile at startup. Currently only the mailer uses the key file, but it's intended to serve all shell views. It replaces the use of Camel "cmeta" files, as well as "et-expanded-*" and "folder-tree-expand-state.xml" files. Also, the mailer's folder tree model now includes a column for tracking which sidebar folders are expanded. Folder tree widgets appearing in dialog windows can copy the sidebar's expanded state using em_folder_tree_clone_expanded(). --- mail/e-mail-reader.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index edea7cfa6f..94855ee68b 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -167,6 +167,8 @@ action_mail_copy_cb (GtkAction *action, folder = message_list->folder; + em_folder_tree_clone_expanded (folder_tree); + em_folder_tree_set_excluded ( EM_FOLDER_TREE (folder_tree), EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | @@ -577,6 +579,8 @@ action_mail_move_cb (GtkAction *action, folder = message_list->folder; + em_folder_tree_clone_expanded (folder_tree); + em_folder_tree_set_excluded ( EM_FOLDER_TREE (folder_tree), EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | -- cgit v1.2.3 From ab27aff72c64183166fc6207d2ef0142e1ab8c83 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 13 Jun 2009 15:07:00 -0400 Subject: Thought of a better way to copy folder tree state. Revert the expanded tree model column and add a "selection"property to EMFolderTreeModel, which the sidebar sets. If set, all new EMFolderTree instances will automatically mimic its expanded and selected state. --- mail/e-mail-reader.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 94855ee68b..edea7cfa6f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -167,8 +167,6 @@ action_mail_copy_cb (GtkAction *action, folder = message_list->folder; - em_folder_tree_clone_expanded (folder_tree); - em_folder_tree_set_excluded ( EM_FOLDER_TREE (folder_tree), EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | @@ -579,8 +577,6 @@ action_mail_move_cb (GtkAction *action, folder = message_list->folder; - em_folder_tree_clone_expanded (folder_tree); - em_folder_tree_set_excluded ( EM_FOLDER_TREE (folder_tree), EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | -- cgit v1.2.3 From f4d748a85c534cb8a693b6a1f1b3353adfd73b5b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 19 Jun 2009 18:43:29 -0400 Subject: Fix similar weak pointer issues throughout. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index edea7cfa6f..9f07ae32a0 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -331,7 +331,7 @@ action_mail_flag_for_followup_cb (GtkAction *action, folder = message_list->folder; uids = message_list_get_selected (message_list); - em_utils_flag_for_followup (window, folder, uids); + em_utils_flag_for_followup (reader, folder, uids); } static void -- cgit v1.2.3 From cd29d53b07609ac39be3efa646baa59f9d1731ed Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 19 Jun 2009 22:30:26 -0400 Subject: Fix mislabeled button. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 9f07ae32a0..787bd0ca61 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -585,7 +585,7 @@ action_mail_move_cb (GtkAction *action, dialog = em_folder_selector_new ( EM_FOLDER_TREE (folder_tree), EM_FOLDER_SELECTOR_CAN_CREATE, - _("Select Folder"), NULL, _("C_opy")); + _("Select Folder"), NULL, _("_Move")); if (default_xfer_messages_uri != NULL) em_folder_selector_set_selected ( -- cgit v1.2.3 From 174c942e0945a2017f0c479883dce2950e42e786 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 24 Jun 2009 00:40:49 -0400 Subject: Split store and local folder management out from shell backend. --- mail/e-mail-reader.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 787bd0ca61..a58e0acd46 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -148,9 +148,7 @@ static void action_mail_copy_cb (GtkAction *action, EMailReader *reader) { - EShellBackend *shell_backend; MessageList *message_list; - EMFolderTreeModel *model; CamelFolder *folder; GtkWidget *folder_tree; GtkWidget *dialog; @@ -158,11 +156,8 @@ action_mail_copy_cb (GtkAction *action, const gchar *uri; message_list = e_mail_reader_get_message_list (reader); - shell_backend = e_mail_reader_get_shell_backend (reader); - model = e_mail_shell_backend_get_folder_tree_model ( - E_MAIL_SHELL_BACKEND (shell_backend)); - folder_tree = em_folder_tree_new_with_model (model); + folder_tree = em_folder_tree_new (); selected = message_list_get_selected (message_list); folder = message_list->folder; @@ -558,9 +553,7 @@ static void action_mail_move_cb (GtkAction *action, EMailReader *reader) { - EShellBackend *shell_backend; MessageList *message_list; - EMFolderTreeModel *model; CamelFolder *folder; GtkWidget *folder_tree; GtkWidget *dialog; @@ -568,11 +561,8 @@ action_mail_move_cb (GtkAction *action, const gchar *uri; message_list = e_mail_reader_get_message_list (reader); - shell_backend = e_mail_reader_get_shell_backend (reader); - model = e_mail_shell_backend_get_folder_tree_model ( - E_MAIL_SHELL_BACKEND (shell_backend)); - folder_tree = em_folder_tree_new_with_model (model); + folder_tree = em_folder_tree_new (); selected = message_list_get_selected (message_list); folder = message_list->folder; -- cgit v1.2.3 From f0d3f3afdfa314e1e8cd7d8da790878008a46aad Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 24 Jun 2009 12:59:33 -0400 Subject: Radically reorganize source code. - Collect all shell modules into a new top-level 'modules' directory: $(top_srcdir)/modules/addressbook $(top_srcdir)/modules/calendar $(top_srcdir)/modules/mail Nothing is allowed to link to these, not plugins nor other modules. THIS SOLVES BUG #571275 AND OPENS THE DOOR TO PORTING TO MAC OS X. - Mimic the libevolution-mail-shared library from master (except drop the "shared" suffix) and have libevolution-mail-importers and all mail-related plugins link to it. - Discard the a11y subdirectories and have the files live alongside their counterpart widgets. --- mail/e-mail-reader.c | 59 ++++++++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 37 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index a58e0acd46..6d680aebe1 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -40,7 +40,6 @@ #include "mail/e-mail-browser.h" #include "mail/e-mail-display.h" #include "mail/e-mail-reader-utils.h" -#include "mail/e-mail-shell-backend.h" #include "mail/em-composer-utils.h" #include "mail/em-event.h" #include "mail/em-folder-selector.h" @@ -342,9 +341,6 @@ action_mail_forward_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); - if (!em_utils_check_user_can_send_mail (window)) - return; - folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); @@ -365,9 +361,6 @@ action_mail_forward_attached_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); - if (!em_utils_check_user_can_send_mail (window)) - return; - folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); @@ -388,9 +381,6 @@ action_mail_forward_inline_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); - if (!em_utils_check_user_can_send_mail (window)) - return; - folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); @@ -411,9 +401,6 @@ action_mail_forward_quoted_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); - if (!em_utils_check_user_can_send_mail (window)) - return; - folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); @@ -517,9 +504,6 @@ action_mail_message_edit_cb (GtkAction *action, window = e_mail_reader_get_window (reader); message_list = e_mail_reader_get_message_list (reader); - if (!em_utils_check_user_can_send_mail (window)) - return; - folder = message_list->folder; uids = message_list_get_selected (message_list); @@ -536,9 +520,6 @@ action_mail_message_new_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); window = e_mail_reader_get_window (reader); - if (!em_utils_check_user_can_send_mail (window)) - return; - em_utils_compose_new_message (message_list->folder_uri); } @@ -746,9 +727,6 @@ action_mail_redirect_cb (GtkAction *action, uid = message_list->cursor_uid; g_return_if_fail (uid != NULL); - if (!em_utils_check_user_can_send_mail (window)) - return; - em_utils_redirect_message_by_uid (folder, uid); } @@ -861,7 +839,6 @@ action_mail_show_source_cb (GtkAction *action, EMailReader *reader) { EMFormatHTMLDisplay *html_display; - EMailShellBackend *mail_shell_backend; EShellBackend *shell_backend; MessageList *message_list; CamelFolder *folder; @@ -871,14 +848,13 @@ action_mail_show_source_cb (GtkAction *action, message_list = e_mail_reader_get_message_list (reader); shell_backend = e_mail_reader_get_shell_backend (reader); - mail_shell_backend = E_MAIL_SHELL_BACKEND (shell_backend); folder = message_list->folder; folder_uri = message_list->folder_uri; uids = message_list_get_selected (message_list); g_return_if_fail (uids->len > 0); - browser = e_mail_browser_new (mail_shell_backend); + browser = e_mail_browser_new (shell_backend); reader = E_MAIL_READER (browser); html_display = e_mail_reader_get_html_display (reader); em_format_set_mode (EM_FORMAT (html_display), EM_FORMAT_SOURCE); @@ -2251,6 +2227,8 @@ e_mail_reader_check_state (EMailReader *reader) can_flag_for_followup = TRUE; } + if (em_utils_check_user_can_send_mail ()) + state |= E_MAIL_READER_HAVE_ACCOUNT; if (uids->len == 1) state |= E_MAIL_READER_SELECTION_SINGLE; if (uids->len > 1) @@ -2284,8 +2262,6 @@ e_mail_reader_check_state (EMailReader *reader) if (has_unread) state |= E_MAIL_READER_SELECTION_HAS_UNREAD; #if 0 /* FIXME */ - if (has_callto_uri) - state |= E_MAIL_READER_SELECTION_HAS_URI_CALLTO; if (has_http_uri) state |= E_MAIL_READER_SELECTION_HAS_URI_HTTP; if (has_mailto_uri) @@ -2318,7 +2294,7 @@ e_mail_reader_update_actions (EMailReader *reader) gboolean enable_flag_clear; gboolean enable_flag_completed; gboolean enable_flag_for_followup; - gboolean single_message_selected; + gboolean have_an_account; gboolean multiple_messages_selected; gboolean selection_has_deleted_messages; gboolean selection_has_important_messages; @@ -2329,6 +2305,7 @@ e_mail_reader_update_actions (EMailReader *reader) gboolean selection_has_unimportant_messages; gboolean selection_has_unread_messages; gboolean selection_is_mailing_list; + gboolean single_message_selected; g_return_if_fail (E_IS_MAIL_READER (reader)); @@ -2342,6 +2319,8 @@ e_mail_reader_update_actions (EMailReader *reader) disable_printing = e_shell_settings_get_boolean ( shell_settings, "disable-printing"); + have_an_account = + (state & E_MAIL_READER_HAVE_ACCOUNT); single_message_selected = (state & E_MAIL_READER_SELECTION_SINGLE); multiple_messages_selected = @@ -2397,22 +2376,22 @@ e_mail_reader_update_actions (EMailReader *reader) gtk_action_set_sensitive (action, sensitive); action_name = "mail-forward"; - sensitive = any_messages_selected; + sensitive = have_an_account && any_messages_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-forward-attached"; - sensitive = any_messages_selected; + sensitive = have_an_account && any_messages_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-forward-inline"; - sensitive = single_message_selected; + sensitive = have_an_account && single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-forward-quoted"; - sensitive = single_message_selected; + sensitive = have_an_account && single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); @@ -2452,7 +2431,12 @@ e_mail_reader_update_actions (EMailReader *reader) gtk_action_set_sensitive (action, sensitive); action_name = "mail-message-edit"; - sensitive = single_message_selected; + sensitive = have_an_account && single_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-message-new"; + sensitive = have_an_account; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); @@ -2502,22 +2486,23 @@ e_mail_reader_update_actions (EMailReader *reader) gtk_action_set_sensitive (action, sensitive); action_name = "mail-redirect"; - sensitive = single_message_selected; + sensitive = have_an_account && single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-reply-all"; - sensitive = single_message_selected; + sensitive = have_an_account && single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-reply-list"; - sensitive = single_message_selected && selection_is_mailing_list; + sensitive = have_an_account && single_message_selected && + selection_is_mailing_list; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-reply-sender"; - sensitive = single_message_selected; + sensitive = have_an_account && single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); -- cgit v1.2.3 From 99126d46e61ce19a72acb3dd8498729b025339ec Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 26 Jun 2009 17:09:11 -0400 Subject: Partial fix for bug #587014. Cursor now moves to the correct row, but row is not selected. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 6d680aebe1..346344cfc4 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1784,7 +1784,7 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) cursor_uid = message_list->cursor_uid; format_uid = EM_FORMAT (html_display)->uid; - if (cursor_uid != NULL) { + if (message_list->last_sel_single) { if (g_strcmp0 (cursor_uid, format_uid) != 0) mail_get_messagex ( message_list->folder, cursor_uid, -- cgit v1.2.3 From a1082f0e45e1e34c3f0193ff3a51588c89f914c1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 2 Jul 2009 13:49:11 -0400 Subject: Kill the last GtkOptionMenu instances. Wrote a new widget (ECharsetComboBox) to replace e-charset-picker.c. The widget provides a "charset" string property that allows us to bind to GConf keys (via EShellSettings). Moved e_charset_add_radio_actions() to e-util/e-charset.c. Updated Glade files, #include lines, etc. --- mail/e-mail-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 7ffc873cb8..0e20dbb043 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -30,11 +30,11 @@ #include #endif -#include "e-util/e-util.h" #include "e-util/e-binding.h" +#include "e-util/e-charset.h" +#include "e-util/e-util.h" #include "e-util/gconf-bridge.h" #include "shell/e-shell.h" -#include "widgets/misc/e-charset-picker.h" #include "widgets/misc/e-popup-action.h" #include "mail/e-mail-browser.h" -- cgit v1.2.3 From ff736e48b2d4375d86af8bbb9ab535f62180e61d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 17 Aug 2009 12:15:57 -0400 Subject: =?UTF-8?q?Bug=C2=A0592034=20-=20Reply=20to=20List=20doesn't=20wor?= =?UTF-8?q?k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mail/e-mail-reader.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 0362cb110a..ed70753719 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2141,6 +2141,7 @@ e_mail_reader_check_state (EMailReader *reader) gboolean has_unread = FALSE; gboolean drafts_or_outbox; gboolean store_supports_vjunk = FALSE; + gboolean is_mailing_list; guint32 state = 0; guint ii; @@ -2160,8 +2161,13 @@ e_mail_reader_check_state (EMailReader *reader) em_utils_folder_is_drafts (folder, folder_uri) || em_utils_folder_is_outbox (folder, folder_uri); + /* Initialize this flag based on whether there are any + * messages selected. We will update it in the loop. */ + is_mailing_list = (uids->len > 0); + for (ii = 0; ii < uids->len; ii++) { CamelMessageInfo *info; + const gchar *string; guint32 flags; info = camel_folder_get_message_info ( @@ -2227,6 +2233,9 @@ e_mail_reader_check_state (EMailReader *reader) can_flag_completed = TRUE; } else can_flag_for_followup = TRUE; + + string = camel_message_info_mlist (info); + is_mailing_list &= (string != NULL && *string != '\0'); } if (em_utils_check_user_can_send_mail ()) @@ -2237,10 +2246,6 @@ e_mail_reader_check_state (EMailReader *reader) state |= E_MAIL_READER_SELECTION_MULTIPLE; if (!drafts_or_outbox && uids->len == 1) state |= E_MAIL_READER_SELECTION_CAN_ADD_SENDER; -#if 0 /* FIXME */ - if (can_edit) - state |= E_MAIL_READER_SELECTION_CAN_EDIT; -#endif if (can_clear_flags) state |= E_MAIL_READER_SELECTION_FLAG_CLEAR; if (can_flag_completed) @@ -2263,14 +2268,8 @@ e_mail_reader_check_state (EMailReader *reader) state |= E_MAIL_READER_SELECTION_HAS_UNIMPORTANT; if (has_unread) state |= E_MAIL_READER_SELECTION_HAS_UNREAD; -#if 0 /* FIXME */ - if (has_http_uri) - state |= E_MAIL_READER_SELECTION_HAS_URI_HTTP; - if (has_mailto_uri) - state |= E_MAIL_READER_SELECTION_HAS_URI_MAILTO; if (is_mailing_list) state |= E_MAIL_READER_SELECTION_IS_MAILING_LIST; -#endif em_utils_uids_free (uids); @@ -2327,7 +2326,7 @@ e_mail_reader_update_actions (EMailReader *reader) (state & E_MAIL_READER_SELECTION_SINGLE); multiple_messages_selected = (state & E_MAIL_READER_SELECTION_MULTIPLE); - /* FIXME Missing booleans */ + /* FIXME Missing CAN_ADD_SENDER */ enable_flag_clear = (state & E_MAIL_READER_SELECTION_FLAG_CLEAR); enable_flag_completed = @@ -2350,7 +2349,6 @@ e_mail_reader_update_actions (EMailReader *reader) (state & E_MAIL_READER_SELECTION_HAS_UNIMPORTANT); selection_has_unread_messages = (state & E_MAIL_READER_SELECTION_HAS_UNREAD); - /* FIXME Missing booleans */ selection_is_mailing_list = (state & E_MAIL_READER_SELECTION_IS_MAILING_LIST); -- cgit v1.2.3 From a1b2b4261c72ae1e71494155edbf5f301ae6fe10 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 17 Aug 2009 12:36:07 -0400 Subject: Fix a duplicate mnemonic. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index ed70753719..111b1ef78f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1493,7 +1493,7 @@ static EPopupActionEntry mail_reader_popup_entries[] = { "mail-mark-notjunk" }, { "mail-popup-mark-read", - N_("Mark as _Read"), + N_("Mar_k as Read"), "mail-mark-read" }, { "mail-popup-mark-unimportant", -- cgit v1.2.3 From cee7273ff2f7a81f84dc3ca099e689e37fe1b63e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 17 Aug 2009 14:14:03 -0400 Subject: =?UTF-8?q?Bug=C2=A0592032=20-=20Marks=20message=20as=20read=20whe?= =?UTF-8?q?n=20preview=20is=20off?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mail/e-mail-reader.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 111b1ef78f..38d5648c19 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -859,7 +859,7 @@ action_mail_show_source_cb (GtkAction *action, html_display = e_mail_reader_get_html_display (reader); em_format_set_mode (EM_FORMAT (html_display), EM_FORMAT_SOURCE); e_mail_reader_set_folder (reader, folder, folder_uri); - e_mail_reader_set_message (reader, uids->pdata[0], FALSE); + e_mail_reader_set_message (reader, uids->pdata[0]); gtk_widget_show (browser); message_list_free_uids (message_list, uids); @@ -1787,7 +1787,18 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) format_uid = EM_FORMAT (html_display)->uid; if (message_list->last_sel_single) { - if (g_strcmp0 (cursor_uid, format_uid) != 0) + GtkWidget *widget; + gboolean html_display_visible; + gboolean selected_uid_changed; + + /* Decide whether to download the full message now. */ + + widget = GTK_WIDGET (EM_FORMAT_HTML (html_display)->html); + + html_display_visible = GTK_WIDGET_MAPPED (widget); + selected_uid_changed = g_strcmp0 (cursor_uid, format_uid); + + if (html_display_visible && selected_uid_changed) mail_get_messagex ( message_list->folder, cursor_uid, mail_reader_message_loaded_cb, @@ -1810,8 +1821,9 @@ mail_reader_message_selected_cb (EMailReader *reader, guint source_id; gpointer data; - /* XXX This is kludgy, but we have no other place to store - * timeout state information. */ + /* XXX This is kludgy, but we have no other place to store timeout + * state information. Addendum: See EAttachmentView for an example + * of storing private data in an interface. Clunky but works. */ key = "message-selected-timeout"; data = g_object_get_data (G_OBJECT (reader), key); @@ -1864,8 +1876,7 @@ mail_reader_set_folder (EMailReader *reader, static void mail_reader_set_message (EMailReader *reader, - const gchar *uid, - gboolean mark_read) + const gchar *uid) { MessageList *message_list; @@ -2681,8 +2692,7 @@ e_mail_reader_set_folder_uri (EMailReader *reader, void e_mail_reader_set_message (EMailReader *reader, - const gchar *uid, - gboolean mark_read) + const gchar *uid) { EMailReaderIface *iface; @@ -2691,7 +2701,7 @@ e_mail_reader_set_message (EMailReader *reader, iface = E_MAIL_READER_GET_IFACE (reader); g_return_if_fail (iface->set_message != NULL); - iface->set_message (reader, uid, mark_read); + iface->set_message (reader, uid); } void -- cgit v1.2.3 From f6355e1fde1491c6e451975902906ea9921fee4a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 25 Aug 2009 11:40:56 -0400 Subject: Add menu item ellipsis according to bug #324492. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 38d5648c19..7497cf8029 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1428,7 +1428,7 @@ static GtkActionEntry mail_reader_entries[] = { { "mail-forward-as-menu", NULL, - N_("F_orward As..."), + N_("F_orward As"), NULL, NULL, NULL }, -- cgit v1.2.3