X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=e1dc2ff244876d51815acef97ab05530bce59ce9;hp=8fd5ae3a22320ad9778f6f447bb2462510e3068e;hb=82416b4e16ccb7f40304192ae58c0469781c63fe;hpb=9eef019e2d68dcce768a3473b1a578a8de105518 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 8fd5ae3..e1dc2ff 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -177,10 +177,12 @@ static void modest_ui_actions_on_main_window_move_to (GtkAction *action, GtkWidget *folder_view, TnyFolderStore *dst_folder, ModestMainWindow *win); +#ifdef MODEST_TOOLKIT_HILDON2 static void modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view, TnyFolderStore *dst_folder, TnyList *selection, GtkWindow *win); +#endif static void modest_ui_actions_on_window_move_to (GtkAction *action, TnyList *list_to_move, @@ -221,14 +223,38 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win) wizard = GTK_WINDOW (modest_platform_get_account_settings_wizard ()); modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (wizard), (GtkWindow *) win); +#ifndef MODEST_TOOLKIT_HILDON2 /* always present a main window in the background * we do it here, so we cannot end up with two wizards (as this * function might be called in modest_window_mgr_get_main_window as well */ - if (!win) + if (!win) win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), TRUE); /* create if not existent */ +#else + if (!win) { + GList *window_list; + ModestWindowMgr *mgr; + + mgr = modest_runtime_get_window_mgr (); + + window_list = modest_window_mgr_get_window_list (mgr); + if (window_list == NULL) { + win = MODEST_WINDOW (modest_accounts_window_new ()); + modest_window_mgr_register_window (mgr, win, NULL); + gtk_widget_show_all (GTK_WIDGET (win)); + + win = MODEST_WINDOW (modest_folder_window_new (NULL)); + modest_window_mgr_register_window (mgr, win, NULL); - gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win)); + gtk_widget_show_all (GTK_WIDGET (win)); + } else { + g_list_free (window_list); + } + } +#endif + + if (win) + gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win)); /* make sure the mainwindow is visible. We need to present the wizard again to give it the focus back. show_all are needed @@ -872,21 +898,37 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op, error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) { GObject *source = modest_mail_operation_get_source (mail_op); modest_platform_run_information_dialog (GTK_IS_WINDOW (source) ? GTK_WINDOW (source) : NULL, - dgettext("ke-recv","memr_ib_operation_disabled"), + _KR("memr_ib_operation_disabled"), TRUE); g_object_unref (source); } if (error && ((error->code == TNY_SERVICE_ERROR_NO_SUCH_MESSAGE) || error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) { - gchar *subject, *msg; + gchar *subject, *msg, *format = NULL; + TnyAccount *account; subject = tny_header_dup_subject (header); if (!subject) - subject = g_strdup (_("mail_va_no_subject"));; - msg = g_strdup_printf (_("emev_ni_ui_imap_message_not_available_in_server"), - subject); + subject = g_strdup (_("mail_va_no_subject")); + + account = modest_mail_operation_get_account (mail_op); + if (account) { + ModestProtocol *protocol; + ModestProtocolType proto; + proto = modest_tny_account_get_protocol_type (account); + protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto); + if (protocol) + format = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject); + g_object_unref (account); + } + + if (!format) + format = g_strdup (_("emev_ni_ui_imap_message_not_available_in_server")); + + msg = g_strdup_printf (format, subject); modest_platform_run_information_dialog (NULL, msg, FALSE); g_free (msg); + g_free (format); g_free (subject); } @@ -950,13 +992,14 @@ get_header_view_from_window (ModestWindow *window) } static gchar * -get_info_from_header (TnyHeader *header, gboolean *is_draft) +get_info_from_header (TnyHeader *header, gboolean *is_draft, gboolean *can_open) { TnyFolder *folder; gchar *account = NULL; TnyFolderType folder_type = TNY_FOLDER_TYPE_UNKNOWN; *is_draft = FALSE; + *can_open = TRUE; folder = tny_header_get_folder (header); /* Gets folder type (OUTBOX headers will be opened in edit window */ @@ -965,7 +1008,7 @@ get_info_from_header (TnyHeader *header, gboolean *is_draft) if (folder_type == TNY_FOLDER_TYPE_INVALID) g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__); } - + if (folder_type == TNY_FOLDER_TYPE_OUTBOX) { TnyTransportAccount *traccount = NULL; ModestTnyAccountStore *accstore = modest_runtime_get_account_store(); @@ -991,7 +1034,7 @@ get_info_from_header (TnyHeader *header, gboolean *is_draft) open any message from outbox which is not in failed state */ - g_object_unref(traccount); + *can_open = FALSE; } #endif } @@ -1003,6 +1046,15 @@ get_info_from_header (TnyHeader *header, gboolean *is_draft) *is_draft = TRUE; /* Open in editor if the message is in the Drafts folder */ } + if (!account) { + TnyAccount *acc = tny_folder_get_account (folder); + if (acc) { + account = + g_strdup (modest_tny_account_get_parent_modest_account_name_for_server_account (acc)); + g_object_unref (acc); + } + } + g_object_unref (folder); return account; @@ -1021,8 +1073,9 @@ open_msg_cb (ModestMailOperation *mail_op, ModestWindow *win = NULL; gchar *account = NULL; gboolean open_in_editor = FALSE; + gboolean can_open; OpenMsgHelper *helper = (OpenMsgHelper *) user_data; - + /* Do nothing if there was any problem with the mail operation. The error will be shown by the error_handler of the mail operation */ @@ -1034,14 +1087,14 @@ open_msg_cb (ModestMailOperation *mail_op, /* Mark header as read */ headers_action_mark_as_read (header, MODEST_WINDOW(parent_win), NULL); - account = get_info_from_header (header, &open_in_editor); + account = get_info_from_header (header, &open_in_editor, &can_open); /* Get account */ if (!account) account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (parent_win))); if (!account) account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); - + if (open_in_editor) { ModestAccountMgr *mgr = modest_runtime_get_account_mgr (); gchar *from_header = NULL, *acc_name; @@ -1069,7 +1122,7 @@ open_msg_cb (ModestMailOperation *mail_op, } else { gchar *uid = modest_tny_folder_get_header_unique_id (header); - if (helper->rowref && helper->model) { + if (helper->rowref && helper->model) { win = modest_msg_view_window_new_with_header_model (msg, account, (const gchar*) uid, helper->model, helper->rowref); } else { @@ -1077,7 +1130,7 @@ open_msg_cb (ModestMailOperation *mail_op, } g_free (uid); } - + /* Register and show new window */ if (win != NULL) { mgr = modest_runtime_get_window_mgr (); @@ -1138,12 +1191,11 @@ check_memory_full_error (GtkWidget *parent_window, GError *err) if (is_memory_full_error (err)) modest_platform_information_banner (parent_window, - NULL, dgettext("ke-recv", - "cerm_device_memory_full")); + NULL, _KR("cerm_device_memory_full")); else if (err->code == TNY_SYSTEM_ERROR_MEMORY) /* If the account was created in memory full conditions then tinymail won't be able to - connect so it'll return this error code */ + connect so it'll return this error code */ modest_platform_information_banner (parent_window, NULL, _("emev_ui_imap_inbox_select_error")); else @@ -1169,15 +1221,14 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op, if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) { if (is_memory_full_error ((GError *) error)) { modest_platform_information_banner ((GtkWidget *) win, - NULL, dgettext("ke-recv", - "cerm_device_memory_full")); + NULL, _KR("cerm_device_memory_full")); } else if (error->code == TNY_SYSTEM_ERROR_MEMORY) { modest_platform_information_banner ((GtkWidget *) win, NULL, _("emev_ui_imap_inbox_select_error")); } else if (error->domain == MODEST_MAIL_OPERATION_ERROR && error->code == MODEST_MAIL_OPERATION_ERROR_FILE_IO) { modest_platform_information_banner ((GtkWidget *) win, - NULL, dgettext ("hildon-common-strings", "sfil_ni_unable_to_open_file_not_found")); + NULL, _CS ("sfil_ni_unable_to_open_file_not_found")); } else if (user_data) { modest_platform_information_banner ((GtkWidget *) win, NULL, user_data); @@ -1241,7 +1292,6 @@ get_account_from_header (TnyHeader *header) account = tny_folder_get_account (folder); g_object_unref (folder); } - return account; } @@ -1281,8 +1331,10 @@ open_msg_performer(gboolean canceled, gchar *error_msg; ModestProtocolType proto; TnyConnectionStatus status; - gboolean show_open_draft = FALSE; OpenMsgHelper *helper = NULL; + ModestProtocol *protocol; + ModestProtocolRegistry *protocol_registry; + gchar *subject; helper = (OpenMsgHelper *) user_data; @@ -1291,10 +1343,10 @@ open_msg_performer(gboolean canceled, modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header); /* Free the helper */ open_msg_helper_destroyer (helper); - + /* In memory full conditions we could get this error here */ check_memory_full_error ((GtkWidget *) parent_window, err); - + goto clean; } @@ -1303,11 +1355,7 @@ open_msg_performer(gboolean canceled, if (proto == MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) { proto = MODEST_PROTOCOLS_STORE_MAILDIR; } - - ModestProtocol *protocol; - ModestProtocolRegistry *protocol_registry; - gchar *subject; - + protocol_registry = modest_runtime_get_protocol_registry (); subject = tny_header_dup_subject (helper->header); @@ -1315,11 +1363,13 @@ open_msg_performer(gboolean canceled, error_msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject); if (subject) g_free (subject); - + if (error_msg == NULL) { error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error")); } +#ifndef MODEST_TOOLKIT_HILDON2 + gboolean show_open_draft = FALSE; if (modest_protocol_registry_protocol_type_has_tag (protocol_registry, proto, MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) { @@ -1331,10 +1381,19 @@ open_msg_performer(gboolean canceled, show_open_draft = (folder_type == TNY_FOLDER_TYPE_DRAFTS); g_object_unref (folder); } +#endif #ifdef MODEST_TOOLKIT_HILDON2 gboolean is_draft; - gchar *account_name = get_info_from_header (helper->header, &is_draft); + gboolean can_open; + gchar *account_name = get_info_from_header (helper->header, &is_draft, &can_open); + + if (!can_open) { + modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header); + g_free (account_name); + open_msg_helper_destroyer (helper); + goto clean; + } if (!is_draft) { ModestWindow *window; @@ -1370,17 +1429,17 @@ open_msg_performer(gboolean canceled, modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); + +#ifndef MODEST_TOOLKIT_HILDON2 if (show_open_draft) { helper->banner_info = g_slice_new (OpenMsgBannerInfo); -#ifdef MODEST_TOOLKIT_HILDON2 - helper->banner_info->message = g_strdup (_("mail_me_opening")); -#else helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message")); -#endif helper->banner_info->banner = NULL; helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle, helper->banner_info); } +#endif + TnyList *headers; headers = TNY_LIST (tny_simple_list_new ()); @@ -1414,7 +1473,7 @@ open_msg_from_header (TnyHeader *header, GtkTreeRowReference *rowref, ModestWind GtkWidget *header_view = NULL; OpenMsgHelper *helper; ModestWindow *window; - + g_return_if_fail (header != NULL && rowref != NULL); mgr = modest_runtime_get_window_mgr (); @@ -1431,7 +1490,7 @@ open_msg_from_header (TnyHeader *header, GtkTreeRowReference *rowref, ModestWind window = NULL; found = modest_window_mgr_find_registered_header (mgr, header, &window); - + /* Do not open again the message and present the window to the user */ if (found) { @@ -2472,7 +2531,7 @@ folder_refreshed_cb (ModestMailOperation *mail_op, if (error && error->domain == MODEST_MAIL_OPERATION_ERROR && error->code == MODEST_MAIL_OPERATION_ERROR_LOW_MEMORY) { modest_platform_run_information_dialog (GTK_WINDOW (win), - dgettext("ke-recv","memr_ib_operation_disabled"), + _KR("memr_ib_operation_disabled"), TRUE); return; } @@ -2731,8 +2790,7 @@ enough_space_for_message (ModestMsgEditWindow *edit_window, expected_size > available_disk) { modest_platform_information_banner (NULL, NULL, - dgettext("ke-recv", - "cerm_device_memory_full")); + _KR("cerm_device_memory_full")); return FALSE; } @@ -2755,7 +2813,7 @@ enough_space_for_message (ModestMsgEditWindow *edit_window, if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) { modest_platform_run_information_dialog ( GTK_WINDOW(edit_window), - dgettext("ke-recv","memr_ib_operation_disabled"), + _KR("memr_ib_operation_disabled"), TRUE); return FALSE; } @@ -3124,11 +3182,10 @@ modest_ui_actions_on_select_editor_background_color (GtkAction *action, } void -modest_ui_actions_on_insert_image (GtkAction *action, +modest_ui_actions_on_insert_image (GObject *object, ModestMsgEditWindow *window) { g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); - g_return_if_fail (GTK_IS_ACTION (action)); if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE)) @@ -3259,6 +3316,46 @@ do_create_folder_cb (ModestMailOperation *mail_op, g_object_unref (source_win); } +typedef struct { + gchar *folder_name; + TnyFolderStore *parent; +} CreateFolderConnect; + +static void +do_create_folder_performer (gboolean canceled, + GError *err, + GtkWindow *parent_window, + TnyAccount *account, + gpointer user_data) +{ + CreateFolderConnect *helper = (CreateFolderConnect *) user_data; + ModestMailOperation *mail_op; + + if (canceled || err) { + /* In memory full conditions we could get this error here */ + check_memory_full_error ((GtkWidget *) parent_window, err); + goto frees; + } + + mail_op = modest_mail_operation_new ((GObject *) parent_window); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_create_folder (mail_op, + helper->parent, + (const gchar *) helper->folder_name, + do_create_folder_cb, + g_strdup (helper->folder_name)); + g_object_unref (mail_op); + + frees: + if (helper->parent) + g_object_unref (helper->parent); + if (helper->folder_name) + g_free (helper->folder_name); + g_slice_free (CreateFolderConnect, helper); +} + + static void do_create_folder (GtkWindow *parent_window, TnyFolderStore *suggested_parent, @@ -3266,50 +3363,30 @@ do_create_folder (GtkWindow *parent_window, { gint result; gchar *folder_name = NULL; - TnyFolderStore *parent_folder; + TnyFolderStore *parent_folder = NULL; result = modest_platform_run_new_folder_dialog (GTK_WINDOW (parent_window), suggested_parent, (gchar *) suggested_name, &folder_name, &parent_folder); - - if (result == GTK_RESPONSE_ACCEPT && parent_folder) { - ModestMailOperation *mail_op; - - mail_op = modest_mail_operation_new ((GObject *) parent_window); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - modest_mail_operation_create_folder (mail_op, - parent_folder, - (const gchar *) folder_name, - do_create_folder_cb, - folder_name); - g_object_unref (mail_op); - } - g_object_unref (parent_folder); -} -static void -create_folder_performer (gboolean canceled, - GError *err, - GtkWindow *parent_window, - TnyAccount *account, - gpointer user_data) -{ - TnyFolderStore *parent_folder = TNY_FOLDER_STORE (user_data); + if (result == GTK_RESPONSE_ACCEPT && parent_folder) { + CreateFolderConnect *helper = (CreateFolderConnect *) g_slice_new0 (CreateFolderHelper); + helper->folder_name = g_strdup (folder_name); + helper->parent = g_object_ref (parent_folder); - if (canceled || err) { - /* In memory full conditions we could get this error here */ - check_memory_full_error ((GtkWidget *) parent_window, err); - goto frees; + modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window), + TRUE, + parent_folder, + do_create_folder_performer, + helper); } - /* Run the new folder dialog */ - do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL); - - frees: - g_object_unref (parent_folder); + if (folder_name) + g_free (folder_name); + if (parent_folder) + g_object_unref (parent_folder); } static void @@ -3319,36 +3396,24 @@ modest_ui_actions_create_folder(GtkWidget *parent_window, TnyFolderStore *parent_folder; #ifdef MODEST_TOOLKIT_HILDON2 - const gchar *active_account; - TnyAccount *account; + ModestTnyAccountStore *acc_store; + + acc_store = modest_runtime_get_account_store (); - /* In hildon 2.2 we use the current account as default parent */ - active_account = modest_window_get_active_account (MODEST_WINDOW (parent_window)); - account = modest_tny_account_store_get_server_account (modest_runtime_get_account_store (), - active_account, - TNY_ACCOUNT_TYPE_STORE); - parent_folder = TNY_FOLDER_STORE (account); + parent_folder = (TnyFolderStore *) + modest_tny_account_store_get_local_folders_account (acc_store); #else parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); #endif - - if (parent_folder) { - /* The parent folder will be freed in the callback */ - modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window), - TRUE, - parent_folder, - create_folder_performer, - parent_folder); - } -#ifdef MODEST_TOOLKIT_HILDON2 - g_object_unref (parent_folder); -#endif + + if (parent_folder) + do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL); } -void +void modest_ui_actions_on_new_folder (GtkAction *action, ModestWindow *window) { - + g_return_if_fail (MODEST_IS_WINDOW(window)); if (MODEST_IS_MAIN_WINDOW (window)) { @@ -3393,7 +3458,7 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op, message is opened for example */ message = _("emev_ni_internal_error"); } else { - message = _("emev_ib_ui_imap_unable_to_rename"); + message = _CS("ckdg_ib_unable_to_remove"); } /* We don't set a parent for the dialog because the dialog @@ -3638,6 +3703,9 @@ delete_folder (ModestWindow *window, gboolean move_to_trash) folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); + if (!folder) + return FALSE; + /* Show an error if it's an account */ if (!TNY_IS_FOLDER (folder)) { modest_platform_run_information_dialog (GTK_WINDOW (window), @@ -3647,7 +3715,7 @@ delete_folder (ModestWindow *window, gboolean move_to_trash) return FALSE; } - /* Ask the user */ + /* Ask the user */ message = g_strdup_printf (_("mcen_nc_delete_folder_text"), tny_folder_get_name (TNY_FOLDER (folder))); response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window), @@ -4801,7 +4869,7 @@ on_move_to_dialog_response (GtkDialog *dialog, TnyFolderStore *dst_folder; case MODEST_GTK_RESPONSE_NEW_FOLDER: - modest_ui_actions_create_folder (GTK_WIDGET (dialog), folder_view); + modest_ui_actions_create_folder (GTK_WIDGET (parent_win), folder_view); return; case GTK_RESPONSE_NONE: case GTK_RESPONSE_CANCEL: @@ -4838,7 +4906,8 @@ on_move_to_dialog_response (GtkDialog *dialog, } /* Free the helper and exit */ - g_object_unref (helper->list); + if (helper->list) + g_object_unref (helper->list); g_slice_free (MoveToInfo, helper); gtk_widget_destroy (GTK_WIDGET (dialog)); } @@ -5006,40 +5075,42 @@ move_to_cb (ModestMailOperation *mail_op, gpointer user_data) { MoveToHelper *helper = (MoveToHelper *) user_data; + GObject *object = modest_mail_operation_get_source (mail_op); /* Note that the operation could have failed, in that case do nothing */ - if (modest_mail_operation_get_status (mail_op) == - MODEST_MAIL_OPERATION_STATUS_SUCCESS) { - - GObject *object = modest_mail_operation_get_source (mail_op); - if (MODEST_IS_MSG_VIEW_WINDOW (object)) { - ModestMsgViewWindow *self = MODEST_MSG_VIEW_WINDOW (object); + if (modest_mail_operation_get_status (mail_op) != + MODEST_MAIL_OPERATION_STATUS_SUCCESS) + goto frees; - if (!modest_msg_view_window_select_next_message (self) && - !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) && - gtk_tree_row_reference_valid (helper->reference)) { - GtkWidget *header_view; - GtkTreePath *path; - GtkTreeSelection *sel; + if (MODEST_IS_MSG_VIEW_WINDOW (object)) { + ModestMsgViewWindow *self = MODEST_MSG_VIEW_WINDOW (object); - 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); - /* We need to unselect the previous one - because we could be copying instead of - moving */ - gtk_tree_selection_unselect_all (sel); - gtk_tree_selection_select_path (sel, path); - gtk_tree_path_free (path); + if (!modest_msg_view_window_select_next_message (self) && + !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)); } - g_object_unref (object); - } + } else if (MODEST_IS_MAIN_WINDOW (object) && + gtk_tree_row_reference_valid (helper->reference)) { + 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); + /* We need to unselect the previous one + because we could be copying instead of + moving */ + gtk_tree_selection_unselect_all (sel); + gtk_tree_selection_select_path (sel, path); + gtk_tree_path_free (path); + } + g_object_unref (object); + + frees: /* Destroy the helper */ move_to_helper_destroyer (helper); } @@ -5077,32 +5148,34 @@ void modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op, gpointer user_data) { + GObject *win = NULL; + +#ifndef MODEST_TOOLKIT_HILDON2 ModestWindow *main_window = NULL; - + /* Disable next automatic folder selection */ main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE); /* don't create */ if (main_window) { - GObject *win = NULL; GtkWidget *folder_view = NULL; - + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window), MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view)); - + if (user_data && TNY_IS_FOLDER (user_data)) { modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), TNY_FOLDER (user_data), FALSE); } - - /* Show notification dialog only if the main window exists */ - win = modest_mail_operation_get_source (mail_op); - modest_platform_run_information_dialog ((GtkWindow *) win, - _("mail_in_ui_folder_move_target_error"), - FALSE); - if (win) - g_object_unref (win); } +#endif + /* Show notification dialog only if the main window exists */ + win = modest_mail_operation_get_source (mail_op); + modest_platform_run_information_dialog ((GtkWindow *) win, + _("mail_in_ui_folder_move_target_error"), + FALSE); + if (win) + g_object_unref (win); } static void @@ -5252,7 +5325,7 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action, * Checks if we need a connection to do the transfer and if the user * wants to connect to complete it */ -void +static void modest_ui_actions_xfer_messages_check (GtkWindow *parent_window, TnyFolderStore *src_folder, TnyList *headers, @@ -5264,8 +5337,6 @@ modest_ui_actions_xfer_messages_check (GtkWindow *parent_window, TnyAccount *src_account; gint uncached_msgs = 0; - uncached_msgs = header_list_count_uncached_msgs (headers); - /* We don't need any further check if * * 1- the source folder is local OR @@ -5287,6 +5358,7 @@ modest_ui_actions_xfer_messages_check (GtkWindow *parent_window, * offline, it'll take place the next time we get a * connection) */ + uncached_msgs = header_list_count_uncached_msgs (headers); src_account = get_account_from_folder_store (src_folder); if (uncached_msgs > 0) { guint num_headers; @@ -5309,11 +5381,11 @@ modest_ui_actions_xfer_messages_check (GtkWindow *parent_window, if (remote_folder_has_leave_on_server (src_folder) && delete_originals) { const gchar *account_name; gboolean leave_on_server; - + account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (src_account); leave_on_server = modest_account_mgr_get_leave_on_server (modest_runtime_get_account_mgr (), account_name); - + if (leave_on_server == TRUE) { *need_connection = FALSE; } else { @@ -5332,20 +5404,21 @@ static void xfer_messages_error_handler (ModestMailOperation *mail_op, gpointer user_data) { - ModestWindow *main_window = NULL; + GObject *win; + const GError *error; - /* Disable next automatic folder selection */ - main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), - FALSE); /* don't create */ - if (main_window) { - GObject *win = modest_mail_operation_get_source (mail_op); + win = modest_mail_operation_get_source (mail_op); + error = modest_mail_operation_get_error (mail_op); + + if (error && is_memory_full_error ((GError *) error)) + modest_platform_information_banner ((GtkWidget *) win, + NULL, _KR("cerm_device_memory_full")); + else modest_platform_run_information_dialog ((GtkWindow *) win, _("mail_in_ui_folder_move_target_error"), FALSE); - if (win) - g_object_unref (win); - } - move_to_helper_destroyer (user_data); + if (win) + g_object_unref (win); } typedef struct { @@ -5399,12 +5472,15 @@ xfer_messages_performer (gboolean canceled, } movehelper = g_new0 (MoveToHelper, 1); + +#ifndef MODEST_TOOLKIT_HILDON2 movehelper->banner = modest_platform_animation_banner (GTK_WIDGET (win), NULL, _CS("ckct_nw_pasting")); if (movehelper->banner != NULL) { g_object_ref (movehelper->banner); gtk_widget_show (GTK_WIDGET (movehelper->banner)); } +#endif if (MODEST_IS_MAIN_WINDOW (win)) { GtkWidget *header_view = @@ -5448,21 +5524,23 @@ on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window, MoveFolderInfo *info = (MoveFolderInfo*)user_data; GtkTreeSelection *sel; ModestMailOperation *mail_op = NULL; - + if (canceled || err || !MODEST_IS_WINDOW (parent_window)) { g_object_unref (G_OBJECT (info->src_folder)); g_object_unref (G_OBJECT (info->dst_folder)); g_free (info); return; } - + MoveToHelper *helper = g_new0 (MoveToHelper, 1); +#ifndef MODEST_TOOLKIT_HILDON2 helper->banner = modest_platform_animation_banner (GTK_WIDGET (parent_window), NULL, _CS("ckct_nw_pasting")); if (helper->banner != NULL) { g_object_ref (helper->banner); gtk_widget_show (GTK_WIDGET(helper->banner)); } +#endif /* Clean folder on header view before moving it */ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (info->folder_view)); gtk_tree_selection_unselect_all (sel); @@ -5616,6 +5694,10 @@ modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view, !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) && !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) { do_xfer = FALSE; + /* Show an error */ + modest_platform_run_information_dialog (win, + _("mail_in_ui_folder_move_target_error"), + FALSE); } else if (!TNY_IS_FOLDER (src_folder)) { g_warning ("%s: src_folder is not a TnyFolder.\n", __FUNCTION__); do_xfer = FALSE; @@ -5624,7 +5706,7 @@ modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view, if (do_xfer) { MoveFolderInfo *info = g_new0 (MoveFolderInfo, 1); DoubleConnectionInfo *connect_info = g_slice_new (DoubleConnectionInfo); - + info->src_folder = g_object_ref (src_folder); info->dst_folder = g_object_ref (dst_folder); info->delete_original = TRUE; @@ -5638,6 +5720,7 @@ modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view, TNY_FOLDER_STORE (src_folder), connect_info); } + /* Frees */ g_object_unref (src_folder); } @@ -5733,36 +5816,42 @@ modest_ui_actions_on_move_to (GtkAction *action, gboolean modest_ui_actions_on_edit_mode_move_to (ModestWindow *win) { - GtkWidget *dialog = NULL, *folder_view = NULL; - ModestMainWindow *main_window; + GtkWidget *dialog = NULL; MoveToInfo *helper = NULL; + TnyList *list_to_move; g_return_val_if_fail (MODEST_IS_WINDOW (win), FALSE); +#ifndef MODEST_TOOLKIT_HILDON2 /* Get the main window if exists */ + ModestMainWindow *main_window; if (MODEST_IS_MAIN_WINDOW (win)) main_window = MODEST_MAIN_WINDOW (win); else main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE)); /* don't create */ +#endif - /* Get the folder view widget if exists */ - if (main_window) - folder_view = modest_main_window_get_child_widget (main_window, - MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); - else - folder_view = NULL; + list_to_move = modest_platform_get_list_to_move (MODEST_WINDOW (win)); + + if (!list_to_move) + return FALSE; + + if (tny_list_get_length (list_to_move) < 1) { + g_object_unref (list_to_move); + return FALSE; + } /* Create and run the dialog */ - dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view); + dialog = create_move_to_dialog (GTK_WINDOW (win), NULL); modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), (GtkWindow *) win); /* Create helper */ helper = g_slice_new0 (MoveToInfo); - helper->list = modest_platform_get_list_to_move (MODEST_WINDOW (win)); + helper->list = list_to_move; helper->win = win; /* Listen to response signal */ @@ -5811,10 +5900,12 @@ do_headers_action (ModestWindow *win, /* Trick: do a poke status in order to speed up the signaling of observers */ - tny_folder_poke_status (folder); + if (folder) { + tny_folder_poke_status (folder); + g_object_unref (folder); + } /* Frees */ - g_object_unref (folder); g_object_unref (iter); g_object_unref (headers_list); } @@ -6143,12 +6234,19 @@ modest_ui_actions_on_open_addressbook (GtkAction *action, ModestWindow *win) void -modest_ui_actions_on_toggle_find_in_page (GtkToggleAction *action, +modest_ui_actions_on_toggle_find_in_page (GtkAction *action, ModestWindow *window) { + gboolean active; g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); - modest_msg_edit_window_toggle_find_toolbar (MODEST_MSG_EDIT_WINDOW (window), gtk_toggle_action_get_active (action)); + if (GTK_IS_TOGGLE_ACTION (action)) + active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); + else + active = TRUE; + + modest_msg_edit_window_toggle_find_toolbar (MODEST_MSG_EDIT_WINDOW (window), + active); } static void @@ -6240,7 +6338,7 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self, message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); break; case TNY_SERVICE_ERROR_SEND: - message = g_strdup (dgettext("hildon-common-strings", "sfil_ib_unable_to_send")); + message = g_strdup (_CS("sfil_ib_unable_to_send")); break; case TNY_SERVICE_ERROR_UNAVAILABLE: message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); @@ -6248,7 +6346,7 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self, default: g_warning ("%s: unexpected ERROR %d", __FUNCTION__, err->code); - message = g_strdup (dgettext("hildon-common-strings", "sfil_ib_unable_to_send")); + message = g_strdup (_CS("sfil_ib_unable_to_send")); break; } @@ -6263,63 +6361,70 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue, guint status, gpointer user_data) { - ModestMainWindow *main_window = NULL; + ModestWindow *top_window = NULL; ModestWindowMgr *mgr = NULL; - GtkWidget *folder_view = NULL, *header_view = NULL; - TnyFolderStore *selected_folder = NULL; + GtkWidget *header_view = NULL; + TnyFolder *selected_folder = NULL; TnyFolderType folder_type; mgr = modest_runtime_get_window_mgr (); - main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (mgr, - FALSE));/* don't create */ - if (!main_window) + top_window = modest_window_mgr_get_current_top (mgr); + + if (!top_window) return; - /* Check if selected folder is OUTBOX */ - folder_view = modest_main_window_get_child_widget (main_window, - MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); - header_view = modest_main_window_get_child_widget (main_window, - MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW); +#ifndef MODEST_TOOLKIT_HILDON2 + if (MODEST_IS_MAIN_WINDOW (top_window)) { + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (top_window), + MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW); + } +#else + if (MODEST_IS_HEADER_WINDOW (top_window)) { + header_view = (GtkWidget *) + modest_header_window_get_header_view (MODEST_HEADER_WINDOW (top_window)); + } +#endif - selected_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); - if (!TNY_IS_FOLDER (selected_folder)) - goto frees; + /* Get selected folder */ + selected_folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view)); + if (!selected_folder) + return; /* gtk_tree_view_column_queue_resize is only available in GTK+ 2.8 */ -#if GTK_CHECK_VERSION(2, 8, 0) - folder_type = modest_tny_folder_guess_folder_type (TNY_FOLDER (selected_folder)); - if (folder_type == TNY_FOLDER_TYPE_OUTBOX) { +#if GTK_CHECK_VERSION(2, 8, 0) + folder_type = modest_tny_folder_guess_folder_type (selected_folder); + if (folder_type == TNY_FOLDER_TYPE_OUTBOX) { GtkTreeViewColumn *tree_column; - tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (header_view), + tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (header_view), TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN); if (tree_column) gtk_tree_view_column_queue_resize (tree_column); - } -#else + } +#else /* #if GTK_CHECK_VERSION(2, 8, 0) */ gtk_widget_queue_draw (header_view); -#endif +#endif +#ifndef MODEST_TOOLKIT_HILDON2 /* Rerun dimming rules, because the message could become deletable for example */ - modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), + modest_window_check_dimming_rules_group (MODEST_WINDOW (top_window), MODEST_DIMMING_RULES_TOOLBAR); - modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), + modest_window_check_dimming_rules_group (MODEST_WINDOW (top_window), MODEST_DIMMING_RULES_MENU); - +#endif + /* Free */ - frees: - if (selected_folder != NULL) - g_object_unref (selected_folder); + g_object_unref (selected_folder); } -void +void modest_ui_actions_on_account_connection_error (GtkWindow *parent_window, TnyAccount *account) { ModestProtocolType protocol_type; ModestProtocol *protocol; gchar *error_note = NULL; - + protocol_type = modest_tny_account_get_protocol_type (account); protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), protocol_type);