diff options
author | Milan Crha <mcrha@redhat.com> | 2012-01-02 21:32:29 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2012-01-02 21:32:29 +0800 |
commit | a822d5da967c9d98d50cad83b9e36b1404195a19 (patch) | |
tree | 1bed0ccb3f91af04f7e97a37bb9649acbe8b1889 /mail | |
parent | d41d432ccbcac3e527c351198584ab516d99ff24 (diff) | |
download | gsoc2013-evolution-a822d5da967c9d98d50cad83b9e36b1404195a19.tar.gz gsoc2013-evolution-a822d5da967c9d98d50cad83b9e36b1404195a19.tar.zst gsoc2013-evolution-a822d5da967c9d98d50cad83b9e36b1404195a19.zip |
Bug #641154 - Crash in emae_check_authtype_done
Diffstat (limited to 'mail')
-rw-r--r-- | mail/em-account-editor.c | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/mail/em-account-editor.c b/mail/em-account-editor.c index 7164dbe53f..674c846973 100644 --- a/mail/em-account-editor.c +++ b/mail/em-account-editor.c @@ -267,6 +267,22 @@ static void emae_account_folder_changed (EMFolderSelectionButton *folder, EMAcco G_DEFINE_TYPE (EMAccountEditor, em_account_editor, G_TYPE_OBJECT) static void +emae_config_gone_cb (gpointer pemae, GObject *pconfig) +{ + EMAccountEditor *emae = pemae; + struct _EMConfig *config = (struct _EMConfig *) pconfig; + + if (!emae) + return; + + if (emae->config == config) + emae->config = NULL; + + if (emae->priv && emae->priv->config == config) + emae->priv->config = NULL; +} + +static void emae_config_target_changed_cb (EMAccountEditor *emae) { e_config_target_changed ( @@ -875,6 +891,9 @@ emae_finalize (GObject *object) EMAccountEditor *emae = EM_ACCOUNT_EDITOR (object); EMAccountEditorPrivate *priv = emae->priv; + if (priv->config) + g_object_weak_unref ((GObject *) priv->config, emae_config_gone_cb, emae); + if (priv->sig_added_id) { ESignatureList *signatures; @@ -2472,7 +2491,9 @@ emae_check_authtype_done (CamelService *camel_service, available_authtypes = camel_service_query_auth_types_finish ( camel_service, result, &error); - editor = E_CONFIG (service->emae->config)->window; + editor = NULL; + if (service->emae && service->emae->config && E_IS_CONFIG (service->emae->config)) + editor = E_CONFIG (service->emae->config)->window; if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_warn_if_fail (available_authtypes == NULL); @@ -2480,10 +2501,11 @@ emae_check_authtype_done (CamelService *camel_service, } else if (error != NULL) { g_warn_if_fail (available_authtypes == NULL); - e_alert_run_dialog_for_args ( - GTK_WINDOW (service->check_dialog), - "mail:checking-service-error", - error->message, NULL); + if (service->check_dialog) + e_alert_run_dialog_for_args ( + GTK_WINDOW (service->check_dialog), + "mail:checking-service-error", + error->message, NULL); g_error_free (error); } else { @@ -2493,7 +2515,10 @@ emae_check_authtype_done (CamelService *camel_service, g_list_free (available_authtypes); } - gtk_widget_destroy (service->check_dialog); + if (service->check_dialog) { + g_object_weak_unref (G_OBJECT (service->check_dialog), (GWeakNotify) g_nullify_pointer, &service->check_dialog); + gtk_widget_destroy (service->check_dialog); + } service->check_dialog = NULL; if (editor != NULL) @@ -2570,6 +2595,7 @@ emae_check_authtype (GtkWidget *w, service->check_dialog = e_alert_dialog_new_for_args ( parent, "mail:checking-service", NULL); + g_object_weak_ref (G_OBJECT (service->check_dialog), (GWeakNotify) g_nullify_pointer, &service->check_dialog); g_object_ref (service->emae); @@ -5273,6 +5299,8 @@ em_account_editor_construct (EMAccountEditor *emae, ec, "commit", G_CALLBACK (emae_commit), emae); + g_object_weak_ref (G_OBJECT (ec), emae_config_gone_cb, emae); + emae->config = priv->config = ec; l = NULL; for (i = 0; items[i].path; i++) |