X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=976ea1fc9f89df84a4c5dabc8e153a134b76acfe;hp=8fce36cc31612ad956330783fec182bcc2b39c76;hb=c7795718ea6b783cdcf7a641e8ce2dccea4b52d6;hpb=2fdc2098eafeff06bef3764fb77a94ac430e674f;ds=sidebyside diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 8fce36c..976ea1f 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -145,11 +145,16 @@ static void run_account_setup_wizard (ModestWindow *win) { ModestEasysetupWizardDialog *wizard; - + g_return_if_fail (MODEST_IS_WINDOW(win)); wizard = modest_easysetup_wizard_dialog_new (); gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win)); + + /* 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); */ + gtk_dialog_run (GTK_DIALOG (wizard)); gtk_widget_destroy (GTK_WIDGET (wizard)); } @@ -176,6 +181,8 @@ modest_ui_actions_on_about (GtkAction *action, ModestWindow *win) "uses the tinymail email framework written by Philip van Hoof")); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org"); + gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (win)); + gtk_window_set_modal (GTK_WINDOW (about), TRUE); gtk_dialog_run (GTK_DIALOG (about)); gtk_widget_destroy(about); @@ -269,10 +276,6 @@ headers_action_delete (TnyHeader *header, gpointer user_data) { modest_do_message_delete (header, win); - -/* refilter treemodel to hide marked-as-deleted rows */ -/* if (MODEST_IS_HEADER_VIEW (user_data)) */ -/* modest_header_view_refilter (MODEST_HEADER_VIEW (user_data)); */ } /** After deleing a message that is currently visible in a window, @@ -285,7 +288,10 @@ void modest_ui_actions_refresh_message_window_after_delete (ModestMsgViewWindow* modest_msg_view_window_first_message_selected (win)) { modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (win)); } else { - modest_msg_view_window_select_next_message (win); + if (!modest_msg_view_window_select_next_message (win)) { + gboolean ret_value; + g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value); + } } } @@ -394,6 +400,9 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) /* Remove each header. If it's a view window header_view == NULL */ do_headers_action (win, headers_action_delete, header_view); + /* refresh the header view (removing marked-as-deleted)*/ + modest_header_view_refilter (MODEST_HEADER_VIEW(header_view)); + if (MODEST_IS_MSG_VIEW_WINDOW (win)) { modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (win)); @@ -526,6 +535,11 @@ 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)); + + /* Don't make this a modal window, because secondary windows will then + * be unusable, freezing the UI: */ + /* gtk_window_set_modal (GTK_WINDOW (account_win), TRUE); */ modest_maemo_show_dialog_and_forget (GTK_WINDOW (win), account_win); } #else @@ -673,7 +687,7 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) /* Create and register edit window */ /* This is destroyed by TOOD. */ - msg_win = modest_msg_edit_window_new (msg, account_name); + msg_win = modest_msg_edit_window_new (msg, account_name, FALSE); mgr = modest_runtime_get_window_mgr (); modest_window_mgr_register_window (mgr, msg_win); @@ -761,7 +775,8 @@ open_msg_cb (ModestMailOperation *mail_op, run_account_setup_wizard(parent_win); goto cleanup; } - win = modest_msg_edit_window_new (msg, account); + win = modest_msg_edit_window_new (msg, account, TRUE); + } else { gchar *uid = modest_tny_folder_get_header_unique_id (header); @@ -1031,13 +1046,13 @@ reply_forward_cb (ModestMailOperation *mail_op, switch (rf_helper->action) { case ACTION_REPLY: new_msg = - modest_tny_msg_create_reply_msg (msg, from, signature, + modest_tny_msg_create_reply_msg (msg, header, from, signature, rf_helper->reply_forward_type, MODEST_TNY_MSG_REPLY_MODE_SENDER); break; case ACTION_REPLY_TO_ALL: new_msg = - modest_tny_msg_create_reply_msg (msg, from, signature, rf_helper->reply_forward_type, + modest_tny_msg_create_reply_msg (msg, header, from, signature, rf_helper->reply_forward_type, MODEST_TNY_MSG_REPLY_MODE_ALL); edit_type = MODEST_EDIT_TYPE_REPLY; break; @@ -1067,7 +1082,7 @@ reply_forward_cb (ModestMailOperation *mail_op, } /* Create and register the windows */ - msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name); + msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, FALSE); mgr = modest_runtime_get_window_mgr (); modest_window_mgr_register_window (mgr, msg_win); @@ -1089,7 +1104,6 @@ cleanup: if (account) g_object_unref (G_OBJECT (account)); /* g_object_unref (msg); */ - g_object_unref (header); free_reply_forward_helper (rf_helper); } @@ -1160,7 +1174,8 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) TnyList *header_list = NULL; ReplyForwardHelper *rf_helper = NULL; guint reply_forward_type; - gboolean continue_download; + gboolean continue_download = TRUE; + gboolean do_retrieve = TRUE; g_return_if_fail (MODEST_IS_WINDOW(win)); @@ -1174,17 +1189,20 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) if (!header_list) return; + reply_forward_type = + modest_conf_get_int (modest_runtime_get_conf (), + (action == ACTION_FORWARD) ? MODEST_CONF_FORWARD_TYPE : MODEST_CONF_REPLY_TYPE, + NULL); + /* Check that the messages have been previously downloaded */ - continue_download = download_uncached_messages (header_list, GTK_WINDOW (win), TRUE); + do_retrieve = (action == ACTION_FORWARD) || (reply_forward_type != MODEST_TNY_MSG_REPLY_TYPE_CITE); + if (do_retrieve) + continue_download = download_uncached_messages (header_list, GTK_WINDOW (win), TRUE); if (!continue_download) { g_object_unref (header_list); return; } - reply_forward_type = - modest_conf_get_int (modest_runtime_get_conf (), - (action == ACTION_FORWARD) ? MODEST_CONF_FORWARD_TYPE : MODEST_CONF_REPLY_TYPE, - NULL); /* We assume that we can only select messages of the same folder and that we reply all of them from the same account. In fact the interface currently only @@ -1212,46 +1230,49 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) if (!msg || !header) { if (msg) g_object_unref (msg); - if (header) - g_object_unref (header); g_printerr ("modest: no message found\n"); return; } else { reply_forward_cb (NULL, header, msg, rf_helper); } + if (header) + g_object_unref (header); } else { TnyHeader *header; TnyIterator *iter; - /* Retrieve messages */ - mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, - G_OBJECT(win), - modest_ui_actions_get_msgs_full_error_handler, - NULL); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); - /* Only reply/forward to one message */ iter = tny_list_create_iterator (header_list); header = TNY_HEADER (tny_iterator_get_current (iter)); g_object_unref (iter); if (header) { - modest_mail_operation_get_msg (mail_op, - header, - reply_forward_cb, - rf_helper); + /* Retrieve messages */ + if (do_retrieve) { + mail_op = modest_mail_operation_new_with_error_handling ( + MODEST_MAIL_OPERATION_TYPE_RECEIVE, + G_OBJECT(win), + modest_ui_actions_get_msgs_full_error_handler, + NULL); + modest_mail_operation_queue_add ( + modest_runtime_get_mail_operation_queue (), mail_op); + + modest_mail_operation_get_msg (mail_op, + header, + reply_forward_cb, + rf_helper); + /* Clean */ + g_object_unref(mail_op); + } else { + /* we put a ref here to prevent double unref as the reply + * forward callback unrefs the header at its end */ + reply_forward_cb (NULL, header, NULL, rf_helper); + } -/* modest_mail_operation_get_msgs_full (mail_op, */ -/* header_list, */ -/* reply_forward_cb, */ -/* rf_helper, */ -/* free_reply_forward_helper); */ g_object_unref (header); } - /* Clean */ - g_object_unref(mail_op); } /* Free */ @@ -1601,6 +1622,20 @@ modest_ui_actions_on_header_selected (ModestHeaderView *header_view, g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view)); + /* in the case the folder is empty, show the empty folder message and focus + * folder view */ + if (!header && gtk_widget_is_focus (GTK_WIDGET (header_view))) { + if (modest_header_view_is_empty (header_view)) { + TnyFolder *folder = modest_header_view_get_folder (header_view); + GtkWidget *folder_view = + modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (folder != NULL) + modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), folder, FALSE); + gtk_widget_grab_focus (GTK_WIDGET (folder_view)); + return; + } + } /* If no header has been selected then exit */ if (!header) return; @@ -1946,7 +1981,8 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) account_name = modest_account_mgr_get_default_account (account_mgr); if (!account_name) { - g_printerr ("modest: no account found\n"); + /* Run account setup wizard */ + run_account_setup_wizard(MODEST_WINDOW(edit_window)); return; } @@ -1962,9 +1998,8 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) (modest_runtime_get_account_store(), account_name)); if (!transport_account) { - g_printerr ("modest: no transport account found for '%s'\n", account_name); - g_free (account_name); - modest_msg_edit_window_free_msg_data (edit_window, data); + /* Run account setup wizard */ + run_account_setup_wizard(MODEST_WINDOW(edit_window)); return; } @@ -2643,18 +2678,21 @@ modest_ui_actions_on_cut (GtkAction *action, ModestWindow *window) { GtkWidget *focused_widget; + GtkClipboard *clipboard; + clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); focused_widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_EDITABLE (focused_widget)) { gtk_editable_cut_clipboard (GTK_EDITABLE(focused_widget)); + gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); } else if (GTK_IS_TEXT_VIEW (focused_widget)) { GtkTextBuffer *buffer; - GtkClipboard *clipboard; - clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE); gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); } else if (MODEST_IS_HEADER_VIEW (focused_widget)) { modest_header_view_cut_selection (MODEST_HEADER_VIEW (focused_widget)); } else if (MODEST_IS_FOLDER_VIEW (focused_widget)) { @@ -2674,15 +2712,22 @@ modest_ui_actions_on_copy (GtkAction *action, if (GTK_IS_LABEL (focused_widget)) { gtk_clipboard_set_text (clipboard, gtk_label_get_text (GTK_LABEL (focused_widget)), -1); + gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); } else if (GTK_IS_EDITABLE (focused_widget)) { gtk_editable_copy_clipboard (GTK_EDITABLE(focused_widget)); + gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); } else if (GTK_IS_HTML (focused_widget)) { gtk_html_copy (GTK_HTML (focused_widget)); + gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); } else if (GTK_IS_TEXT_VIEW (focused_widget)) { GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); gtk_text_buffer_copy_clipboard (buffer, clipboard); gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); } else if (MODEST_IS_HEADER_VIEW (focused_widget)) { TnyList *header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (focused_widget)); TnyIterator *iter = tny_list_create_iterator (header_list); @@ -3059,6 +3104,7 @@ headers_action_show_details (TnyHeader *header, dialog = modest_details_dialog_new_with_header (GTK_WINDOW (window), header); /* Run dialog */ + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); @@ -3078,6 +3124,7 @@ show_folder_details (TnyFolder *folder, dialog = modest_details_dialog_new_with_folder (window, folder); /* Run dialog */ + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); @@ -3764,6 +3811,7 @@ modest_ui_actions_on_move_to (GtkAction *action, /* Create and run the dialog */ 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)); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); result = gtk_dialog_run (GTK_DIALOG(dialog)); g_object_ref (tree_view); gtk_widget_destroy (dialog); @@ -3882,6 +3930,7 @@ modest_ui_actions_on_settings (GtkAction *action, dialog = modest_platform_get_global_settings_dialog (); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (win)); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog));