* Fixes NB#100159, added a missing NULL check to fix a crash
[modest] / src / modest-ui-actions.c
index 02ff9cc..df8fd8b 100644 (file)
@@ -905,14 +905,30 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
 
                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);
+                               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);
                }
 
@@ -5789,14 +5805,15 @@ 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
@@ -5810,6 +5827,7 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
        else
                folder_view = NULL;
+#endif
 
        list_to_move = modest_platform_get_list_to_move (MODEST_WINDOW (win));
 
@@ -5822,14 +5840,14 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
        }
 
        /* 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 */
@@ -5878,10 +5896,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);
 }
@@ -6337,63 +6357,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);