X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-account-view-window.c;h=6698fc367eeb9c24773a0673d6dbffb5f9d25b6b;hp=cec187eb5e4d75878d66165d53d082ebac07fddc;hb=f541209a85cb6c71c79da1df81afbe10c448690a;hpb=cf91ea78db899fb9c9327f9fdba81fa7f1f899d0 diff --git a/src/maemo/modest-account-view-window.c b/src/maemo/modest-account-view-window.c index cec187e..6698fc3 100644 --- a/src/maemo/modest-account-view-window.c +++ b/src/maemo/modest-account-view-window.c @@ -153,12 +153,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 +185,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 +212,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); } @@ -340,14 +339,22 @@ on_edit_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) } 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 +362,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)) { @@ -391,8 +398,6 @@ 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) { @@ -420,14 +425,21 @@ 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); + /* 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; @@ -482,10 +494,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)); } }