* src/modest-platform.h:
[modest] / src / modest-ui-actions.c
index 59ac5ab..0ce163d 100644 (file)
@@ -272,7 +272,7 @@ modest_ui_actions_on_delete (GtkAction *action, ModestWindow *win)
        if (MODEST_IS_MAIN_WINDOW (win)) {
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
                                                                   MODEST_WIDGET_TYPE_HEADER_VIEW);
-               if (!GTK_WIDGET_HAS_FOCUS (header_view))
+               if (!gtk_widget_is_focus (header_view))
                        return;
        }
 
@@ -307,16 +307,15 @@ modest_ui_actions_on_delete (GtkAction *action, ModestWindow *win)
        }
 
        /* Select message */
-       if (tny_list_get_length(header_list) > 1)
-               message = g_strdup(_("emev_nc_delete_messages"));
-       else {
+       if (tny_list_get_length(header_list) == 1) {
                iter = tny_list_create_iterator (header_list);
                header = TNY_HEADER (tny_iterator_get_current (iter));
                desc = g_strdup_printf ("%s", tny_header_get_subject (header)); 
-               message = g_strdup_printf(_("emev_nc_delete_message"), desc);
                g_object_unref (header);
                g_object_unref (iter);
        }
+       message = g_strdup_printf(ngettext("emev_nc_delete_message", "emev_nc_delete_messages", 
+                                          tny_list_get_length(header_list)), desc);
 
        /* Confirmation dialog */               
        response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
@@ -475,9 +474,9 @@ modest_ui_actions_on_smtp_servers (GtkAction *action, ModestWindow *win)
        /* 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 */
@@ -659,6 +658,7 @@ open_msg_cb (ModestMailOperation *mail_op,
 cleanup:
        /* Free */
        g_free(account);
+       g_object_unref (parent_win);
        g_object_unref (msg);
        g_object_unref (folder);
        g_object_unref (header);
@@ -680,6 +680,7 @@ modest_ui_actions_get_msgs_full_error_handler (ModestMailOperation *mail_op,
 
                modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
                                                        error->message);
+               g_object_unref (win);
        }
 }
 
@@ -725,11 +726,20 @@ _modest_ui_actions_open (TnyList *headers, ModestWindow *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);
+       if (tny_list_get_length (not_opened_headers) > 1) {
+               modest_mail_operation_get_msgs_full (mail_op, 
+                                                    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_op, header, open_msg_cb, NULL);
+               g_object_unref (header);
+               g_object_unref (iter);
+       }
+
        /* Clean */
        g_object_unref (not_opened_headers);
        g_object_unref (iter);
@@ -1207,7 +1217,7 @@ modest_ui_actions_on_header_selected (ModestHeaderView *header_view,
                return;
        
        /* 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);
@@ -1277,24 +1287,11 @@ folder_refreshed_cb (const GObject *obj,
 
        /* Check if folder is empty and set headers view contents style */
        if (tny_folder_get_all_count (folder) == 0) {
-/*     printf ("DEBUG: %s: tny_folder_get_all_count() returned 0.\n", __FUNCTION__); */
+       printf ("DEBUG: %s: tny_folder_get_all_count() returned 0.\n", __FUNCTION__);
                modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
        } else {
-/*             printf ("DEBUG: %s: tny_folder_get_all_count() returned >0.\n", __FUNCTION__); */
-
-               /* Set the header view, we could change it to
-                  the empty view after the refresh. We do not
-                  need to save the configuration because we
-                  have already done that when unselecting the
-                  folder */
-               modest_main_window_set_contents_style (win, 
-                                                      MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
-
-               /* Restore configuration */
-               modest_widget_memory_restore (modest_runtime_get_conf (), 
-                                             G_OBJECT(header_view),
-                                             MODEST_CONF_HEADER_VIEW_KEY);
+               printf ("DEBUG: %s: tny_folder_get_all_count() returned >0.\n", __FUNCTION__);
        }
 }
 
@@ -1326,13 +1323,20 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_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
+                          be changed later by the refresh callback to
+                          empty */
+                       modest_main_window_set_contents_style (main_window, 
+                                                              MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
+
                        /* Set folder on header view. This function
                           will call tny_folder_refresh_async so we
                           pass a callback that will be called when
@@ -1342,6 +1346,14 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                                                       TNY_FOLDER (folder_store),
                                                       folder_refreshed_cb,
                                                       main_window);
+                       
+                       /* Restore configuration. We need to do this
+                          *after* the set_folder because the widget
+                          memory asks the header view about its
+                          folder  */
+                       modest_widget_memory_restore (modest_runtime_get_conf (), 
+                                                     G_OBJECT(header_view),
+                                                     MODEST_CONF_HEADER_VIEW_KEY);
                } else {
                        /* Update the active account */
                        modest_window_set_active_account (MODEST_WINDOW (main_window), NULL);
@@ -1578,6 +1590,8 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                }
        }
 
