static void reply_forward (ReplyForwardAction action, ModestWindow *win);
-static gchar* ask_for_folder_name (GtkWindow *parent_window, const gchar *title);
-
static void _on_send_receive_progress_changed (ModestMailOperation *mail_op,
ModestMailOperationState *state,
void
modest_ui_actions_on_quit (GtkAction *action, ModestWindow *win)
{
- #ifdef MODEST_PLATFORM_MAEMO
+#ifdef MODEST_PLATFORM_MAEMO
modest_osso_save_state();
- #endif /* MODEST_PLATFORM_MAEMO */
-
+#endif /* MODEST_PLATFORM_MAEMO */
+
+ /* FIXME: we need to cancel all actions/threads here,
+ so we really quit */
+
gtk_main_quit ();
}
/* Show the window: */
gtk_window_set_transient_for (GTK_WINDOW (specific_window), GTK_WINDOW (win));
gtk_window_set_modal (GTK_WINDOW (specific_window), TRUE);
- gtk_widget_show (specific_window);
+ gtk_widget_show (specific_window);
- /* Save changes when the window is hidden: */
+ /* Save changes when the window is hidden: */
g_signal_connect (specific_window, "hide",
G_CALLBACK (on_smtp_servers_window_hide), win);
#endif /* MODEST_PLATFORM_MAEMO */
void
modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
{
- ModestWindow *msg_win;
+ ModestWindow *msg_win = NULL;
TnyMsg *msg = NULL;
TnyFolder *folder = NULL;
gchar *account_name = NULL;
g_free (account_name);
g_free (from_str);
g_free (blank_and_signature);
+ if (msg_win)
+ g_object_unref (msg_win);
if (account)
g_object_unref (G_OBJECT(account));
if (msg)
if (win != NULL) {
mgr = modest_runtime_get_window_mgr ();
modest_window_mgr_register_window (mgr, win);
+ g_object_unref (win);
gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent_win));
gtk_widget_show_all (GTK_WIDGET(win));
}
cleanup:
/* Free */
g_free(account);
+ g_object_unref (parent_win);
g_object_unref (msg);
g_object_unref (folder);
- g_object_unref (header);
}
/*
modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
error->message);
+ g_object_unref (win);
}
}
static void
_modest_ui_actions_open (TnyList *headers, ModestWindow *win)
{
- ModestWindowMgr *mgr;
- TnyIterator *iter;
- ModestMailOperation *mail_op;
- TnyList *not_opened_headers;
-
+ ModestWindowMgr *mgr = NULL;
+ TnyIterator *iter = NULL;
+ ModestMailOperation *mail_op1 = NULL;
+ ModestMailOperation *mail_op2 = NULL;
+ TnyList *not_opened_headers = NULL;
+ TnyList *not_opened_cached_headers = NULL;
+ TnyHeaderFlags flags;
+
/* Look if we already have a message view for each header. If
true, then remove the header from the list of headers to
open */
mgr = modest_runtime_get_window_mgr ();
iter = tny_list_create_iterator (headers);
not_opened_headers = tny_simple_list_new ();
+ not_opened_cached_headers = tny_simple_list_new ();
while (!tny_iterator_is_done (iter)) {
ModestWindow *window;
TnyHeader *header;
header = TNY_HEADER (tny_iterator_get_current (iter));
+ flags = tny_header_get_flags (header);
window = modest_window_mgr_find_window_by_header (mgr, header);
+
/* Do not open again the message and present the
window to the user */
if (window)
gtk_window_present (GTK_WINDOW (window));
- else
+ else if (!(flags & TNY_HEADER_FLAG_CACHED))
tny_list_append (not_opened_headers, G_OBJECT (header));
-
+ /* Check if msg has already been retreived */
+ else
+ tny_list_append (not_opened_cached_headers, G_OBJECT (header));
+
g_object_unref (header);
tny_iterator_next (iter);
}
- /* Open each message */
- 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_msgs_full (mail_op,
- not_opened_headers,
- open_msg_cb,
- NULL,
- NULL);
+ /* Open each uncached message */
+ if (tny_list_get_length (not_opened_headers) > 0) {
+ mail_op1 = 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_op1);
+ if (tny_list_get_length (not_opened_headers) > 1) {
+ modest_mail_operation_get_msgs_full (mail_op1,
+ not_opened_headers,
+ open_msg_cb,
+ NULL,
+ NULL);
+ } else {
+ TnyIterator *iter = tny_list_create_iterator (not_opened_headers);
+ TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+ modest_mail_operation_get_msg (mail_op1, header, open_msg_cb, NULL);
+ g_object_unref (header);
+ g_object_unref (iter);
+ }
+ }
+
+ /* Open each cached message */
+ if (tny_list_get_length (not_opened_cached_headers) > 0) {
+ mail_op2 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_OPEN,
+ G_OBJECT (win),
+ modest_ui_actions_get_msgs_full_error_handler,
+ NULL);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op2);
+ if (tny_list_get_length (not_opened_cached_headers) > 1) {
+ modest_mail_operation_get_msgs_full (mail_op2,
+ not_opened_headers,
+ open_msg_cb,
+ NULL,
+ NULL);
+ } else {
+ TnyIterator *iter = tny_list_create_iterator (not_opened_cached_headers);
+ TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+ modest_mail_operation_get_msg (mail_op2, header, open_msg_cb, NULL);
+ g_object_unref (header);
+ g_object_unref (iter);
+ }
+ }
+
/* Clean */
- g_object_unref (not_opened_headers);
- g_object_unref (iter);
- g_object_unref (mail_op);
+ if (not_opened_headers != NULL)
+ g_object_unref (not_opened_headers);
+ if (not_opened_cached_headers != NULL)
+ g_object_unref (not_opened_cached_headers);
+ if (iter != NULL)
+ g_object_unref (iter);
+ if (mail_op1 != NULL)
+ g_object_unref (mail_op1);
+ if (mail_op2 != NULL)
+ g_object_unref (mail_op2);
}
void
{
TnyMsg *new_msg;
ReplyForwardHelper *rf_helper;
- ModestWindow *msg_win;
+ ModestWindow *msg_win = NULL;
ModestEditType edit_type;
- gchar *from;
+ gchar *from = NULL;
TnyAccount *account = NULL;
- ModestWindowMgr *mgr;
+ ModestWindowMgr *mgr = NULL;
gchar *signature = NULL;
g_return_if_fail (user_data != NULL);
gtk_widget_show_all (GTK_WIDGET (msg_win));
cleanup:
+ if (msg_win)
+ g_object_unref (msg_win);
if (new_msg)
g_object_unref (G_OBJECT (new_msg));
if (account)
download_uncached_messages (TnyList *header_list, GtkWindow *win)
{
TnyIterator *iter;
- gboolean found, retval;
+ gboolean retval;
+ gint uncached_messages = 0;
iter = tny_list_create_iterator (header_list);
- found = FALSE;
- while (!tny_iterator_is_done (iter) && !found) {
+ while (!tny_iterator_is_done (iter)) {
TnyHeader *header;
TnyHeaderFlags flags;
/* TODO: is this the right flag?, it seems that some
headers that have been previously downloaded do not
come with it */
- found = !(flags & TNY_HEADER_FLAG_CACHED);
+ if (! (flags & TNY_HEADER_FLAG_CACHED))
+ uncached_messages ++;
g_object_unref (header);
tny_iterator_next (iter);
}
/* Ask for user permission to download the messages */
retval = TRUE;
- if (found) {
+ if (uncached_messages > 0) {
GtkResponseType response;
response =
modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
- _("mcen_nc_get_multi_msg_txt"));
+ ngettext("mcen_nc_get_msg",
+ "mcen_nc_get_msgs",
+ uncached_messages));
if (response == GTK_RESPONSE_CANCEL)
retval = FALSE;
}
}
}
+static void
+new_messages_arrived (ModestMailOperation *self,
+ gint new_messages,
+ gpointer user_data)
+{
+ if (new_messages == 0)
+ return;
+
+ modest_platform_on_new_msg ();
+}
+
/*
* This function performs the send & receive required actions. The
* window is used to create the mail operation. Typically it should
internally, so the progress objects will receive the proper
progress information */
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
- modest_mail_operation_update_account (mail_op, acc_name);
+ modest_mail_operation_update_account (mail_op, acc_name, new_messages_arrived, NULL);
g_object_unref (G_OBJECT (mail_op));
/* Free */
/* If no header has been selected then exit */
if (!header)
return;
-
+
+ /* Update focus */
+ if (!gtk_widget_is_focus (GTK_WIDGET(header_view)))
+ gtk_widget_grab_focus (GTK_WIDGET(header_view));
+
/* Update Main window title */
- if (GTK_WIDGET_HAS_FOCUS (header_view)) {
+ if (gtk_widget_is_focus (GTK_WIDGET(header_view))) {
const gchar *subject = tny_header_get_subject (header);
if (subject && strlen(subject) > 0)
gtk_window_set_title (GTK_WINDOW (main_window), subject);
TnyFolder *folder,
gpointer user_data)
{
-/* printf ("DEBUG: %s\n", __FUNCTION__); */
ModestMainWindow *win = NULL;
GtkWidget *header_view;
} else {
if (TNY_IS_FOLDER (folder_store) && selected) {
- if (!TNY_IS_MERGE_FOLDER (folder_store)) { /* TnyMergeFolder can have no get_account() implementation. */
- /* Update the active account */
- TnyAccount *account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
+ /* Update the active account */
+ TnyAccount *account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
+ if (account) {
set_active_account_from_tny_account (account, MODEST_WINDOW (main_window));
g_object_unref (account);
+ account = NULL;
}
/* Set the header style by default, it could
} else {
/* Update the active account */
modest_window_set_active_account (MODEST_WINDOW (main_window), NULL);
- /* Do not show folder */
- modest_widget_memory_save (conf, G_OBJECT (header_view), MODEST_CONF_HEADER_VIEW_KEY);
+ /* Save only if we're seeing headers */
+ if (modest_main_window_get_contents_style (main_window) ==
+ MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
+ modest_widget_memory_save (conf, G_OBJECT (header_view),
+ MODEST_CONF_HEADER_VIEW_KEY);
modest_header_view_clear (MODEST_HEADER_VIEW(header_view));
}
}
MsgData *data;
gchar *account_name, *from;
ModestAccountMgr *account_mgr;
+ gchar *info_text = NULL;
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window));
modest_msg_edit_window_free_msg_data (edit_window, data);
- /* Save settings and close the window */
- gtk_widget_destroy (GTK_WIDGET (edit_window));
+ 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);
}
/* For instance, when clicking the Send toolbar button when editing a message: */
}
}
+ modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+
/* Create the mail operation */
ModestMailOperation *mail_operation = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_SEND, G_OBJECT(edit_window));
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
g_object_unref (G_OBJECT (mail_operation));
modest_msg_edit_window_free_msg_data (edit_window, data);
+ modest_msg_edit_window_set_sent (edit_window, TRUE);
/* Save settings and close the window: */
gtk_widget_destroy (GTK_WIDGET (edit_window));
modest_msg_edit_window_remove_attachments (window, NULL);
}
-/*
- * Shows a dialog with an entry that asks for some text. The returned
- * value must be freed by the caller. The dialog window title will be
- * set to @title.
- */
-static gchar *
-ask_for_folder_name (GtkWindow *parent_window,
- const gchar *title)
-{
- GtkWidget *dialog, *entry;
- gchar *folder_name = NULL;
-
- /* Ask for folder name */
- dialog = gtk_dialog_new_with_buttons (_("New Folder Name"),
- parent_window,
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox),
- gtk_label_new(title),
- FALSE, FALSE, 0);
-
- entry = gtk_entry_new_with_max_length (40);
- gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox),
- entry,
- TRUE, FALSE, 0);
-
- gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
-
- if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
- folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-
- gtk_widget_destroy (dialog);
-
- return folder_name;
-}
-
void
modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_window)
{
if (folder && TNY_IS_FOLDER (folder)) {
gchar *folder_name;
- folder_name = ask_for_folder_name (GTK_WINDOW (main_window),
- _("Please enter a new name for the folder"));
+ gint response;
+ const gchar *current_name;
+
+ current_name = tny_folder_get_name (TNY_FOLDER (folder));
+ response = modest_platform_run_rename_folder_dialog (GTK_WINDOW (main_window), NULL,
+ current_name, &folder_name);
- if (folder_name != NULL && strlen (folder_name) > 0) {
+ if (response == GTK_RESPONSE_OK && strlen (folder_name) > 0) {
ModestMailOperation *mail_op;
mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_INFO, G_OBJECT(main_window));
modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
_("mail_in_ui_folder_delete_error"));
+ g_object_unref (win);
}
static void
const gboolean username_was_changed =
(strcmp (*username, initial_username) != 0);
if (username_was_changed) {
- /* To actually use a changed username,
- * we must reset the connection, according to pvanhoof.
- * This _might_ be a sensible way to do that: */
- TnyDevice *device = modest_runtime_get_device();
- tny_device_force_offline (device);
- tny_device_force_online (device);
+ g_warning ("%s: tinymail does not yet support changing the "
+ "username in the get_password() callback.\n", __FUNCTION__);
}
}
} else if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
modest_folder_view_copy_selection (MODEST_FOLDER_VIEW (focused_widget));
}
+
+ /* Show information banner */
+ modest_platform_information_banner (NULL, NULL, _CS("ecoc_ib_edwin_copied"));
+
}
void
modest_ui_actions_on_undo (GtkAction *action,
ModestWindow *window)
{
+ ModestEmailClipboard *clipboard = NULL;
+
if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
- } else {
+ } if (MODEST_IS_MAIN_WINDOW (window)) {
+ /* Clear clipboard source */
+ clipboard = modest_runtime_get_email_clipboard ();
+ modest_email_clipboard_clear (clipboard);
+ }
+ else {
g_return_if_reached ();
}
}
gtk_text_buffer_get_start_iter (buffer, &start);
gtk_text_buffer_get_end_iter (buffer, &end);
gtk_text_buffer_select_range (buffer, &start, &end);
- }
- else if ((MODEST_IS_FOLDER_VIEW (focused_widget)) ||
- (MODEST_IS_HEADER_VIEW (focused_widget))) {
-
- GtkTreeSelection *selection = NULL;
-
- /* Get header view */
+ } else if (GTK_IS_HTML (focused_widget)) {
+ gtk_html_select_all (GTK_HTML (focused_widget));
+ } else if (MODEST_IS_MAIN_WINDOW (window)) {
GtkWidget *header_view = focused_widget;
- if (MODEST_IS_FOLDER_VIEW (focused_widget))
+ GtkTreeSelection *selection = NULL;
+
+ if (!(MODEST_IS_HEADER_VIEW (focused_widget)))
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
MODEST_WIDGET_TYPE_HEADER_VIEW);
-
+
/* Select all messages */
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
gtk_tree_selection_select_all (selection);
- } else if (GTK_IS_HTML (focused_widget)) {
- gtk_html_select_all (GTK_HTML (focused_widget));
+
+ /* Set focuse on header view */
+ gtk_widget_grab_focus (header_view);
}
+
}
void
folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
MODEST_WIDGET_TYPE_FOLDER_VIEW);
if (gtk_widget_is_focus (folder_view)) {
- TnyFolder *folder;
-
- folder = (TnyFolder *) modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
+ TnyFolderStore *folder_store
+ = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
+ if (!folder_store) {
+ g_warning ("%s: No item was selected.\n", __FUNCTION__);
+ return;
+ }
/* Show only when it's a folder */
- if (!folder || !TNY_IS_FOLDER (folder))
- return;
+ /* This function should not be called for account items,
+ * because we dim the menu item for them. */
+ if (TNY_IS_FOLDER (folder_store)) {
+ show_folder_details (TNY_FOLDER (folder_store), GTK_WINDOW (win));
+ }
- show_folder_details (folder, GTK_WINDOW (win));
- g_object_unref (folder);
+ g_object_unref (folder_store);
} else {
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
g_object_unref (header);
g_object_unref (iter);
+ /* if no src_folder, message may be an attahcment */
+ if (src_folder == NULL)
+ return GTK_RESPONSE_CANCEL;
+
/* If the source is a remote folder */
if (!modest_tny_folder_is_local_folder (src_folder)) {
const gchar *message;
/* TODO: show error message */
modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
_("mail_in_ui_folder_move_target_error"));
+ g_object_unref (win);
}
/*
g_object_unref (headers);
}
}
- g_object_unref (folder_store);
end:
+ if (folder_store != NULL)
+ g_object_unref (folder_store);
gtk_widget_destroy (dialog);
}
/* Create header list */
header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
+
headers = tny_simple_list_new ();
tny_list_prepend (headers, G_OBJECT (header));
g_object_unref (header);
ModestWindow *window)
{
if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
- modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (window), NULL);
+ modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (window));
} else {
/* not supported window for this action */
g_return_if_reached ();
dialog = modest_platform_get_global_settings_dialog ();
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (win));
- gtk_widget_show (dialog);
+ gtk_widget_show_all (dialog);
gtk_dialog_run (GTK_DIALOG (dialog));