X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=c25a28761d6139a9d5b6c584708cf0130cff0127;hp=be1d2a0ce1c6d2dc02215ccaa0959eb0423ce436;hb=0e7f532ff5a83941dec7a9ab31affbca1a65baa6;hpb=a9eaeebe014fc78e453b46935cf8cd4c80dd4273 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index be1d2a0..c25a287 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -48,6 +48,7 @@ #ifdef MODEST_PLATFORM_MAEMO #include "maemo/modest-osso-state-saving.h" +#include "maemo/modest-maemo-utils.h" #endif /* MODEST_PLATFORM_MAEMO */ #include "widgets/modest-ui-constants.h" @@ -253,8 +254,8 @@ headers_action_delete (TnyHeader *header, g_object_unref (G_OBJECT (mail_op)); /* refilter treemodel to hide marked-as-deleted rows */ - if (MODEST_IS_HEADER_VIEW (user_data)) - modest_header_view_refilter (MODEST_HEADER_VIEW (user_data)); +/* if (MODEST_IS_HEADER_VIEW (user_data)) */ +/* modest_header_view_refilter (MODEST_HEADER_VIEW (user_data)); */ } void @@ -329,9 +330,29 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) if (response == GTK_RESPONSE_OK) { - ModestMainWindow *main_window; - ModestWindowMgr *mgr; - + ModestWindow *main_window = NULL; + ModestWindowMgr *mgr = NULL; + GtkTreeModel *model = NULL; + GtkTreeSelection *sel = NULL; + GList *sel_list = NULL, *tmp = NULL; + GtkTreeRowReference *row_reference = NULL; + GtkTreePath *next_path = NULL; + + /* Find last selected row */ + if (MODEST_IS_MAIN_WINDOW (win)) { + model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view)); + sel_list = gtk_tree_selection_get_selected_rows (sel, &model); + for (tmp=sel_list; tmp; tmp=tmp->next) { + if (tmp->next == NULL) { + next_path = gtk_tree_path_copy((GtkTreePath *) tmp->data); + gtk_tree_path_next (next_path); + row_reference = gtk_tree_row_reference_new (model, next_path); + gtk_tree_path_free (next_path); + } + } + } + /* Remove each header. If it's a view window header_view == NULL */ do_headers_action (win, headers_action_delete, header_view); @@ -343,24 +364,34 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) } else { modest_msg_view_window_select_next_message (MODEST_MSG_VIEW_WINDOW (win)); } + + /* Get main window */ + mgr = modest_runtime_get_window_mgr (); + main_window = modest_window_mgr_get_main_window (mgr); + } + else { + /* Move cursor to next row */ + main_window = win; + + /* Select next row */ + if (gtk_tree_row_reference_valid (row_reference)) { + next_path = gtk_tree_row_reference_get_path (row_reference); + gtk_tree_selection_select_path (sel, next_path); + gtk_tree_path_free (next_path); + } + if (row_reference != NULL) + gtk_tree_row_reference_free (row_reference); } - /* Refilter header view model, if main window still exists */ - mgr = modest_runtime_get_window_mgr (); - main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (mgr)); - if (main_window) { - GtkWidget *widget; - - widget = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_HEADER_VIEW); - modest_header_view_refilter (MODEST_HEADER_VIEW (widget)); + /* Update toolbar dimming state */ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window)); - /* Update toolbar dimming state */ - modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window)); - } + /* Free */ + g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL); + g_list_free (sel_list); } - /* free */ + /* Free*/ g_free(message); g_free(desc); g_object_unref (header_list); @@ -369,7 +400,7 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) -/* delete either message or folder, based on what has focus */ +/* delete either message or folder, based on where we are */ void modest_ui_actions_on_delete_message_or_folder (GtkAction *action, ModestWindow *win) { @@ -378,14 +409,6 @@ modest_ui_actions_on_delete_message_or_folder (GtkAction *action, ModestWindow * /* Check first if the header view has the focus */ if (MODEST_IS_MAIN_WINDOW (win)) { GtkWidget *w; - - w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), - MODEST_WIDGET_TYPE_HEADER_VIEW); - if (gtk_widget_is_focus (w)) { - modest_ui_actions_on_delete_message (action, win); - return; - } - w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), MODEST_WIDGET_TYPE_FOLDER_VIEW); if (gtk_widget_is_focus (w)) { @@ -393,8 +416,7 @@ modest_ui_actions_on_delete_message_or_folder (GtkAction *action, ModestWindow * return; } } - g_warning ("BUG: delete toolbar button pressed with neither headerview nor folderview " - "having focus"); + modest_ui_actions_on_delete_message (action, win); } @@ -471,9 +493,7 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win) } else { /* Show the list of accounts: */ GtkDialog *account_win = GTK_DIALOG(modest_account_view_window_new ()); - gtk_window_set_transient_for (GTK_WINDOW (account_win), GTK_WINDOW(win)); - gtk_dialog_run (account_win); - gtk_widget_destroy (GTK_WIDGET(account_win)); + modest_maemo_show_dialog_and_forget (GTK_WINDOW (win), account_win); } #else GtkWidget *dialog, *label; @@ -988,8 +1008,10 @@ reply_forward_cb (ModestMailOperation *mail_op, ModestWindowMgr *mgr = NULL; gchar *signature = NULL; - /* If there was any error */ - if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) + /* If there was any error. The mail operation could be NULL, + this means that we already have the message downloaded and + that we didn't do a mail operation to retrieve it */ + if (mail_op && !modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) return; g_return_if_fail (user_data != NULL); @@ -1081,7 +1103,8 @@ cleanup: * of them are currently downloaded */ static gboolean -download_uncached_messages (TnyList *header_list, GtkWindow *win) +download_uncached_messages (TnyList *header_list, GtkWindow *win, + gboolean reply_fwd) { TnyIterator *iter; gboolean retval; @@ -1108,11 +1131,15 @@ download_uncached_messages (TnyList *header_list, GtkWindow *win) retval = TRUE; if (uncached_messages > 0) { GtkResponseType response; - response = - modest_platform_run_confirmation_dialog (GTK_WINDOW (win), - ngettext("mcen_nc_get_msg", - "mcen_nc_get_msgs", - uncached_messages)); + if (reply_fwd) + response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win), + _("emev_nc_include_original")); + else + response = + modest_platform_run_confirmation_dialog (GTK_WINDOW (win), + ngettext("mcen_nc_get_msg", + "mcen_nc_get_msgs", + uncached_messages)); if (response == GTK_RESPONSE_CANCEL) retval = FALSE; else { @@ -1149,7 +1176,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) return; /* Check that the messages have been previously downloaded */ - continue_download = download_uncached_messages (header_list, GTK_WINDOW (win)); + continue_download = download_uncached_messages (header_list, GTK_WINDOW (win), TRUE); if (!continue_download) { g_object_unref (header_list); return; @@ -1495,7 +1522,7 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); - if (TNY_IS_FOLDER (folder_store)) { + if (folder_store && TNY_IS_FOLDER (folder_store)) { header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), MODEST_WIDGET_TYPE_HEADER_VIEW); @@ -1509,7 +1536,9 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) folder_refreshed_cb, MODEST_MAIN_WINDOW (win)); } - g_object_unref (folder_store); + + if (folder_store) + g_object_unref (folder_store); } /* Refresh the active account */ @@ -1810,7 +1839,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi gchar *account_name, *from; ModestAccountMgr *account_mgr; gchar *info_text = NULL; - TnyMsg *new_draft = NULL; g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window)); @@ -1847,18 +1875,19 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi mail_operation = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_INFO, G_OBJECT(edit_window)); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation); - new_draft = modest_mail_operation_save_to_drafts (mail_operation, - transport_account, - data->draft_msg, - from, - data->to, - data->cc, - data->bcc, - data->subject, - data->plain_body, - data->html_body, - data->attachments, - data->priority_flags); + modest_mail_operation_save_to_drafts (mail_operation, + transport_account, + data->draft_msg, + edit_window, + from, + data->to, + data->cc, + data->bcc, + data->subject, + data->plain_body, + data->html_body, + data->attachments, + data->priority_flags); /* Frees */ g_free (from); g_free (account_name); @@ -1867,10 +1896,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi modest_msg_edit_window_free_msg_data (edit_window, data); - modest_msg_edit_window_set_draft (edit_window, new_draft); - if (new_draft != NULL) - g_object_unref (new_draft); - info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts")); modest_platform_information_banner (NULL, NULL, info_text); g_free (info_text); @@ -2145,6 +2170,7 @@ modest_ui_actions_new_folder_error_handler (ModestMailOperation *mail_op, modest_mail_operation_get_error (mail_op)->message);*/ } + void modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_window) { @@ -2192,6 +2218,14 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_windo parent_folder, (const gchar *) folder_name); if (new_folder) { + if (main_window) { + folder_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (folder_view) + modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), + new_folder, TRUE); + } + g_object_unref (new_folder); finished = TRUE; } @@ -2591,6 +2625,8 @@ modest_ui_actions_on_copy (GtkAction *action, gtk_clipboard_set_text (clipboard, gtk_label_get_text (GTK_LABEL (focused_widget)), -1); } else if (GTK_IS_EDITABLE (focused_widget)) { gtk_editable_copy_clipboard (GTK_EDITABLE(focused_widget)); + } else if (GTK_IS_HTML (focused_widget)) { + gtk_html_copy (GTK_HTML (focused_widget)); } else if (GTK_IS_TEXT_VIEW (focused_widget)) { GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); @@ -2614,7 +2650,7 @@ modest_ui_actions_on_copy (GtkAction *action, /* Check that the messages have been previously downloaded */ gboolean continue_download = TRUE; if (ask) - continue_download = download_uncached_messages (header_list, GTK_WINDOW (window)); + continue_download = download_uncached_messages (header_list, GTK_WINDOW (window), FALSE); if (continue_download) modest_header_view_copy_selection (MODEST_HEADER_VIEW (focused_widget)); g_object_unref (header_list); @@ -3022,16 +3058,12 @@ void modest_ui_actions_toggle_folders_view (GtkAction *action, ModestMainWindow *main_window) { - ModestConf *conf; - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - conf = modest_runtime_get_conf (); - - if (modest_main_window_get_style (main_window) == MODEST_MAIN_WINDOW_STYLE_SPLIT) - modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE); - else + if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SPLIT); + else + modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE); } void @@ -3095,7 +3127,7 @@ modest_ui_actions_on_check_names (GtkAction *action, ModestMsgEditWindow *window static GtkWidget* -create_move_to_dialog (ModestWindow *win, +create_move_to_dialog (GtkWindow *win, GtkWidget *folder_view, GtkWidget **tree_view) { @@ -3130,6 +3162,8 @@ create_move_to_dialog (ModestWindow *win, modest_folder_view_update_model (MODEST_FOLDER_VIEW (*tree_view), TNY_ACCOUNT_STORE (modest_runtime_get_account_store ())); + modest_folder_view_show_non_move_folders(MODEST_FOLDER_VIEW (*tree_view), FALSE); + gtk_container_add (GTK_CONTAINER (scroll), *tree_view); /* Add scroll to dialog */ @@ -3453,9 +3487,10 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, MODEST_WIDGET_TYPE_HEADER_VIEW); /* Create and run the dialog */ - dialog = create_move_to_dialog (MODEST_WINDOW (win), folder_view, &tree_view); + dialog = create_move_to_dialog (GTK_WINDOW(win), folder_view, &tree_view); modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view)); result = gtk_dialog_run (GTK_DIALOG(dialog)); + modest_folder_view_show_non_move_folders(MODEST_FOLDER_VIEW (tree_view), TRUE); g_object_ref (tree_view); /* We do this to save an indentation level ;-) */ @@ -3566,8 +3601,9 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action, folder_view = NULL; /* Create and run the dialog */ - dialog = create_move_to_dialog (MODEST_WINDOW (win), folder_view, &tree_view); + dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view, &tree_view); result = gtk_dialog_run (GTK_DIALOG(dialog)); + modest_folder_view_show_non_move_folders(MODEST_FOLDER_VIEW (tree_view), TRUE); if (result == GTK_RESPONSE_ACCEPT) { TnyFolderStore *folder_store; @@ -3778,8 +3814,10 @@ modest_ui_actions_on_help (GtkAction *action, help_id = "applications_email_archive"; break; default: - help_id = NULL; + help_id = "applications_email_mainview"; } + } else { + help_id = "applications_email_mainview"; } g_object_unref (folder_store); } else {