* Now ModestWindowMgr, methods close_all_windows and register_window now
[modest] / src / modest-ui-actions.c
index 945a469..4522f18 100644 (file)
@@ -88,6 +88,8 @@
 #include <gtkhtml/gtkhtml.h>
 
 #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;
@@ -713,7 +715,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 +760,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));
 
@@ -974,7 +984,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));
        }
 
@@ -1549,6 +1562,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 +1600,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 +1683,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);
@@ -2711,6 +2732,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 +2752,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 */
@@ -4451,7 +4481,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 +4497,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)) {
@@ -4607,7 +4629,7 @@ create_move_to_dialog (GtkWindow *win,
                       GtkWidget **tree_view)
 {
        GtkWidget *dialog, *scroll;
-       GtkWidget *new_button;
+       GtkWidget *new_button, *ok_button;
 
        dialog = gtk_dialog_new_with_buttons (_("mcen_ti_moveto_folders_title"),
                                              GTK_WINDOW (win),
@@ -4615,12 +4637,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,10 +4653,12 @@ 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 */
        scroll = gtk_scrolled_window_new (NULL, NULL);
@@ -6031,7 +6058,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);