X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-account-view-window.c;h=8e4a312a8cb49accd0b8257d1903f217f08712a9;hp=cec187eb5e4d75878d66165d53d082ebac07fddc;hb=4d39841513a3a7f7aa9d38ab97cb9fcc9171e80b;hpb=cf91ea78db899fb9c9327f9fdba81fa7f1f899d0 diff --git a/src/maemo/modest-account-view-window.c b/src/maemo/modest-account-view-window.c index cec187e..8e4a312 100644 --- a/src/maemo/modest-account-view-window.c +++ b/src/maemo/modest-account-view-window.c @@ -35,6 +35,8 @@ #include #include "modest-platform.h" +#include "modest-ui-actions.h" +#include "modest-account-protocol.h" #include #include #include "modest-tny-platform-factory.h" @@ -153,12 +155,12 @@ on_selection_changed (GtkTreeSelection *sel, ModestAccountViewWindow *self) static gboolean check_for_active_account (ModestAccountViewWindow *self, const gchar* account_name) { + ModestTnySendQueue *send_queue; ModestTnyAccountStore *acc_store; ModestMailOperationQueue* queue; - TnyConnectionStatus store_conn_status, transport_conn_status; + TnyConnectionStatus store_conn_status; TnyAccount *store_account = NULL, *transport_account = NULL; - gboolean retval = TRUE; - gboolean do_disconnect = TRUE; + gboolean retval = TRUE, sending = FALSE; acc_store = modest_runtime_get_account_store (); queue = modest_runtime_get_mail_operation_queue (); @@ -185,24 +187,26 @@ check_for_active_account (ModestAccountViewWindow *self, const gchar* account_na return FALSE; } - store_conn_status = tny_account_get_connection_status (store_account); - transport_conn_status = tny_account_get_connection_status (transport_account); + /* If the transport account was not used yet, then the send + queue could not exist (it's created on demand) */ + send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (transport_account), FALSE); + if (TNY_IS_SEND_QUEUE (send_queue)) + sending = modest_tny_send_queue_sending_in_progress (send_queue); - if (store_conn_status == TNY_CONNECTION_STATUS_CONNECTED || - transport_conn_status == TNY_CONNECTION_STATUS_CONNECTED) { + store_conn_status = tny_account_get_connection_status (store_account); + if (store_conn_status == TNY_CONNECTION_STATUS_CONNECTED || sending) { gint response; response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), _("emev_nc_disconnect_account")); - do_disconnect = (response == FALSE); if (response == GTK_RESPONSE_OK) { retval = TRUE; } else { retval = FALSE; } - } + } - if (do_disconnect) { + if (retval) { /* FIXME: We should only cancel those of this account */ modest_mail_operation_queue_cancel_all (queue); @@ -210,13 +214,10 @@ check_for_active_account (ModestAccountViewWindow *self, const gchar* account_na /* Also disconnect the account */ if ((tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED) && (tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED_BROKEN)) { - tny_account_cancel (store_account); tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account), FALSE, NULL, NULL); } - if ((tny_account_get_connection_status (transport_account) != TNY_CONNECTION_STATUS_DISCONNECTED) && - (tny_account_get_connection_status (transport_account) != TNY_CONNECTION_STATUS_DISCONNECTED_BROKEN)) { - tny_account_cancel (transport_account); + if (sending) { tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (transport_account), FALSE, NULL, NULL); } @@ -240,49 +241,12 @@ on_delete_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) account_mgr = modest_runtime_get_account_mgr(); account_name = modest_account_view_get_selected_account (priv->account_view); - if(!account_name) - return; - account_title = modest_account_mgr_get_display_name(account_mgr, account_name); - /* This could happen if the account is being deleted */ - if (!account_title) - return; - - if (check_for_active_account (self, account_name)) { - /* The warning text depends on the account type: */ - gchar *txt = NULL; - gint response; - - if (modest_account_mgr_get_store_protocol (account_mgr, account_name) - == MODEST_PROTOCOL_STORE_POP) { - txt = g_strdup_printf (_("emev_nc_delete_mailbox"), - account_title); - } else { - txt = g_strdup_printf (_("emev_nc_delete_mailboximap"), - account_title); - } - - response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), txt); - g_free (txt); - txt = NULL; - - if (response == GTK_RESPONSE_OK) { - /* Remove account. If it succeeds then it also removes - the account from the ModestAccountView: */ - gboolean is_default = FALSE; - gchar *default_account_name = modest_account_mgr_get_default_account (account_mgr); - if (default_account_name && (strcmp (default_account_name, account_name) == 0)) - is_default = TRUE; - g_free (default_account_name); - - gboolean removed = modest_account_mgr_remove_account (account_mgr, account_name); - if (!removed) { - g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__); - } - } - g_free (account_title); - } + if (check_for_active_account (self, account_name)) + modest_ui_actions_on_delete_account (GTK_WINDOW (self), account_name, account_title); + + g_free (account_title); g_free (account_name); } @@ -313,6 +277,7 @@ on_account_settings_dialog_response (GtkDialog *dialog, /* Free */ g_free (account_name); + g_object_unref (store_account); } static void @@ -328,26 +293,44 @@ on_edit_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) * the user wishes. */ if (check_for_active_account (self, account_name)) { - GtkWidget *dialog = modest_tny_account_store_show_account_settings_dialog (modest_runtime_get_account_store (), account_name); - - /* When the dialog is closed, reconnect */ - g_signal_connect (dialog, "response", - G_CALLBACK (on_account_settings_dialog_response), - self); + ModestAccountProtocol *proto; + ModestProtocolType proto_type; + + /* Get proto */ + proto_type = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (), + account_name); + proto = (ModestAccountProtocol *) + modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), + proto_type); + + /* Create and show the dialog */ + if (proto && MODEST_IS_ACCOUNT_PROTOCOL (proto)) { + ModestAccountSettingsDialog *dialog = + modest_account_protocol_get_account_settings_dialog (proto, account_name); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), (GtkWindow *) self); + gtk_widget_show (GTK_WIDGET (dialog)); + } } - g_free (account_name); } static void -on_wizard_response (GtkDialog *dialog, gint response, gpointer user_data) +on_wizard_response (GtkDialog *dialog, + gint response, + gpointer user_data) { /* The response has already been handled by the wizard dialog itself, * creating the new account. */ - /* Destroy the dialog: */ if (dialog) gtk_widget_destroy (GTK_WIDGET (dialog)); + + /* Re-focus the account list view widget */ + if (MODEST_IS_ACCOUNT_VIEW_WINDOW (user_data)) { + ModestAccountViewWindowPrivate *priv; + priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (user_data); + gtk_widget_grab_focus (GTK_WIDGET (priv->account_view)); + } } static void @@ -355,7 +338,7 @@ on_new_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) { GtkDialog *wizard; GtkWindow *dialog; - + /* Show the easy-setup wizard: */ dialog = modest_window_mgr_get_modal (modest_runtime_get_window_mgr()); if (dialog && MODEST_IS_EASYSETUP_WIZARD_DIALOG(dialog)) { @@ -368,7 +351,8 @@ on_new_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) /* there is no such wizard yet */ wizard = GTK_DIALOG (modest_easysetup_wizard_dialog_new ()); modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), - GTK_WINDOW (wizard)); + GTK_WINDOW (wizard), + GTK_WINDOW (self)); /* if there is already another modal dialog, make it non-modal */ if (dialog) @@ -382,7 +366,6 @@ on_new_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) gtk_widget_show (GTK_WIDGET (wizard)); } - static void on_close_button_clicked (GtkWidget *button, gpointer user_data) { @@ -391,16 +374,13 @@ on_close_button_clicked (GtkWidget *button, gpointer user_data) gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_OK); } - - -static GtkWidget* -button_box_new (ModestAccountViewWindow *self) +static void +setup_button_box (ModestAccountViewWindow *self, GtkButtonBox *box) { ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self); - GtkWidget *button_box = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (button_box), 6); - gtk_button_box_set_layout (GTK_BUTTON_BOX (button_box), + gtk_button_box_set_spacing (GTK_BUTTON_BOX (box), 6); + gtk_button_box_set_layout (GTK_BUTTON_BOX (box), GTK_BUTTONBOX_START); priv->new_button = gtk_button_new_from_stock(_("mcen_bd_new")); @@ -420,17 +400,23 @@ button_box_new (ModestAccountViewWindow *self) g_signal_connect (G_OBJECT(priv->close_button), "clicked", G_CALLBACK(on_close_button_clicked), self); - - gtk_box_pack_start (GTK_BOX(button_box), priv->new_button, FALSE, FALSE,2); - gtk_box_pack_start (GTK_BOX(button_box), priv->edit_button, FALSE, FALSE,2); - gtk_box_pack_start (GTK_BOX(button_box), priv->delete_button, FALSE, FALSE,2); - gtk_box_pack_start (GTK_BOX(button_box), priv->close_button, FALSE, FALSE,2); - gtk_widget_set_sensitive (priv->edit_button, FALSE); - gtk_widget_set_sensitive (priv->delete_button, FALSE); + gtk_box_pack_start (GTK_BOX(box), priv->new_button, FALSE, FALSE,2); + gtk_box_pack_start (GTK_BOX(box), priv->edit_button, FALSE, FALSE,2); + gtk_box_pack_start (GTK_BOX(box), priv->delete_button, FALSE, FALSE,2); + gtk_box_pack_start (GTK_BOX(box), priv->close_button, FALSE, FALSE,2); + + /* Should has been created by window_vbox_new */ + if (priv->account_view) { + GtkTreeSelection *sel; + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(priv->account_view)); + if (gtk_tree_selection_count_selected_rows (sel) == 0) { + gtk_widget_set_sensitive (priv->edit_button, FALSE); + gtk_widget_set_sensitive (priv->delete_button, FALSE); + } + } - gtk_widget_show_all (button_box); - return button_box; + gtk_widget_show_all (GTK_WIDGET (box)); } static GtkWidget* @@ -482,10 +468,16 @@ on_account_removed (ModestAccountMgr *acc_mgr, const gchar *account, gpointer user_data) { + ModestAccountViewWindowPrivate *priv; + /* If there is no account left then close the window */ if (!modest_account_mgr_has_accounts (acc_mgr, TRUE)) { gboolean ret_value; g_signal_emit_by_name (G_OBJECT (user_data), "delete-event", NULL, &ret_value); + } else { + /* Re-focus the account list view widget */ + priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (user_data); + gtk_widget_grab_focus (GTK_WIDGET (priv->account_view)); } } @@ -501,9 +493,7 @@ modest_account_view_window_new (void) window_vbox_new (MODEST_ACCOUNT_VIEW_WINDOW (self)), TRUE, TRUE, 2); - gtk_box_pack_start (GTK_BOX((GTK_DIALOG (self)->action_area)), - button_box_new (MODEST_ACCOUNT_VIEW_WINDOW (self)), - TRUE, TRUE, 2); + setup_button_box (MODEST_ACCOUNT_VIEW_WINDOW (self), GTK_BUTTON_BOX (GTK_DIALOG (self)->action_area)); gtk_window_set_title (GTK_WINDOW (self), _("mcen_ti_emailsetup_accounts"));