+       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);
@@ -1902,6 +1916,7 @@ modest_ui_actions_delete_folder_error_handler (ModestMailOperation *mail_op,
 
        modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
                                                _("mail_in_ui_folder_delete_error"));
+       g_object_unref (win);
 }
 
 static void
@@ -2194,7 +2209,6 @@ modest_ui_actions_on_copy (GtkAction *action,
                gtk_text_buffer_copy_clipboard (buffer, clipboard);
                modest_header_view_copy_selection (MODEST_HEADER_VIEW (focused_widget));
        } else if (MODEST_IS_HEADER_VIEW (focused_widget)) {
-               gboolean continue_download, ask;
                TnyList *header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (focused_widget));
                TnyIterator *iter = tny_list_create_iterator (header_list);
                TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
@@ -2202,13 +2216,15 @@ modest_ui_actions_on_copy (GtkAction *action,
                TnyAccount *account = tny_folder_get_account (folder);
                const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (account));
                /* If it's POP then ask */
-               ask = (modest_protocol_info_get_transport_store_protocol (proto_str) == 
+               gboolean ask = (modest_protocol_info_get_transport_store_protocol (proto_str) == 
                       MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
                g_object_unref (account);
                g_object_unref (folder);
                g_object_unref (header);
                g_object_unref (iter);
+               
                /* Check that the messages have been previously downloaded */
+               gboolean continue_download = TRUE;
                if (ask)
                        continue_download = download_uncached_messages (header_list, GTK_WINDOW (window));
                if (continue_download)
@@ -2332,6 +2348,10 @@ modest_ui_actions_on_select_all (GtkAction *action,
                /* Select all messages */
                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
                gtk_tree_selection_select_all (selection);
+
+               /* Set focuse on header view */
+               gtk_widget_grab_focus (header_view);
+
        } else if (GTK_IS_HTML (focused_widget)) {
                gtk_html_select_all (GTK_HTML (focused_widget));
        }
@@ -2526,16 +2546,20 @@ modest_ui_actions_on_details (GtkAction *action,
                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),
@@ -2748,17 +2772,13 @@ msgs_move_to_confirmation (GtkWindow *win,
                if (!modest_tny_folder_is_local_folder (src_folder)) {
                        const gchar *message;
                        
-                       if (tny_list_get_length (headers) == 1)
-                               if (has_retrieved_msgs (headers))
-                                       message = _("mcen_nc_move_retrieve");
-                               else
-                                       message = _("mcen_nc_move_header");
-                       else
-                               if (has_retrieved_msgs (headers))
-                                       message = _("mcen_nc_move_retrieves");
-                               else
-                                       message = _("mcen_nc_move_headers");
-                       
+                       if (has_retrieved_msgs (headers))
+                               message = ngettext ("mcen_nc_move_retrieve", "mcen_nc_move_retrieves",
+                                                   tny_list_get_length (headers));
+                       else 
+                               message = ngettext ("mcen_nc_move_header", "mcen_nc_move_headers",
+                                                   tny_list_get_length (headers));
+
                        response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
                                                                            (const gchar *) message);
                }
@@ -2791,6 +2811,7 @@ modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op,
        /* 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);
 }
 
 /*