X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=1138e6e6f3df262f402e1eccce9ef50a5de80d27;hp=945a469cf05258b8c0a244de750801e8ea4dc7b1;hb=e45958deaf9701399c552ea0d84c2447efacd4ca;hpb=cc379b2109f5c1b1a70419454d1a0e53c26559e6 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 945a469..1138e6e 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -48,6 +48,9 @@ #include #include #include +#ifdef MODEST_TOOLKIT_HILDON2 +#include +#endif #ifdef MODEST_PLATFORM_MAEMO #include "maemo/modest-osso-state-saving.h" @@ -88,6 +91,8 @@ #include #define MIN_FREE_SPACE 5 * 1024 * 1024 +#define MOVE_FOLDER_OK_BUTTON "ok-button" +#define MOVE_FOLDER_NEW_BUTTON "new-button" typedef struct _GetMsgAsyncHelper { ModestWindow *window; @@ -445,6 +450,8 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) if (header) { gchar *subject; subject = tny_header_dup_subject (header); + if (!subject) + subject = g_strdup (_("mail_va_no_subject")); desc = g_strdup_printf ("%s", subject); g_free (subject); g_object_unref (header); @@ -526,11 +533,11 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win) } /* Free */ - if (next_row_reference != NULL) + if (gtk_tree_row_reference_valid (next_row_reference)) gtk_tree_row_reference_free (next_row_reference); if (next_path != NULL) gtk_tree_path_free (next_path); - if (prev_row_reference != NULL) + if (gtk_tree_row_reference_valid (prev_row_reference)) gtk_tree_row_reference_free (prev_row_reference); if (prev_path != NULL) gtk_tree_path_free (prev_path); @@ -713,7 +720,12 @@ modest_ui_actions_compose_msg(ModestWindow *win, if (attachments && modest_platform_check_memory_low (win, TRUE)) goto cleanup; - account_name = modest_account_mgr_get_default_account(mgr); +#ifdef MODEST_TOOLKIT_HILDON2 + account_name = g_strdup (modest_window_get_active_account(win)); +#endif + if (!account_name) { + account_name = modest_account_mgr_get_default_account(mgr); + } if (!account_name) { g_printerr ("modest: no account found\n"); goto cleanup; @@ -753,7 +765,10 @@ modest_ui_actions_compose_msg(ModestWindow *win, allowed_size = MODEST_MAX_ATTACHMENT_SIZE; msg_win = modest_msg_edit_window_new (msg, account_name, FALSE); - modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, NULL); + if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, NULL)) { + gtk_widget_destroy (GTK_WIDGET (msg_win)); + goto cleanup; + } modest_msg_edit_window_set_modified (MODEST_MSG_EDIT_WINDOW (msg_win), set_as_modified); gtk_widget_show_all (GTK_WIDGET (msg_win)); @@ -820,6 +835,19 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op, 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; + 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); + modest_platform_run_information_dialog (NULL, msg, FALSE); + g_free (msg); + g_free (subject); + } + /* Remove the header from the preregistered uids */ modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), header); @@ -974,7 +1002,10 @@ open_msg_cb (ModestMailOperation *mail_op, /* Register and show new window */ if (win != NULL) { mgr = modest_runtime_get_window_mgr (); - modest_window_mgr_register_window (mgr, win, NULL); + if (!modest_window_mgr_register_window (mgr, win, NULL)) { + gtk_widget_destroy (GTK_WIDGET (win)); + goto cleanup; + } gtk_widget_show_all (GTK_WIDGET(win)); } @@ -1208,7 +1239,8 @@ open_msgs_performer(gboolean canceled, protocol = modest_protocol_registry_get_protocol_by_type (protocol_registry, proto); error_msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject); - g_free (subject); + if (subject) + g_free (subject); g_object_unref (header); g_object_unref (iter); @@ -1549,6 +1581,8 @@ reply_forward_cb (ModestMailOperation *mail_op, edit_type = MODEST_EDIT_TYPE_FORWARD; break; default: + modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), + header); g_return_if_reached (); return; } @@ -1585,6 +1619,11 @@ reply_forward_cb (ModestMailOperation *mail_op, gtk_widget_show_all (GTK_WIDGET (msg_win)); cleanup: + /* We always unregister the header because the message is + forwarded or replied so the original one is no longer + opened */ + modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), + header); if (new_msg) g_object_unref (G_OBJECT (new_msg)); if (account) @@ -1663,6 +1702,7 @@ reply_forward_performer (gboolean canceled, } /* Retrieve the message */ + modest_window_mgr_register_header (modest_runtime_get_window_mgr (), rf_helper->header, NULL); mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT (parent_window), modest_ui_actions_disk_operations_error_handler, NULL, NULL); @@ -2649,7 +2689,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi gchar *account_name, *from; ModestAccountMgr *account_mgr; gboolean had_error = FALSE; - ModestMainWindow *win; + ModestMainWindow *win = NULL; g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE); @@ -2711,6 +2751,14 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi on_save_to_drafts_cb, g_object_ref(edit_window)); +#ifdef MODEST_TOOLKIT_HILDON2 + /* In hildon2 we always show the information banner on saving to drafts. + * It will be a system information banner in this case. + */ + gchar *text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts")); + modest_platform_information_banner (NULL, NULL, text); + g_free (text); +#else /* Use the main window as the parent of the banner, if the main window does not exist it won't be shown, if the parent window exists then it's properly shown. We don't use the @@ -2723,6 +2771,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi modest_platform_information_banner (GTK_WIDGET (win), NULL, text); g_free (text); } +#endif modest_msg_edit_window_set_modified (edit_window, FALSE); /* Frees */ @@ -4234,38 +4283,7 @@ headers_action_show_details (TnyHeader *header, gpointer user_data) { - GtkWidget *dialog; - - /* Create dialog */ - dialog = modest_details_dialog_new_with_header (GTK_WINDOW (window), header); - - /* Run dialog */ - modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), (GtkWindow *) window); - gtk_widget_show_all (dialog); - - g_signal_connect_swapped (dialog, "response", - G_CALLBACK (gtk_widget_destroy), - dialog); -} - -/* - * Show the folder details in a ModestDetailsDialog widget - */ -static void -show_folder_details (TnyFolder *folder, - GtkWindow *window) -{ - GtkWidget *dialog; - - /* Create dialog */ - 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)); - - gtk_widget_destroy (dialog); + modest_platform_run_header_details_dialog (GTK_WINDOW (window), header); } /* @@ -4319,7 +4337,8 @@ modest_ui_actions_on_details (GtkAction *action, /* 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)); + modest_platform_run_folder_details_dialog (GTK_WINDOW (win), + TNY_FOLDER (folder_store)); } g_object_unref (folder_store); @@ -4451,7 +4470,6 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self, { GtkWidget *dialog = NULL; GtkWidget *ok_button = NULL, *new_button = NULL; - GList *children = NULL; gboolean ok_sensitive = TRUE, new_sensitive = TRUE; gboolean moving_folder = FALSE; gboolean is_local_account = TRUE; @@ -4468,15 +4486,8 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self, if (!dialog) return; - children = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area)); -#ifndef MODEST_TOOLKIT_GTK - ok_button = GTK_WIDGET (children->next->next->data); - new_button = GTK_WIDGET (children->next->data); -#else - ok_button = GTK_WIDGET (children->data); - new_button = GTK_WIDGET (children->next->next->data); -#endif - g_list_free (children); + ok_button = g_object_get_data (G_OBJECT (dialog), MOVE_FOLDER_OK_BUTTON); + new_button = g_object_get_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON); /* check if folder_store is an remote account */ if (TNY_IS_ACCOUNT (folder_store)) { @@ -4503,7 +4514,10 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self, MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS)); } g_object_unref (local_account); - g_object_unref (mmc_account); + + /* It could not exist */ + if (mmc_account) + g_object_unref (mmc_account); } /* Check the target folder rules */ @@ -4606,8 +4620,13 @@ create_move_to_dialog (GtkWindow *win, GtkWidget *folder_view, GtkWidget **tree_view) { - GtkWidget *dialog, *scroll; - GtkWidget *new_button; + GtkWidget *dialog; +#ifdef MODEST_TOOLKIT_HILDON2 + GtkWidget *pannable; +#else + GtkWidget *scroll; +#endif + GtkWidget *new_button, *ok_button; dialog = gtk_dialog_new_with_buttons (_("mcen_ti_moveto_folders_title"), GTK_WINDOW (win), @@ -4615,12 +4634,15 @@ create_move_to_dialog (GtkWindow *win, NULL); #ifndef MODEST_TOOLKIT_GTK - gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_ok"), GTK_RESPONSE_ACCEPT); + ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_ok"), GTK_RESPONSE_ACCEPT); /* We do this manually so GTK+ does not associate a response ID for * the button. */ new_button = gtk_button_new_from_stock (_("mcen_bd_new")); gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dialog)->action_area), new_button, FALSE, FALSE, 0); + gtk_widget_show (new_button); +#ifndef MODEST_TOOLKIT_HILDON2 gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_cancel"), GTK_RESPONSE_REJECT); +#endif #else /* We do this manually so GTK+ does not associate a response ID for * the button. */ @@ -4628,16 +4650,22 @@ create_move_to_dialog (GtkWindow *win, gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), new_button, FALSE, FALSE, 0); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (dialog)->action_area), new_button, TRUE); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT); - gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT); + ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT); gtk_container_set_border_width (GTK_CONTAINER (dialog), 12); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 24); #endif + g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_OK_BUTTON, ok_button); + g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON, new_button); /* Create scrolled window */ +#ifdef MODEST_TOOLKIT_HILDON2 + pannable = hildon_pannable_area_new (); +#else scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); +#endif #ifdef MODEST_TOOLKIT_GTK gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN); @@ -4715,11 +4743,17 @@ create_move_to_dialog (GtkWindow *win, /* Hide special folders */ modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (*tree_view), FALSE); +#ifdef MODEST_TOOLKIT_HILDON2 + gtk_container_add (GTK_CONTAINER (pannable), *tree_view); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), + pannable, TRUE, TRUE, 0); +#else gtk_container_add (GTK_CONTAINER (scroll), *tree_view); - /* Add scroll to dialog */ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), scroll, TRUE, TRUE, 0); +#endif + gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox)); #ifndef MODEST_TOOLKIT_GTK @@ -4804,8 +4838,10 @@ move_to_helper_destroyer (gpointer user_data) gtk_widget_destroy (GTK_WIDGET (helper->banner)); g_object_unref (helper->banner); } - if (helper->reference != NULL) + if (gtk_tree_row_reference_valid (helper->reference)) { gtk_tree_row_reference_free (helper->reference); + helper->reference = NULL; + } g_free (helper); } @@ -4829,7 +4865,8 @@ move_to_cb (ModestMailOperation *mail_op, /* 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) { + } else if (MODEST_IS_MAIN_WINDOW (object) && + gtk_tree_row_reference_valid (helper->reference)) { GtkWidget *header_view; GtkTreePath *path; GtkTreeSelection *sel; @@ -6031,7 +6068,8 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue, tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (header_view), TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN); - gtk_tree_view_column_queue_resize (tree_column); + if (tree_column) + gtk_tree_view_column_queue_resize (tree_column); } #else gtk_widget_queue_draw (header_view); @@ -6111,7 +6149,8 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win) subject = tny_header_dup_subject (header); msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject); - g_free (subject); + if (subject) + g_free (subject); if (msg == NULL) { msg = g_strdup_printf (_("mail_ni_ui_folder_get_msg_folder_error")); }