X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=8d618d3b256c37a47d37b6fd9d63d47092aaecf7;hb=3e789b396a9e6d5386c4d2ae244dace05dc742a6;hp=18f87d8679ab7cd16f835781d8eab4ba9e858ccf;hpb=dcd7b63c3e21a0be8959b84eb012c2994e779249;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 18f87d8..8d618d3 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -560,9 +560,9 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) gtk_tree_path_free (prev_path); } - /* Update window dimming state */ + /* Update toolbar dimming state */ if (main_window) - modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (main_window)); + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window)); /* Free */ g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL); @@ -818,7 +818,7 @@ modest_ui_actions_on_new_msg_or_folder (GtkAction *action, ModestWindow *win) { g_return_if_fail (MODEST_IS_WINDOW (win)); - /* Check first if the header view has the focus */ + /* Check first if the folder view has the focus */ if (MODEST_IS_MAIN_WINDOW (win)) { GtkWidget *w; w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), @@ -1002,9 +1002,9 @@ open_msg_cb (ModestMailOperation *mail_op, gtk_widget_show_all (GTK_WIDGET(win)); } - /* Update window dimming state */ + /* Update toolbar dimming state */ if (MODEST_IS_MAIN_WINDOW (parent_win)) { - modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (parent_win)); + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (parent_win)); } cleanup: @@ -1020,16 +1020,10 @@ modest_ui_actions_get_msgs_full_error_handler (ModestMailOperation *mail_op, { const GError *error; GObject *win = NULL; - const gchar *err_msg; + const gchar *err_msg = (const gchar *) user_data; win = modest_mail_operation_get_source (mail_op); error = modest_mail_operation_get_error (mail_op); - - /* Select error message */ - if (error->code == MODEST_MAIL_OPERATION_ERROR_MESSAGE_SIZE_LIMIT) - err_msg = _("emev_ni_ui_imap_msg_size_exceed_error"); - else - err_msg = (const gchar *) user_data; /* Show error */ modest_platform_run_information_dialog ((GtkWindow *) win, err_msg); @@ -1059,6 +1053,16 @@ get_account_from_header_list (TnyList *headers) return account; } +static void +foreach_unregister_headers (gpointer data, + gpointer user_data) +{ + ModestWindowMgr *mgr = (ModestWindowMgr *) user_data; + TnyHeader *header = TNY_HEADER (data); + + modest_window_mgr_unregister_header (mgr, header); +} + static void open_msgs_performer(gboolean canceled, GError *err, @@ -1077,6 +1081,9 @@ open_msgs_performer(gboolean canceled, status = tny_account_get_connection_status (account); if (err || canceled) { + /* Unregister the already registered headers */ + tny_list_foreach (not_opened_headers, foreach_unregister_headers, + modest_runtime_get_window_mgr ()); goto clean; } @@ -1758,6 +1765,7 @@ do_send_receive_performer (gboolean canceled, */ void modest_ui_actions_do_send_receive (const gchar *account_name, + gboolean force_connection, ModestWindow *win) { gchar *acc_name = NULL; @@ -1790,7 +1798,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name, /* Invoke the connect and perform */ modest_platform_connect_and_perform ((win) ? GTK_WINDOW (win) : NULL, - (win) ? TRUE : FALSE, info->account, + force_connection, info->account, do_send_receive_performer, info); } @@ -1869,7 +1877,8 @@ modest_ui_actions_cancel_send (GtkAction *action, ModestWindow *win) * updates */ void -modest_ui_actions_do_send_receive_all (ModestWindow *win) +modest_ui_actions_do_send_receive_all (ModestWindow *win, + gboolean force_connection) { GSList *account_names, *iter; @@ -1878,7 +1887,7 @@ modest_ui_actions_do_send_receive_all (ModestWindow *win) iter = account_names; while (iter) { - modest_ui_actions_do_send_receive ((const char*) iter->data, win); + modest_ui_actions_do_send_receive ((const char*) iter->data, force_connection, win); iter = g_slist_next (iter); } @@ -1919,8 +1928,8 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) g_object_unref (folder_store); } - /* Refresh the active account */ - modest_ui_actions_do_send_receive (NULL, win); + /* Refresh the active account. Force the connection if needed */ + modest_ui_actions_do_send_receive (NULL, TRUE, win); } @@ -1987,8 +1996,8 @@ modest_ui_actions_on_header_selected (ModestHeaderView *header_view, if (!gtk_widget_is_focus (GTK_WIDGET(header_view))) gtk_widget_grab_focus (GTK_WIDGET(header_view)); - /* Update window dimming state */ - modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (main_window)); + /* Update toolbar dimming state */ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window)); } void @@ -2151,8 +2160,8 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, } } - /* Update window dimming state */ - modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (main_window)); + /* Update toolbar dimming state */ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window)); } void @@ -2266,10 +2275,10 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op, if (modest_mail_operation_get_error (mail_op) != NULL) { g_warning ("%s failed: %s\n", __FUNCTION__, (modest_mail_operation_get_error (mail_op))->message); modest_platform_information_banner (NULL, NULL, _("mail_ib_file_operation_failed")); - return; + } else { + modest_msg_edit_window_set_draft (edit_window, saved_draft); } - - modest_msg_edit_window_set_draft (edit_window, saved_draft); + g_object_unref(edit_window); } void @@ -2333,7 +2342,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi data->images, data->priority_flags, on_save_to_drafts_cb, - edit_window); + g_object_ref(edit_window)); info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts")); modest_platform_information_banner (NULL, NULL, info_text); @@ -3556,7 +3565,7 @@ modest_ui_actions_on_select_all (GtkAction *action, /* Enable window dimming management */ modest_window_enable_dimming (MODEST_WINDOW(window)); - modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window)); + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window)); } } @@ -4487,8 +4496,8 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action, */ static void xfer_messages_from_move_to_cb (gboolean canceled, GError *err, - GtkWindow *parent_window, - TnyAccount *account, gpointer user_data) + GtkWindow *parent_window, + TnyAccount *account, gpointer user_data) { TnyFolderStore *dst_folder = TNY_FOLDER_STORE (user_data); ModestWindow *win = MODEST_WINDOW (parent_window); @@ -4501,13 +4510,6 @@ xfer_messages_from_move_to_cb (gboolean canceled, GError *err, g_object_unref (dst_folder); return; } - - if (!TNY_IS_FOLDER (dst_folder)) { - modest_platform_information_banner (GTK_WIDGET (win), - NULL, - _CS("ckdg_ib_unable_to_move_to_current_location")); - return; - } dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder)); proto_str = tny_account_get_proto (dst_account); @@ -4572,6 +4574,36 @@ xfer_messages_from_move_to_cb (gboolean canceled, GError *err, } typedef struct { + TnyAccount *dst_account; + ModestConnectedPerformer callback; + gpointer data; +} DoubleConnectionInfo; + +static void +src_account_connect_performer (gboolean canceled, + GError *err, + GtkWindow *parent_window, + TnyAccount *src_account, + gpointer user_data) +{ + DoubleConnectionInfo *info = (DoubleConnectionInfo *) user_data; + + if (canceled || err) { + /* If there was any error call the user callback */ + info->callback (canceled, err, parent_window, src_account, info->data); + } else { + /* Connect the destination account */ + modest_platform_connect_if_remote_and_perform (parent_window, TRUE, + TNY_FOLDER_STORE (info->dst_account), + info->callback, info->data); + } + + /* Free the info object */ + g_object_unref (info->dst_account); + g_slice_free (DoubleConnectionInfo, info); +} + +typedef struct { TnyFolder *src_folder; TnyFolderStore *dst_folder; gboolean delete_original; @@ -4672,8 +4704,8 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, /* Allow only to transfer folders to the local root folder */ if (TNY_IS_ACCOUNT (dst_folder) && - !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder)) { - do_xfer = FALSE; + !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder)) { + do_xfer = FALSE; } else if (!TNY_IS_FOLDER (src_folder)) { g_warning ("%s: src_folder is not a TnyFolder.\n", __FUNCTION__); do_xfer = FALSE; @@ -4698,25 +4730,48 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, } } else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) { gboolean do_xfer = TRUE; + + /* Show an error when trying to move msgs to an account */ + if (!TNY_IS_FOLDER (dst_folder)) { + modest_platform_information_banner (GTK_WIDGET (win), + NULL, + _CS("ckdg_ib_unable_to_move_to_current_location")); + goto free; + } + /* Ask for confirmation if the source folder is remote and we're not connected */ if (!online && modest_tny_folder_store_is_remote(src_folder)) { TnyList *headers = modest_header_view_get_selected_headers(header_view); if (!msgs_already_deleted_from_server(headers, src_folder)) { guint num_headers = tny_list_get_length(headers); TnyAccount *account = get_account_from_header_list (headers); - if (!connect_to_get_msg(MODEST_WINDOW (win), num_headers, account)) + GtkResponseType response; + + response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win), + ngettext("mcen_nc_get_msg", + "mcen_nc_get_msgs", + num_headers)); + if (response == GTK_RESPONSE_CANCEL) do_xfer = FALSE; + g_object_unref (account); } g_object_unref(headers); } if (do_xfer) /* Transfer messages */ { - g_object_ref (dst_folder); + DoubleConnectionInfo *info = g_slice_new (DoubleConnectionInfo); + info->callback = xfer_messages_from_move_to_cb; + info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder)); + info->data = g_object_ref (dst_folder); + modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE, - TNY_FOLDER_STORE (dst_folder), xfer_messages_from_move_to_cb, dst_folder); + TNY_FOLDER_STORE (src_folder), + src_account_connect_performer, + info); } } + free: if (src_folder) g_object_unref (src_folder); } @@ -4998,12 +5053,111 @@ modest_ui_actions_on_retrieve_msg_contents (GtkAction *action, } void -modest_ui_actions_check_window_dimming_rules (ModestWindow *window) +modest_ui_actions_check_toolbar_dimming_rules (ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules_group (window, MODEST_DIMMING_RULES_TOOLBAR); +} + +void +modest_ui_actions_check_menu_dimming_rules (ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules_group (window, MODEST_DIMMING_RULES_MENU); +} + +void +modest_ui_actions_on_email_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_edit_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_view_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_format_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_tools_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_attachment_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_toolbar_csm_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_folder_view_csm_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); +} + +void +modest_ui_actions_on_header_view_csm_menu_activated (GtkAction *action, + ModestWindow *window) { g_return_if_fail (MODEST_IS_WINDOW (window)); - /* Update dimmed */ - modest_window_check_dimming_rules_group (window, "ModestWindowDimmingRules"); + /* Update dimmed */ + modest_ui_actions_check_menu_dimming_rules (window); } void