X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodest-ui-actions.c;h=8b29b6ed3bb42b9d00e132e25ee16f5cdffc179a;hb=94a4612a68cf9129d80418e40d177911297b76e7;hp=022ed9cf1d337b7b194b2a3a439fd254113db6df;hpb=d70b96a659ea78d646664c5c3586d60cea899f86;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 022ed9c..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 { @@ -203,13 +203,14 @@ msgs_already_deleted_from_server (TnyList *headers, const TnyFolderStore *src_fo * 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, *dialog; + gboolean result = FALSE; + GtkWindow *dialog, *wizard; + gint dialog_response; /* Show the easy-setup wizard: */ - dialog = modest_window_mgr_get_modal_dialog (modest_runtime_get_window_mgr()); + dialog = modest_window_mgr_get_modal (modest_runtime_get_window_mgr()); if (dialog && MODEST_IS_EASYSETUP_WIZARD_DIALOG(dialog)) { /* old wizard is active already; */ @@ -218,26 +219,9 @@ modest_run_account_setup_wizard (ModestWindow *win) } - /* there is no such wizard yet */ - - wizard = GTK_DIALOG(modest_easysetup_wizard_dialog_new ()); - if (!wizard) { - g_printerr ("modest: failed to create easysetup wizard\n"); - return FALSE; - } - - modest_window_mgr_set_modal_dialog - (modest_runtime_get_window_mgr(), GTK_DIALOG(wizard)); - - - /* there is no such wizard yet */ - wizard = GTK_DIALOG(modest_easysetup_wizard_dialog_new ()); - modest_window_mgr_set_modal_dialog (modest_runtime_get_window_mgr(), - GTK_DIALOG(wizard)); - - /* make it non-modal; if though we register it as a modal dialog above - * apparently, making it modal *at all* gives hangs -- FIXME: check this*/ - gtk_window_set_modal (GTK_WINDOW(dialog), FALSE); + /* 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 @@ -248,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_modal_dialog - (modest_runtime_get_window_mgr(), NULL); - return result; } @@ -338,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, @@ -682,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; @@ -777,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)); @@ -911,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); @@ -1172,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 @@ -1184,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) { @@ -1324,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; } @@ -2168,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); @@ -2206,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; } @@ -2224,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; } @@ -2246,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: */ @@ -2779,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); @@ -2797,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 (); @@ -2806,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); @@ -2851,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")); @@ -2864,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); @@ -3900,6 +3902,8 @@ modest_ui_actions_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) == @@ -3913,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 @@ -4154,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 = @@ -4175,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); @@ -4224,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)); @@ -4253,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)); }