diff options
author | Jon Trowbridge <trow@ximian.com> | 2001-06-07 05:09:20 +0800 |
---|---|---|
committer | Jon Trowbridge <trow@src.gnome.org> | 2001-06-07 05:09:20 +0800 |
commit | f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a (patch) | |
tree | 24e03835f0e3216ded55b1b248efbb530367f75a /mail/mail-accounts.c | |
parent | c77b7e30202573c1c4ab54086388202d93181b45 (diff) | |
download | gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.tar gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.tar.gz gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.tar.bz2 gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.tar.lz gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.tar.xz gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.tar.zst gsoc2013-evolution-f15bb6a3ebcadfc4dbe8e9d2a2c82c98ac2da35a.zip |
Check that the chain of deferences in gui->account->source->url is safe.
2001-06-06 Jon Trowbridge <trow@ximian.com>
* mail-account-gui.c (source_type_changed): Check that the chain
of deferences in gui->account->source->url is safe. This was
causing a segfault when adding a new account if any of the
existing accounts had their sources set to "None".
(i.e. gui->account->source == NULL)
* mail-accounts.c (load_accounts): Check that account->source !=
NULL before dereferencing it.
(load_accounts): The selection is cleared when the account clist
is rebuilt (say after a call to add), but no unselect event is
emitted. Yes, the clist is evil. We work around this by
explictly calling mail_unselect, our unselect signal handler.
(Otherwise, the edit and delete buttons remain sensitive and
accounts_row != 0, but the user can't see which row the dialog
thinks is selected.)
(load_news): Check the account->source != NULL before
dereferencing it.
(mail_unselect): If an insensitive button in a button box has the
focus, and if you hit tab, there is a segfault deep inside of gtk.
This is probably a gtk bug. We work around it by having the add
button (which is always sensitive) grab the focus on an unselect.
svn path=/trunk/; revision=10136
Diffstat (limited to 'mail/mail-accounts.c')
-rw-r--r-- | mail/mail-accounts.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index 78317336cd..47dc311107 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -40,6 +40,8 @@ static void mail_accounts_dialog_class_init (MailAccountsDialogClass *class); static void mail_accounts_dialog_init (MailAccountsDialog *dialog); static void mail_accounts_dialog_finalise (GtkObject *obj); +static void mail_unselect (GtkCList *clist, gint row, gint column, GdkEventButton *event, gpointer data); + static GnomeDialogClass *parent_class; @@ -111,7 +113,7 @@ load_accounts (MailAccountsDialog *dialog) account = node->data; - if (account->source->url) + if (account->source && account->source->url) url = camel_url_new (account->source->url, NULL); else url = NULL; @@ -135,6 +137,13 @@ load_accounts (MailAccountsDialog *dialog) } gtk_clist_thaw (dialog->mail_accounts); + + /* + * The selection gets cleared when we rebuild the clist, but no + * unselect event is emitted. So we simulate it here. + * I hate the clist. + */ + mail_unselect (dialog->mail_accounts, 0, 0, NULL, dialog); } #ifdef ENABLE_NNTP @@ -155,7 +164,7 @@ load_news (MailAccountsDialog *dialog) account = node->data; - if (account->source->url) + if (account->source && account->source->url) url = camel_url_new (account->source->url, NULL); else url = NULL; @@ -210,6 +219,13 @@ mail_unselect (GtkCList *clist, gint row, gint column, GdkEventButton *event, gp gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_delete), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_default), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_able), FALSE); + + /* + * If an insensitive button in a button box has the focus, and if you hit tab, + * there is a segfault. I think that this might be a gtk bug. Anyway, this + * is a workaround. + */ + gtk_widget_grab_focus (GTK_WIDGET (dialog->mail_add)); } static void |