X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-msg-view-window.c;h=ea5ba0d7172fb98cdaad682e6f3841319e01eb6d;hp=139a71af5625b685ed18e0c37aa86fa05f17c8b9;hb=f0308a557ea83318786ab332f5de2a3be5edc74a;hpb=1e0673f831720dd4f55f964dd1a99f33962a63cf diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index 139a71a..ea5ba0d 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -48,10 +48,9 @@ #include #include #include -#include "modest-progress-bar.h" #include #include -#include "hildon/hildon-pannable-area.h" +#include #include "modest-defs.h" #include "modest-hildon-includes.h" #include "modest-ui-dimming-manager.h" @@ -65,6 +64,7 @@ #include #include #include +#include #define MYDOCS_ENV "MYDOCSDIR" #define DOCS_FOLDER ".documents" @@ -134,10 +134,13 @@ static void modest_msg_view_window_find_toolbar_search (GtkWidget *widget, static void modest_msg_view_window_disconnect_signals (ModestWindow *self); static gdouble modest_msg_view_window_get_zoom (ModestWindow *window); +static void modest_msg_view_window_set_zoom (ModestWindow *window, + gdouble zoom); +static gboolean modest_msg_view_window_zoom_minus (ModestWindow *window); +static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window); static gboolean modest_msg_view_window_key_event (GtkWidget *window, GdkEventKey *event, gpointer userdata); - static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window); static void modest_msg_view_window_show_toolbar (ModestWindow *window, @@ -217,6 +220,8 @@ static gboolean message_reader (ModestMsgViewWindow *window, TnyHeader *header, GtkTreeRowReference *row_reference); +static void setup_menu (ModestMsgViewWindow *self); + /* list my signals */ enum { MSG_CHANGED_SIGNAL, @@ -228,6 +233,7 @@ static const GtkToggleActionEntry msg_view_toggle_action_entries [] = { { "FindInMessage", MODEST_TOOLBAR_ICON_FIND, N_("qgn_toolb_gene_find"), NULL, NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE }, }; + #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_MSG_VIEW_WINDOW, \ ModestMsgViewWindowPrivate)) @@ -254,7 +260,7 @@ modest_msg_view_window_get_type (void) (GInstanceInitFunc) modest_msg_view_window_init, NULL }; - my_type = g_type_register_static (MODEST_TYPE_WINDOW, + my_type = g_type_register_static (MODEST_TYPE_HILDON2_WINDOW, "ModestMsgViewWindow", &my_info, 0); @@ -280,21 +286,11 @@ save_state (ModestWindow *self) MODEST_CONF_MSG_VIEW_WINDOW_KEY); } -static void -restore_settings (ModestMsgViewWindow *self) -{ - ModestConf *conf; - - conf = modest_runtime_get_conf (); - modest_widget_memory_restore (conf, - G_OBJECT(self), - MODEST_CONF_MSG_VIEW_WINDOW_KEY); -} - -static gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self, - GtkScrollType scroll_type, - gboolean horizontal, - gpointer userdata) +static +gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self, + GtkScrollType scroll_type, + gboolean horizontal, + gpointer userdata) { ModestMsgViewWindowPrivate *priv; gboolean return_value; @@ -325,16 +321,21 @@ static void modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass) { GObjectClass *gobject_class; + HildonWindowClass *hildon_window_class; ModestWindowClass *modest_window_class; GtkBindingSet *binding_set; gobject_class = (GObjectClass*) klass; + hildon_window_class = (HildonWindowClass *) klass; modest_window_class = (ModestWindowClass *) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = modest_msg_view_window_finalize; + modest_window_class->set_zoom_func = modest_msg_view_window_set_zoom; modest_window_class->get_zoom_func = modest_msg_view_window_get_zoom; + modest_window_class->zoom_plus_func = modest_msg_view_window_zoom_plus; + modest_window_class->zoom_minus_func = modest_msg_view_window_zoom_minus; modest_window_class->show_toolbar_func = modest_msg_view_window_show_toolbar; modest_window_class->disconnect_signals_func = modest_msg_view_window_disconnect_signals; @@ -536,8 +537,8 @@ static void modest_msg_view_window_disconnect_signals (ModestWindow *self) { ModestMsgViewWindowPrivate *priv; - ModestHeaderView *header_view = NULL; - ModestWindow *main_window = NULL; + GtkWidget *header_view = NULL; + GtkWindow *parent_window = NULL; priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self); @@ -581,21 +582,15 @@ modest_msg_view_window_disconnect_signals (ModestWindow *self) modest_signal_mgr_disconnect_all_and_destroy (priv->sighandlers); priv->sighandlers = NULL; - - main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), - FALSE); /* don't create */ - if (!main_window) - return; - - header_view = MODEST_HEADER_VIEW( - modest_main_window_get_child_widget( - MODEST_MAIN_WINDOW(main_window), - MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW)); - if (header_view == NULL) - return; - - modest_header_view_remove_observer(header_view, - MODEST_HEADER_VIEW_OBSERVER(self)); + + parent_window = gtk_window_get_transient_for (GTK_WINDOW (self)); + if (parent_window && MODEST_IS_HEADER_WINDOW (parent_window)) { + header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (parent_window))); + if (header_view) { + modest_header_view_remove_observer(MODEST_HEADER_VIEW (header_view), + MODEST_HEADER_VIEW_OBSERVER(self)); + } + } } static void @@ -728,7 +723,6 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self, GObject *obj = NULL; ModestMsgViewWindowPrivate *priv = NULL; ModestWindowPrivate *parent_priv = NULL; - ModestDimmingRulesGroup *menu_rules_group = NULL; ModestDimmingRulesGroup *toolbar_rules_group = NULL; ModestDimmingRulesGroup *clipboard_rules_group = NULL; @@ -739,20 +733,13 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self, priv->msg_uid = g_strdup (msg_uid); /* Menubar */ - parent_priv->menubar = modest_maemo_utils_get_manager_menubar_as_menu (parent_priv->ui_manager, "/MenuBar"); - hildon_window_set_menu (HILDON_WINDOW(obj), GTK_MENU(parent_priv->menubar)); - gtk_widget_show (parent_priv->menubar); - parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new(); + parent_priv->menubar = NULL; - menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE); toolbar_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_TOOLBAR, TRUE); clipboard_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_CLIPBOARD, FALSE); + setup_menu (self); /* Add common dimming rules */ - modest_dimming_rules_group_add_rules (menu_rules_group, - modest_msg_view_menu_dimming_entries, - G_N_ELEMENTS (modest_msg_view_menu_dimming_entries), - MODEST_WINDOW (self)); modest_dimming_rules_group_add_rules (toolbar_rules_group, modest_msg_view_toolbar_dimming_entries, G_N_ELEMENTS (modest_msg_view_toolbar_dimming_entries), @@ -763,10 +750,8 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self, MODEST_WINDOW (self)); /* Insert dimming rules group for this window */ - modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group); modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group); modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, clipboard_rules_group); - g_object_unref (menu_rules_group); g_object_unref (toolbar_rules_group); g_object_unref (clipboard_rules_group); @@ -966,6 +951,7 @@ modest_msg_view_window_new_from_header_view (ModestHeaderView *header_view, /* Setup row references and connect signals */ priv->header_model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); + g_object_ref (priv->header_model); if (row_reference) { priv->row_reference = gtk_tree_row_reference_copy (row_reference); @@ -1420,7 +1406,9 @@ modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle, /* update the toggle buttons status */ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"); - modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active); + if (action) + modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active); + } static void @@ -1433,7 +1421,7 @@ modest_msg_view_window_find_toolbar_close (GtkWidget *widget, priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj); parent_priv = MODEST_WINDOW_GET_PRIVATE (obj); - + toggle = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage")); gtk_toggle_action_set_active (toggle, FALSE); modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view)); @@ -1455,7 +1443,7 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget, if ((current_search == NULL) || (strcmp (current_search, "") == 0)) { g_free (current_search); - hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ecdg_ib_find_rep_enter_text")); + hildon_banner_show_information (NULL, NULL, _CS("ecdg_ib_find_rep_enter_text")); return; } @@ -1466,7 +1454,8 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget, result = modest_isearch_view_search (MODEST_ISEARCH_VIEW (priv->msg_view), priv->last_search); if (!result) { - hildon_banner_show_information (NULL, NULL, dgettext("hildon-libs", "ckct_ib_find_no_matches")); + hildon_banner_show_information (NULL, NULL, + _HL("ckct_ib_find_no_matches")); g_free (priv->last_search); priv->last_search = NULL; } else { @@ -1475,7 +1464,8 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget, } } else { if (!modest_isearch_view_search_next (MODEST_ISEARCH_VIEW (priv->msg_view))) { - hildon_banner_show_information (NULL, NULL, dgettext("hildon-libs", "ckct_ib_find_search_complete")); + hildon_banner_show_information (NULL, NULL, + _HL("ckct_ib_find_search_complete")); g_free (priv->last_search); priv->last_search = NULL; } else { @@ -1488,6 +1478,21 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget, } +static void +modest_msg_view_window_set_zoom (ModestWindow *window, + gdouble zoom) +{ + ModestMsgViewWindowPrivate *priv; + ModestWindowPrivate *parent_priv; + + g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window)); + + priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); + parent_priv = MODEST_WINDOW_GET_PRIVATE (window); + modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom); + +} + static gdouble modest_msg_view_window_get_zoom (ModestWindow *window) { @@ -1500,6 +1505,89 @@ modest_msg_view_window_get_zoom (ModestWindow *window) } static gboolean +modest_msg_view_window_zoom_plus (ModestWindow *window) +{ + gdouble zoom_level; + ModestMsgViewWindowPrivate *priv; + gint int_zoom; + gchar *banner_text; + + g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), 1.0); + priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); + + zoom_level = modest_zoomable_get_zoom (MODEST_ZOOMABLE (priv->msg_view)); + + if (zoom_level >= 2.0) { + hildon_banner_show_information (NULL, NULL, + _CS("ckct_ib_max_zoom_level_reached")); + return FALSE; + } else if (zoom_level >= 1.5) { + zoom_level = 2.0; + } else if (zoom_level >= 1.2) { + zoom_level = 1.5; + } else if (zoom_level >= 1.0) { + zoom_level = 1.2; + } else if (zoom_level >= 0.8) { + zoom_level = 1.0; + } else if (zoom_level >= 0.5) { + zoom_level = 0.8; + } else { + zoom_level = 0.5; + } + + /* set zoom level */ + int_zoom = (gint) rint (zoom_level*100.0+0.1); + banner_text = g_strdup_printf (_HL("wdgt_ib_zoom"), int_zoom); + modest_platform_information_banner (GTK_WIDGET (window), NULL, banner_text); + g_free (banner_text); + modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level); + + return TRUE; +} + +static gboolean +modest_msg_view_window_zoom_minus (ModestWindow *window) +{ + gdouble zoom_level; + ModestMsgViewWindowPrivate *priv; + gint int_zoom; + gchar *banner_text; + + g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), 1.0); + priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); + + zoom_level = modest_zoomable_get_zoom (MODEST_ZOOMABLE (priv->msg_view)); + + if (zoom_level <= 0.5) { + hildon_banner_show_information (NULL, NULL, + _CS("ckct_ib_min_zoom_level_reached")); + return FALSE; + } else if (zoom_level <= 0.8) { + zoom_level = 0.5; + } else if (zoom_level <= 1.0) { + zoom_level = 0.8; + } else if (zoom_level <= 1.2) { + zoom_level = 1.0; + } else if (zoom_level <= 1.5) { + zoom_level = 1.2; + } else if (zoom_level <= 2.0) { + zoom_level = 1.5; + } else { + zoom_level = 2.0; + } + + /* set zoom level */ + int_zoom = (gint) rint (zoom_level*100.0+0.1); + banner_text = g_strdup_printf (_HL("wdgt_ib_zoom"), int_zoom); + modest_platform_information_banner (GTK_WIDGET (window), NULL, banner_text); + g_free (banner_text); + modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level); + + return TRUE; + +} + +static gboolean modest_msg_view_window_key_event (GtkWidget *window, GdkEventKey *event, gpointer userdata) @@ -1530,7 +1618,7 @@ modest_msg_view_window_key_event (GtkWidget *window, if (event->type == GDK_KEY_PRESS) { GtkScrollType scroll_type; - + switch (event->keyval) { case GDK_Up: case GDK_KP_Up: @@ -1552,7 +1640,7 @@ modest_msg_view_window_key_event (GtkWidget *window, scroll_type = GTK_SCROLL_END; break; default: scroll_type = GTK_SCROLL_NONE; } - + /* g_signal_emit_by_name (G_OBJECT (priv->main_scroll), "scroll-child", */ /* scroll_type, FALSE, &return_value); */ return FALSE; @@ -1757,6 +1845,11 @@ message_reader (ModestMsgViewWindow *window, mgr = modest_runtime_get_window_mgr (); /* Msg download completed */ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)) { + + /* We set the header from model while we're loading */ + tny_header_view_set_header (TNY_HEADER_VIEW (priv->msg_view), header); + gtk_window_set_title (GTK_WINDOW (window), _CS("ckdg_pb_updating")); + /* Ask the user if he wants to download the message if we're not online */ if (!tny_device_is_online (modest_runtime_get_device())) { @@ -2082,9 +2175,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self, ModestMsgViewWindowPrivate *priv = NULL; ModestWindowPrivate *parent_priv; GtkWidget *reply_button = NULL, *menu = NULL; - const gchar *action_name; - GtkAction *action; - + parent_priv = MODEST_WINDOW_GET_PRIVATE(self); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self); @@ -2099,7 +2190,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self, priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext"); priv->prev_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack"); toolbar_resize (MODEST_MSG_VIEW_WINDOW (self)); - + /* Add to window */ hildon_window_add_toolbar (HILDON_WINDOW (self), GTK_TOOLBAR (parent_priv->toolbar)); @@ -2109,7 +2200,8 @@ modest_msg_view_window_show_toolbar (ModestWindow *self, "/ToolBar/ToolbarMessageReply"); menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolbarReplyCSM"); - gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0); + if (menu && reply_button) + gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0); } if (show_toolbar) { @@ -2188,7 +2280,7 @@ on_account_removed (TnyAccountStore *account_store, parent_acc = modest_tny_account_get_parent_modest_account_name_for_server_account (account); /* Close this window if I'm showing a message of the removed account */ - if (strcmp (parent_acc, our_acc) == 0) + if (our_acc && parent_acc && strcmp (parent_acc, our_acc) == 0) modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (user_data)); } } @@ -2302,7 +2394,8 @@ modest_msg_view_window_get_attachments (ModestMsgViewWindow *win) g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), NULL); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (win); - selected_attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view)); + /* In Hildon 2.2 as there's no selection we assume we have all attachments selected */ + selected_attachments = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view)); return selected_attachments; } @@ -2527,8 +2620,8 @@ idle_save_mime_part_show_result (SaveMimePartInfo *info) if (info->result == GNOME_VFS_OK) { hildon_banner_show_information (NULL, NULL, _CS("sfil_ib_saved")); } else if (info->result == GNOME_VFS_ERROR_NO_SPACE) { - hildon_banner_show_information (NULL, NULL, dgettext("ke-recv", - "cerm_device_memory_full")); + hildon_banner_show_information (NULL, NULL, + _KR("cerm_device_memory_full")); } else { hildon_banner_show_information (NULL, NULL, _("mail_ib_file_operation_failed")); } @@ -2621,7 +2714,7 @@ save_attachments_response (GtkDialog *dialog, if (!modest_utils_folder_writable (chooser_uri)) { hildon_banner_show_information - (NULL, NULL, dgettext("hildon-fm", "sfil_ib_readonly_location")); + (NULL, NULL, _FM("sfil_ib_readonly_location")); } else { TnyIterator *iter; @@ -2633,7 +2726,7 @@ save_attachments_response (GtkDialog *dialog, !tny_mime_part_is_purged (mime_part) && (tny_mime_part_get_filename (mime_part) != NULL)) { SaveMimePartPair *pair; - + pair = g_slice_new0 (SaveMimePartPair); if (tny_list_get_length (mime_parts) > 1) { @@ -2679,7 +2772,9 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *m priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); if (mime_parts == NULL) { - mime_parts = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view)); + /* In Hildon 2.2 save and delete operate over all the attachments as there's no + * selection available */ + mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view)); if (mime_parts == NULL || tny_list_get_length (mime_parts) == 0) return; } else { @@ -2713,7 +2808,7 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *m GTK_FILE_CHOOSER_ACTION_SAVE); /* set folder */ - folder = g_build_filename (g_get_home_dir (), g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL); + folder = g_build_filename (g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (save_dialog), folder); g_free (folder); @@ -2775,10 +2870,10 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window)); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); - if (get_all) - mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view)); - else - mime_parts = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view)); + /* In hildon 2.2 we ignore the get_all flag as we always get all attachments. This is + * because we don't have selection + */ + mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view)); /* Remove already purged messages from mime parts list */ iter = tny_list_create_iterator (mime_parts); @@ -3015,6 +3110,41 @@ on_fetch_image (ModestMsgView *msgview, return TRUE;; } +static void +setup_menu (ModestMsgViewWindow *self) +{ + g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(self)); + + /* Settings menu buttons */ + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_replytoall"), NULL, + APP_MENU_CALLBACK (modest_ui_actions_on_reply_all), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_reply_msg)); + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_forward"), "d", + APP_MENU_CALLBACK (modest_ui_actions_on_forward), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_reply_msg)); + + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_read"), NULL, + APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_read), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_read_msg_in_view)); + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_unread"), NULL, + APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_unread), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_unread_msg_in_view)); + + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_save_attachments"), NULL, + APP_MENU_CALLBACK (modest_ui_actions_save_attachments), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_save_attachments)); + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_remove_attachments"), NULL, + APP_MENU_CALLBACK (modest_ui_actions_remove_attachments), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_remove_attachments)); + + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_new_message"), "n", + APP_MENU_CALLBACK (modest_ui_actions_on_new_msg), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_new_msg)); + modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_addtocontacts"), NULL, + APP_MENU_CALLBACK (modest_ui_actions_add_to_contacts), + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts)); +} + void modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self) { @@ -3025,16 +3155,28 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self) gboolean contacts_to_add = FALSE; msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view)); - if (msg == NULL) return; - recipients = modest_tny_msg_get_all_recipients_list (msg); + if (msg == NULL) { + TnyHeader *header; + + header = modest_msg_view_window_get_header (self); + if (header == NULL) + return; + recipients = modest_tny_msg_header_get_all_recipients_list (header); + g_object_unref (header); + } else { + recipients = modest_tny_msg_get_all_recipients_list (msg); + g_object_unref (msg); + } if (recipients != NULL) { GtkWidget *picker_dialog; GtkWidget *selector; GSList *node; - gchar *selected; + gchar *selected = NULL; selector = hildon_touch_selector_new_text (); + g_object_ref (selector); + for (node = recipients; node != NULL; node = g_slist_next (node)) { if (!modest_address_book_has_address ((const gchar *) node->data)) { hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), @@ -3044,6 +3186,7 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self) } if (contacts_to_add) { + gint picker_result; picker_dialog = hildon_picker_dialog_new (GTK_WINDOW (self)); gtk_window_set_title (GTK_WINDOW (picker_dialog), _("mcen_me_viewer_addtocontacts")); @@ -3051,8 +3194,11 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self) hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (picker_dialog), HILDON_TOUCH_SELECTOR (selector)); - gtk_dialog_run (GTK_DIALOG (picker_dialog)); - selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)); + picker_result = gtk_dialog_run (GTK_DIALOG (picker_dialog)); + + if (picker_result == GTK_RESPONSE_OK) { + selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)); + } gtk_widget_destroy (picker_dialog); if (selected) @@ -3067,5 +3213,4 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self) } if (recipients) {g_slist_foreach (recipients, (GFunc) g_free, NULL); g_slist_free (recipients);} - g_object_unref (msg); }