2007-08-17 Murray Cumming <murrayc@murrayc.com>
[modest] / src / modest-ui-actions.c
index fbc1895..f35b31a 100644 (file)
@@ -151,12 +151,19 @@ msgs_move_to_confirmation (GtkWindow *win,
                           TnyList *headers);
 
 
-static void
-run_account_setup_wizard (ModestWindow *win)
+/* Show the account creation wizard dialog.
+ * returns: TRUE if an account was created. FALSE if the user cancelled.
+ */
+gboolean
+modest_run_account_setup_wizard (ModestWindow *win)
 {
+       gboolean result = FALSE;
        ModestEasysetupWizardDialog *wizard;
        
-       g_return_if_fail (MODEST_IS_WINDOW(win));
+       if (!win)
+               win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ());
+               
+       g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
        
        wizard = modest_easysetup_wizard_dialog_new ();
        gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win));
@@ -165,8 +172,17 @@ run_account_setup_wizard (ModestWindow *win)
         * be unusable, freezing the UI: */
        /* gtk_window_set_modal (GTK_WINDOW (wizard), TRUE); */
        
-       gtk_dialog_run (GTK_DIALOG (wizard));
+       gint dialog_response = gtk_dialog_run (GTK_DIALOG (wizard));
+       if (dialog_response == GTK_RESPONSE_CANCEL)
+               result = FALSE;
+       else {
+               /* Check whether an account was created: */
+               result = modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
+       }
+       
        gtk_widget_destroy (GTK_WIDGET (wizard));
+
+       return result;
 }
 
 
@@ -445,9 +461,9 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
 /*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
                        tny_folder_sync (folder, FALSE, &err); /* FALSE --> don't expunge */
-/*             else if (TNY_IS_CAMEL_POP_FOLDER (folder)) */
+               else if (TNY_IS_CAMEL_POP_FOLDER (folder))
 /*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
-/*                     tny_folder_sync (folder, TRUE, &err); /\* TRUE --> expunge *\/ */
+                       tny_folder_sync (folder, TRUE, &err); /* TRUE --> expunge */
                else
                        /* local folders */
 /*                     tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
@@ -568,7 +584,7 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win)
        /* This is currently only implemented for Maemo */
 #ifdef MODEST_PLATFORM_MAEMO /* Defined in config.h */
        if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
-               run_account_setup_wizard (win);
+               modest_run_account_setup_wizard (win);
                return;
        } else  {
                /* Show the list of accounts: */
@@ -674,8 +690,9 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
 
        /* if there are no accounts yet, just show the wizard */
        if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE)) {
-                       run_account_setup_wizard (win);
-                       return;
+                       const gboolean created = modest_run_account_setup_wizard (win);
+                       if (!created)
+                               return;
        }
        
        account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
@@ -700,16 +717,17 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
                goto cleanup;
        }
 
-       if (modest_account_mgr_get_bool (modest_runtime_get_account_mgr (), account_name,
-                                        MODEST_ACCOUNT_USE_SIGNATURE, FALSE)) {
-               signature = modest_account_mgr_get_string (modest_runtime_get_account_mgr (), account_name,
-                                                          MODEST_ACCOUNT_SIGNATURE, FALSE);
+       gboolean use_signature = FALSE;
+       signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr (), account_name, &use_signature);
+
+       if (use_signature) {
                blank_and_signature = g_strconcat ("\n", signature, NULL);
-               g_free (signature);
        } else {
                blank_and_signature = g_strdup ("");
        }
 
+       g_free (signature);
+
        msg = modest_tny_msg_new ("", from_str, "", "", "", blank_and_signature, NULL);
        if (!msg) {
                g_printerr ("modest: failed to create new msg\n");
@@ -724,7 +742,7 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
        
 
        /* Create and register edit window */
-       /* This is destroyed by TOOD. */
+       /* This is destroyed by TODO. */
        msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, msg_win);
@@ -810,8 +828,9 @@ open_msg_cb (ModestMailOperation *mail_op,
            (folder_type == TNY_FOLDER_TYPE_OUTBOX)) {
                /* we cannot edit without a valid account... */
                if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
-                       run_account_setup_wizard(parent_win);
-                       goto cleanup;
+                       const gboolean created = modest_run_account_setup_wizard(parent_win);
+                       if (!created)
+                               goto cleanup;
                }
                win = modest_msg_edit_window_new (msg, account, TRUE);
                
