X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-account-view-window.c;h=8e4a312a8cb49accd0b8257d1903f217f08712a9;hb=60da25f18dac811da77c20f86f5022bbc1aa5649;hp=100ad77130d189ff7111518f482024fd5952bf6f;hpb=2be20dcb84c401585cfb8d7f545aee3e6ae7864f;p=modest diff --git a/src/maemo/modest-account-view-window.c b/src/maemo/modest-account-view-window.c index 100ad77..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,14 +293,24 @@ 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); } @@ -376,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) @@ -390,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) { @@ -399,14 +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")); @@ -427,16 +401,22 @@ button_box_new (ModestAccountViewWindow *self) 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* @@ -513,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"));