X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=8b29b6ed3bb42b9d00e132e25ee16f5cdffc179a;hp=2e78faa4c9e4939007804a4a1e89702dc968ed08;hb=94a4612a68cf9129d80418e40d177911297b76e7;hpb=435eb700b2407bddf6cd66cd7b5264a4d349a50b diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 2e78faa..8b29b6e 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -104,8 +104,8 @@ typedef struct _ReplyForwardHelper { } ReplyForwardHelper; typedef struct _MoveToHelper { - ModestMailOperation *mail_op; - TnyFolder *folder; + GtkTreeRowReference *reference; + GtkWidget *banner; } MoveToHelper; typedef struct _PasteAsAttachmentHelper { @@ -197,32 +197,32 @@ msgs_already_deleted_from_server (TnyList *headers, const TnyFolderStore *src_fo return (src_is_pop && !uncached_msgs); } + +/* FIXME: this should be merged with the similar code in modest-account-view-window */ /* Show the account creation wizard dialog. * returns: TRUE if an account was created. FALSE if the user cancelled. */ gboolean -modest_run_account_setup_wizard (ModestWindow *win) +modest_ui_actions_run_account_setup_wizard (ModestWindow *win) { - gboolean result = FALSE; - GtkDialog *wizard; - - wizard = modest_window_mgr_get_easysetup_dialog - (modest_runtime_get_window_mgr()); - if (wizard) { - /* old wizard is active already; present it and - * act as if the user cancelled the non-existing - * new one + gboolean result = FALSE; + GtkWindow *dialog, *wizard; + gint dialog_response; + + /* Show the easy-setup wizard: */ + dialog = modest_window_mgr_get_modal (modest_runtime_get_window_mgr()); + if (dialog && MODEST_IS_EASYSETUP_WIZARD_DIALOG(dialog)) { + /* old wizard is active already; */ - printf ("wizard already active\n"); + gtk_window_present (GTK_WINDOW(dialog)); return FALSE; - } else { - /* there is no such wizard yet */ - wizard = GTK_DIALOG(modest_easysetup_wizard_dialog_new ()); - modest_window_mgr_set_easysetup_dialog - (modest_runtime_get_window_mgr(), GTK_DIALOG(wizard)); - } - + } + + /* there is no such wizard yet */ + wizard = GTK_WINDOW (modest_easysetup_wizard_dialog_new ()); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), wizard); + /* always present a main window in the background * we do it here, so we cannot end up with to wizards (as this * function might be called in modest_window_mgr_get_main_window as well */ @@ -232,28 +232,19 @@ modest_run_account_setup_wizard (ModestWindow *win) /* make sure the mainwindow is visible */ gtk_widget_show_all (GTK_WIDGET(win)); gtk_window_present (GTK_WINDOW(win)); - - gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win)); + dialog_response = gtk_dialog_run (GTK_DIALOG (wizard)); + gtk_widget_destroy (GTK_WIDGET (wizard)); + if (gtk_events_pending ()) + gtk_main_iteration (); - /* Don't make this a modal window, because secondary windows will then - * be unusable, freezing the UI: */ - /* gtk_window_set_modal (GTK_WINDOW (wizard), TRUE); */ - - gint dialog_response = gtk_dialog_run (GTK_DIALOG (wizard)); - if (dialog_response == GTK_RESPONSE_CANCEL) + if (dialog_response == GTK_RESPONSE_CANCEL) { result = FALSE; - else { + } else { /* Check whether an account was created: */ result = modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE); } - gtk_widget_destroy (GTK_WIDGET (wizard)); - - /* clear it from the window mgr */ - modest_window_mgr_set_easysetup_dialog - (modest_runtime_get_window_mgr(), NULL); - return result; } @@ -322,6 +313,35 @@ get_selected_headers (ModestWindow *win) return NULL; } +static GtkTreeRowReference * +get_next_after_selected_headers (ModestHeaderView *header_view) +{ + GtkTreeSelection *sel; + GList *selected_rows, *node; + GtkTreePath *path; + GtkTreeRowReference *result; + GtkTreeModel *model; + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view)); + selected_rows = gtk_tree_selection_get_selected_rows (sel, NULL); + + if (selected_rows == NULL) + return NULL; + + node = g_list_last (selected_rows); + path = gtk_tree_path_copy ((GtkTreePath *) node->data); + gtk_tree_path_next (path); + + result = gtk_tree_row_reference_new (model, path); + + gtk_tree_path_free (path); + g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL); + g_list_free (selected_rows); + + return result; +} + static void headers_action_mark_as_read (TnyHeader *header, ModestWindow *win, @@ -666,21 +686,22 @@ modest_ui_actions_on_add_to_contacts (GtkAction *action, ModestWindow *win) } void -modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win) +modest_ui_actions_on_accounts (GtkAction *action, + ModestWindow *win) { /* This is currently only implemented for Maemo */ #ifdef MODEST_PLATFORM_MAEMO /* Defined in config.h */ - if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) { - modest_run_account_setup_wizard (win); + if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE)) { + modest_ui_actions_run_account_setup_wizard (win); return; - } 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)); + } else { + /* Show the list of accounts */ + GtkWindow *account_win = GTK_WINDOW (modest_account_view_window_new ()); + gtk_window_set_transient_for (account_win, GTK_WINDOW (win)); - /* The accounts dialog must be modal */ - gtk_window_set_modal (GTK_WINDOW (account_win), TRUE); - modest_maemo_show_dialog_and_forget (GTK_WINDOW (win), account_win); + /* The accounts dialog must be modal */ + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), account_win); + modest_maemo_show_dialog_and_forget (GTK_WINDOW (win), GTK_DIALOG (account_win)); } #else GtkWidget *dialog, *label; @@ -761,9 +782,8 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) /* if there are no accounts yet, just show the wizard */ if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE)) { - const gboolean created = modest_run_account_setup_wizard (win); - if (!created) - return; + if (!modest_ui_actions_run_account_setup_wizard (win)) + return; } account_name = g_strdup (modest_window_get_active_account (win)); @@ -895,8 +915,7 @@ open_msg_cb (ModestMailOperation *mail_op, TnyHeader *header, TnyMsg *msg, gpoi (folder_type == TNY_FOLDER_TYPE_OUTBOX)) { /* we cannot edit without a valid account... */ if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) { - const gboolean created = modest_run_account_setup_wizard(parent_win); - if (!created) + if (!modest_ui_actions_run_account_setup_wizard(parent_win)) goto cleanup; } win = modest_msg_edit_window_new (msg, account, TRUE); @@ -1156,6 +1175,7 @@ reply_forward_cb (ModestMailOperation *mail_op, TnyHeader *header, TnyMsg *msg, TnyAccount *account = NULL; ModestWindowMgr *mgr = NULL; gchar *signature = NULL; + gboolean use_signature; /* If there was any error. The mail operation could be NULL, this means that we already have the message downloaded and @@ -1168,13 +1188,9 @@ reply_forward_cb (ModestMailOperation *mail_op, TnyHeader *header, TnyMsg *msg, from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), rf_helper->account_name); - if (modest_account_mgr_get_bool (modest_runtime_get_account_mgr(), - rf_helper->account_name, - MODEST_ACCOUNT_USE_SIGNATURE, FALSE)) { - signature = modest_account_mgr_get_string (modest_runtime_get_account_mgr (), - rf_helper->account_name, - MODEST_ACCOUNT_SIGNATURE, FALSE); - } + signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr(), + rf_helper->account_name, + &use_signature); /* Create reply mail */ switch (rf_helper->action) { @@ -1308,8 +1324,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) /* we need an account when editing */ if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) { - const gboolean created = modest_run_account_setup_wizard (win); - if (!created) + if (!modest_ui_actions_run_account_setup_wizard (win)) return; } @@ -1855,6 +1870,11 @@ modest_ui_actions_on_header_activated (ModestHeaderView *header_view, if (!header) return; + if (modest_header_view_count_selected_headers (header_view) > 1) { + hildon_banner_show_information (NULL, NULL, _("mcen_ib_select_one_message")); + return; + } + /* headers = tny_simple_list_new (); */ /* tny_list_prepend (headers, G_OBJECT (header)); */ @@ -2147,6 +2167,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi data->plain_body, data->html_body, data->attachments, + data->images, data->priority_flags); /* Frees */ g_free (from); @@ -2158,6 +2179,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts")); modest_platform_information_banner (NULL, NULL, info_text); + modest_msg_edit_window_reset_modified (edit_window); g_free (info_text); } @@ -2184,8 +2206,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) if (!account_name) { /* Run account setup wizard */ - const gboolean created = modest_run_account_setup_wizard(MODEST_WINDOW(edit_window)); - if (!created) + if (!modest_ui_actions_run_account_setup_wizard (MODEST_WINDOW(edit_window))) return; } @@ -2202,8 +2223,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) account_name)); if (!transport_account) { /* Run account setup wizard */ - const gboolean created = modest_run_account_setup_wizard(MODEST_WINDOW(edit_window)); - if (!created) + if (!modest_ui_actions_run_account_setup_wizard(MODEST_WINDOW(edit_window))) return; } @@ -2224,6 +2244,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) data->plain_body, data->html_body, data->attachments, + data->images, data->priority_flags); /* Free data: */ @@ -2391,10 +2412,9 @@ modest_ui_actions_new_folder_error_handler (ModestMailOperation *mail_op, ModestMainWindow *window = MODEST_MAIN_WINDOW (user_data); const GError *error = modest_mail_operation_get_error (mail_op); - if(error) - { + if(error) { modest_platform_information_banner (GTK_WIDGET (window), NULL, - modest_mail_operation_get_error (mail_op)->message); + _("mail_in_ui_folder_create_error")); } } @@ -2758,7 +2778,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store, gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(main_window)); - gchar *server_name = modest_server_account_get_hostname ( + gchar *server_name = modest_account_mgr_get_server_account_hostname ( modest_runtime_get_account_mgr(), server_account_name); if (!server_name) {/* This happened once, though I don't know why. murrayc. */ g_warning("%s: Could not get server name for server account '%s'", __FUNCTION__, server_account_name); @@ -2776,7 +2796,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store, server_name = NULL; /* username: */ - gchar *initial_username = modest_server_account_get_username ( + gchar *initial_username = modest_account_mgr_get_server_account_username ( modest_runtime_get_account_mgr(), server_account_name); GtkWidget *entry_username = gtk_entry_new (); @@ -2785,7 +2805,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store, /* Dim this if a connection has ever succeeded with this username, * as per the UI spec: */ const gboolean username_known = - modest_server_account_get_username_has_succeeded( + modest_account_mgr_get_server_account_username_has_succeeded( modest_runtime_get_account_mgr(), server_account_name); gtk_widget_set_sensitive (entry_username, !username_known); @@ -2830,6 +2850,9 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store, gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_password, TRUE, FALSE, 0); #endif /* MODEST_PLATFORM_MAEMO */ + + if (initial_username != NULL) + gtk_widget_grab_focus (GTK_WIDGET (entry_password)); /* This is not in the Maemo UI spec: remember_pass_check = gtk_check_button_new_with_label (_("Remember password")); @@ -2843,7 +2866,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store, if (username) { *username = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_username))); - modest_server_account_set_username ( + modest_account_mgr_set_server_account_username ( modest_runtime_get_account_mgr(), server_account_name, *username); @@ -3141,10 +3164,11 @@ modest_ui_actions_on_paste (GtkAction *action, gint response = 0; /* Ask for user confirmation */ - response = msgs_move_to_confirmation (GTK_WINDOW (window), - TNY_FOLDER (folder_store), - delete, - data); + response = + modest_ui_actions_msgs_move_to_confirmation (GTK_WINDOW (window), + TNY_FOLDER (folder_store), + delete, + data); if (response == GTK_RESPONSE_OK) { /* Launch notification */ @@ -3828,10 +3852,10 @@ has_retrieved_msgs (TnyList *list) * drag_and_drop_from_header_view (for d&d in modest_folder_view.c) */ gint -msgs_move_to_confirmation (GtkWindow *win, - TnyFolder *dest_folder, - gboolean delete, - TnyList *headers) +modest_ui_actions_msgs_move_to_confirmation (GtkWindow *win, + TnyFolder *dest_folder, + gboolean delete, + TnyList *headers) { gint response = GTK_RESPONSE_OK; @@ -3878,6 +3902,8 @@ msgs_move_to_confirmation (GtkWindow *win, static void move_to_cb (ModestMailOperation *mail_op, gpointer user_data) { + MoveToHelper *helper = (MoveToHelper *) user_data; + /* Note that the operation could have failed, in that case do nothing */ if (modest_mail_operation_get_status (mail_op) == @@ -3891,12 +3917,26 @@ move_to_cb (ModestMailOperation *mail_op, gpointer user_data) if (!modest_msg_view_window_select_previous_message (self)) /* No more messages to view, so close this window */ modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self)); + } else if (MODEST_IS_MAIN_WINDOW (object) && helper->reference != NULL) { + GtkWidget *header_view; + GtkTreePath *path; + GtkTreeSelection *sel; + + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object), + MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW); + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view)); + path = gtk_tree_row_reference_get_path (helper->reference); + gtk_tree_selection_select_path (sel, path); + gtk_tree_path_free (path); } g_object_unref (object); } /* Close the "Pasting" information banner */ - gtk_widget_destroy (GTK_WIDGET(user_data)); + gtk_widget_destroy (GTK_WIDGET(helper->banner)); + if (helper->reference != NULL) + gtk_tree_row_reference_free (helper->reference); + g_free (helper); } void @@ -4132,12 +4172,19 @@ modest_ui_actions_xfer_messages_from_move_to (TnyFolderStore *dst_folder, return; } - GtkWidget *inf_note; - inf_note = modest_platform_animation_banner (GTK_WIDGET (win), NULL, - _CS("ckct_nw_pasting")); - if (inf_note != NULL) { - gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE); - gtk_widget_show (GTK_WIDGET(inf_note)); + MoveToHelper *helper = g_new0 (MoveToHelper, 1); + helper->banner = modest_platform_animation_banner (GTK_WIDGET (win), NULL, + _CS("ckct_nw_pasting")); + if (helper->banner != NULL) { + gtk_window_set_modal (GTK_WINDOW(helper->banner), FALSE); + gtk_widget_show (GTK_WIDGET(helper->banner)); + } + + if (MODEST_IS_MAIN_WINDOW (win)) { + GtkWidget *header_view = + modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW); + helper->reference = get_next_after_selected_headers (MODEST_HEADER_VIEW (header_view)); } ModestMailOperation *mail_op = @@ -4153,7 +4200,7 @@ modest_ui_actions_xfer_messages_from_move_to (TnyFolderStore *dst_folder, TNY_FOLDER (dst_folder), TRUE, move_to_cb, - inf_note); + helper); g_object_unref (G_OBJECT (mail_op)); g_object_unref (headers); @@ -4202,12 +4249,12 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, } if (do_xfer) { - GtkWidget *inf_note; - inf_note = modest_platform_animation_banner (GTK_WIDGET (win), NULL, - _CS("ckct_nw_pasting")); - if (inf_note != NULL) { - gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE); - gtk_widget_show (GTK_WIDGET(inf_note)); + MoveToHelper *helper = g_new0 (MoveToHelper, 1); + helper->banner = modest_platform_animation_banner (GTK_WIDGET (win), NULL, + _CS("ckct_nw_pasting")); + if (helper->banner != NULL) { + gtk_window_set_modal (GTK_WINDOW(helper->banner), FALSE); + gtk_widget_show (GTK_WIDGET(helper->banner)); } /* Clean folder on header view before moving it */ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view)); @@ -4231,7 +4278,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, dst_folder, TRUE, move_to_cb, - inf_note); + helper); /* Unref mail operation */ g_object_unref (G_OBJECT (mail_op)); }