@@ -837,17 +856,15 @@ open_msg_cb (ModestMailOperation *mail_op,
                                g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
                                g_list_free (sel_list);
                                
-                               win = modest_msg_view_window_new_with_header_model (msg, 
-                                                                                   account,
-                                                                                   (const gchar*) uid,
-                                                                                   model, 
-                                                                                   row_reference);
+                               win = modest_msg_view_window_new_with_header_model (
+                                               msg, account, (const gchar*) uid,
+                                               model, row_reference);
                                gtk_tree_row_reference_free (row_reference);
                        } else {
-                               win = modest_msg_view_window_new (msg, account, (const gchar*) uid);
+                               win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
                        }
                } else {
-                       win = modest_msg_view_window_new (msg, account, (const gchar*) uid);
+                       win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
                }
                g_free (uid);
        }
@@ -1219,8 +1236,9 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
 
        /* we need an account when editing */
        if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
-               run_account_setup_wizard (win);
-               return;
+               const gboolean created = modest_run_account_setup_wizard (win);
+               if (!created)
+                       return;
        }
        
        header_list = get_selected_headers (win);
@@ -1412,21 +1430,30 @@ new_messages_arrived (ModestMailOperation *self,
                      gpointer user_data)
 {
        ModestMainWindow *win = NULL;
+       GtkWidget *folder_view = NULL;
+       TnyFolderStore *folder = NULL;
        gboolean folder_empty = FALSE;
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
        win = MODEST_MAIN_WINDOW (user_data);
 
-       if (new_messages == 0)
-               return;
-       
        /* Set contents style of headers view */
-       folder_empty = modest_main_window_get_style (win);
-       if (folder_empty) {
-               modest_main_window_set_contents_style (win,
+       if (modest_main_window_get_contents_style (win) == MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY) {
+               folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), 
+                                                                  MODEST_WIDGET_TYPE_FOLDER_VIEW);
+               folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));             
+               
+
+               folder_empty = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
+               
+               if (!folder_empty)
+                       modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
        }       
 
+       /* Notify new messages have been downloaded */
+       if (new_messages > 0)
+               modest_platform_on_new_msg ();
 }
 
 /*
@@ -1759,6 +1786,8 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        ModestMainWindow *win = NULL;
        GtkWidget *header_view;
        TnyFolder *current_folder;
+       gboolean folder_empty = TRUE;
+       gboolean all_marked_as_deleted = TRUE;
 
        g_return_if_fail (TNY_IS_FOLDER (folder));
 
@@ -1774,7 +1803,11 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        }
 
        /* Check if folder is empty and set headers view contents style */
-       if (tny_folder_get_all_count (folder) == 0) {
+       folder_empty = (tny_folder_get_all_count (folder) == 0);
+       all_marked_as_deleted = modest_header_view_is_empty (MODEST_HEADER_VIEW(header_view));
+       folder_empty = folder_empty || all_marked_as_deleted ;
+       if (folder_empty) {
+
        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);
@@ -2035,8 +2068,9 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                
        if (!account_name) {
                /* Run account setup wizard */
-               run_account_setup_wizard(MODEST_WINDOW(edit_window));
-               return;
+               const gboolean created = modest_run_account_setup_wizard(MODEST_WINDOW(edit_window));
+               if (!created)
+                       return;
        }
        
        MsgData *data = modest_msg_edit_window_get_msg_data (edit_window);
@@ -2052,8 +2086,9 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                                       account_name));
        if (!transport_account) {
                /* Run account setup wizard */
-               run_account_setup_wizard(MODEST_WINDOW(edit_window));
-               return;
+               const gboolean created = modest_run_account_setup_wizard(MODEST_WINDOW(edit_window));
+               if (!created)
+                       return;
        }
        
        gchar *from = modest_account_mgr_get_from_string (account_mgr, account_name);
@@ -2367,7 +2402,7 @@ static void
 modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
                                               gpointer user_data)
 {
-       GObject *win = modest_mail_operation_get_source (mail_op);
+       ModestMainWindow *window = MODEST_MAIN_WINDOW (user_data);
        const GError *error = NULL;
        const gchar *message = NULL;
        
@@ -2379,9 +2414,8 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
                message = _("!!! FIXME: Unable to rename");
        }
        
-       /* Show notification dialog */
-       modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, message);
-       g_object_unref (win);
+       modest_platform_information_banner (GTK_WIDGET (window), NULL,
+                                           message);
 }
 
 void 
@@ -2429,11 +2463,10 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        ModestMailOperation *mail_op;
 
                        mail_op = 
-                               modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_INFO, 
+                               modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_INFO,
                                                                               G_OBJECT(main_window),
                                                                               modest_ui_actions_rename_folder_error_handler,
-                                                                              NULL);
-
+                                                                              main_window);
 
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                         mail_op);
@@ -2443,7 +2476,6 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view),
                                                          TNY_FOLDER(folder), TRUE);
 
-
                        modest_header_view_clear ((ModestHeaderView *) header_view);
  
                        modest_mail_operation_rename_folder (mail_op,