[Simplifying how default account is stored and used internally, fixes
2001-07-18 Jason Leach <jleach@ximian.com> [Simplifying how default account is stored and used internally, fixes possabilities of having multiple default accounts and things like deleting the current default account] * mail-account-gui.c (mail_account_gui_new): Update for new way of finding out the default account. (mail_account_gui_save): Ditto. * mail-accounts.c (load_accounts): Ditto. * mail-config-druid.c (make_default_account): Ditto. * mail-config.c: Added an int MailConfig::default_account, to be used instead of a 'default_account' boolean on each mail account. (mail_config_set_default_account_num): New function, facilitates things. * Mail.idl: removed the Account::default_account boolean. svn path=/trunk/; revision=11218
This commit is contained in:
@ -1,3 +1,24 @@
|
||||
2001-07-18 Jason Leach <jleach@ximian.com>
|
||||
|
||||
[Simplifying how default account is stored and used internally,
|
||||
fixes possabilities of having multiple default accounts and things
|
||||
like deleting the current default account]
|
||||
|
||||
* mail-account-gui.c (mail_account_gui_new): Update for new way of
|
||||
finding out the default account.
|
||||
(mail_account_gui_save): Ditto.
|
||||
|
||||
* mail-accounts.c (load_accounts): Ditto.
|
||||
|
||||
* mail-config-druid.c (make_default_account): Ditto.
|
||||
|
||||
* mail-config.c: Added an int MailConfig::default_account, to be
|
||||
used instead of a 'default_account' boolean on each mail account.
|
||||
(mail_config_set_default_account_num): New function, facilitates
|
||||
things.
|
||||
|
||||
* Mail.idl: removed the Account::default_account boolean.
|
||||
|
||||
2001-07-18 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* mail-tools.c (mail_tool_generate_forward_subject): Do what was
|
||||
|
||||
@ -61,7 +61,6 @@ module Evolution {
|
||||
|
||||
struct Account {
|
||||
string name;
|
||||
boolean default_account;
|
||||
|
||||
Identity id;
|
||||
Service source;
|
||||
|
||||
@ -1131,7 +1131,9 @@ mail_account_gui_new (MailConfigAccount *account)
|
||||
gui->default_account = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "management_default"));
|
||||
if (account->name)
|
||||
e_utf8_gtk_entry_set_text (gui->account_name, account->name);
|
||||
gtk_toggle_button_set_active (gui->default_account, account->default_account);
|
||||
if (!mail_config_get_default_account()
|
||||
|| (account == mail_config_get_default_account()))
|
||||
gtk_toggle_button_set_active (gui->default_account, TRUE);
|
||||
|
||||
/* Identity */
|
||||
gui->full_name = GTK_ENTRY (glade_xml_get_widget (gui->xml, "identity_full_name"));
|
||||
@ -1531,8 +1533,9 @@ mail_account_gui_save (MailAccountGui *gui)
|
||||
|
||||
g_free (account->name);
|
||||
account->name = e_utf8_gtk_entry_get_text (gui->account_name);
|
||||
account->default_account = gtk_toggle_button_get_active (gui->default_account);
|
||||
|
||||
if (gtk_toggle_button_get_active (gui->default_account))
|
||||
mail_config_set_default_account (account);
|
||||
|
||||
/* construct the identity */
|
||||
identity_destroy (account->id);
|
||||
account->id = g_new0 (MailConfigIdentity, 1);
|
||||
|
||||
@ -110,15 +110,18 @@ load_accounts (MailAccountsDialog *dialog)
|
||||
const MailConfigAccount *account;
|
||||
const GSList *node = dialog->accounts;
|
||||
int i = 0;
|
||||
|
||||
int default_account;
|
||||
|
||||
gtk_clist_freeze (dialog->mail_accounts);
|
||||
|
||||
gtk_clist_clear (dialog->mail_accounts);
|
||||
|
||||
default_account = mail_config_get_default_account_num ();
|
||||
|
||||
while (node) {
|
||||
CamelURL *url;
|
||||
gchar *text[3];
|
||||
|
||||
|
||||
account = node->data;
|
||||
|
||||
if (account->source && account->source->url)
|
||||
@ -129,7 +132,7 @@ load_accounts (MailAccountsDialog *dialog)
|
||||
text[0] = (account->source && account->source->enabled) ? "+" : "";
|
||||
text[1] = account->name;
|
||||
text[2] = g_strdup_printf ("%s%s", url && url->protocol ? url->protocol : _("None"),
|
||||
account->default_account ? _(" (default)") : "");
|
||||
(i == default_account) ? _(" (default)") : "");
|
||||
|
||||
if (url)
|
||||
camel_url_free (url);
|
||||
@ -310,6 +313,7 @@ mail_delete (GtkButton *button, gpointer data)
|
||||
len = dialog->accounts ? g_slist_length ((GSList *) dialog->accounts) : 0;
|
||||
if (len > 0) {
|
||||
row = sel >= len ? len - 1 : sel;
|
||||
load_accounts (dialog);
|
||||
gtk_clist_select_row (dialog->mail_accounts, row, 0);
|
||||
} else {
|
||||
dialog->accounts_row = -1;
|
||||
|
||||
@ -164,7 +164,6 @@ create_html (const char *name)
|
||||
static void
|
||||
druid_cancel (GnomeDruid *druid, gpointer user_data)
|
||||
{
|
||||
/* Cancel the setup of the account */
|
||||
MailConfigDruid *config = user_data;
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (config));
|
||||
@ -173,17 +172,23 @@ druid_cancel (GnomeDruid *druid, gpointer user_data)
|
||||
static void
|
||||
druid_finish (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
|
||||
{
|
||||
/* Cancel the setup of the account */
|
||||
MailConfigDruid *druid = user_data;
|
||||
MailAccountGui *gui = druid->gui;
|
||||
GSList *mini;
|
||||
|
||||
|
||||
/* Add the account to our list (do it first because future
|
||||
steps might want to access config->accounts) */
|
||||
mail_config_add_account (gui->account);
|
||||
|
||||
/* Save the settings for that account */
|
||||
mail_account_gui_save (gui);
|
||||
if (gui->account->source)
|
||||
gui->account->source->enabled = TRUE;
|
||||
mail_config_add_account (gui->account);
|
||||
|
||||
/* Write out the config info */
|
||||
mail_config_write ();
|
||||
|
||||
|
||||
/* Load up this new account */
|
||||
mini = g_slist_prepend (NULL, gui->account);
|
||||
mail_load_storages (druid->shell, mini, TRUE);
|
||||
g_slist_free (mini);
|
||||
@ -376,15 +381,13 @@ management_changed (GtkWidget *widget, gpointer data)
|
||||
|
||||
|
||||
static MailConfigAccount *
|
||||
make_default_account (void)
|
||||
make_account (void)
|
||||
{
|
||||
MailConfigAccount *account;
|
||||
char *name, *user;
|
||||
struct utsname uts;
|
||||
|
||||
account = g_new0 (MailConfigAccount, 1);
|
||||
if (!mail_config_get_default_account)
|
||||
account->default_account = TRUE;
|
||||
|
||||
account->id = g_new0 (MailConfigIdentity, 1);
|
||||
name = g_get_real_name ();
|
||||
@ -450,7 +453,7 @@ construct (MailConfigDruid *druid)
|
||||
MailConfigAccount *account;
|
||||
int i;
|
||||
|
||||
account = make_default_account ();
|
||||
account = make_account ();
|
||||
druid->gui = mail_account_gui_new (account);
|
||||
|
||||
/* get our toplevel widget and reparent it */
|
||||
|
||||
@ -70,6 +70,8 @@ typedef struct {
|
||||
gboolean empty_trash_on_exit;
|
||||
|
||||
GSList *accounts;
|
||||
gint default_account;
|
||||
|
||||
GSList *news;
|
||||
|
||||
char *pgp_path;
|
||||
@ -91,7 +93,8 @@ static MailConfig *config = NULL;
|
||||
|
||||
/* Prototypes */
|
||||
static void config_read (void);
|
||||
static gint mail_config_get_default_account_num (void);
|
||||
static void mail_config_set_default_account_num (gint new_default);
|
||||
|
||||
|
||||
/* Identity */
|
||||
MailConfigIdentity *
|
||||
@ -173,7 +176,6 @@ account_copy (const MailConfigAccount *account)
|
||||
|
||||
new = g_new0 (MailConfigAccount, 1);
|
||||
new->name = g_strdup (account->name);
|
||||
new->default_account = account->default_account;
|
||||
|
||||
new->id = identity_copy (account->id);
|
||||
new->source = service_copy (account->source);
|
||||
@ -280,9 +282,6 @@ config_read (void)
|
||||
len = bonobo_config_get_long_with_default (config->db,
|
||||
"/Mail/Accounts/num", 0, NULL);
|
||||
|
||||
default_num = bonobo_config_get_long_with_default (config->db,
|
||||
"/Mail/Accounts/default_account", 0, NULL);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
MailConfigAccount *account;
|
||||
MailConfigIdentity *id;
|
||||
@ -295,11 +294,6 @@ config_read (void)
|
||||
account->name = bonobo_config_get_string (config->db, path, NULL);
|
||||
g_free (path);
|
||||
|
||||
if (default_num == i)
|
||||
account->default_account = TRUE;
|
||||
else
|
||||
account->default_account = FALSE;
|
||||
|
||||
path = g_strdup_printf ("/Mail/Accounts/account_drafts_folder_name_%d", i);
|
||||
val = bonobo_config_get_string (config->db, path, NULL);
|
||||
g_free (path);
|
||||
@ -447,7 +441,13 @@ config_read (void)
|
||||
|
||||
config->accounts = g_slist_append (config->accounts, account);
|
||||
}
|
||||
|
||||
|
||||
|
||||
default_num = bonobo_config_get_long_with_default (config->db,
|
||||
"/Mail/Accounts/default_account", 0, NULL);
|
||||
|
||||
mail_config_set_default_account_num (default_num);
|
||||
|
||||
#ifdef ENABLE_NNTP
|
||||
/* News */
|
||||
|
||||
@ -1268,25 +1268,20 @@ mail_config_get_default_account (void)
|
||||
{
|
||||
const MailConfigAccount *account;
|
||||
GSList *l;
|
||||
MailConfigAccount *retval;
|
||||
|
||||
if (!config->accounts)
|
||||
return NULL;
|
||||
|
||||
/* find the default account */
|
||||
l = config->accounts;
|
||||
while (l) {
|
||||
account = l->data;
|
||||
if (account->default_account)
|
||||
return account;
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
|
||||
/* none are marked as default so mark the first one as the default */
|
||||
account = config->accounts->data;
|
||||
mail_config_set_default_account (account);
|
||||
|
||||
return account;
|
||||
|
||||
retval = g_slist_nth_data (config->accounts,
|
||||
config->default_account);
|
||||
|
||||
/* Looks like we have no default, so make the first account
|
||||
the default */
|
||||
if (retval == NULL)
|
||||
mail_config_set_default_account_num (0);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
const MailConfigAccount *
|
||||
@ -1340,64 +1335,46 @@ mail_config_get_accounts (void)
|
||||
void
|
||||
mail_config_add_account (MailConfigAccount *account)
|
||||
{
|
||||
if (account->default_account) {
|
||||
/* Un-defaultify other accounts */
|
||||
GSList *node = config->accounts;
|
||||
|
||||
while (node) {
|
||||
MailConfigAccount *acnt = node->data;
|
||||
|
||||
acnt->default_account = FALSE;
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
}
|
||||
|
||||
config->accounts = g_slist_append (config->accounts, account);
|
||||
}
|
||||
|
||||
const GSList *
|
||||
mail_config_remove_account (MailConfigAccount *account)
|
||||
{
|
||||
/* Removing the current default, so make the first account the
|
||||
default */
|
||||
if (account == mail_config_get_default_account ())
|
||||
config->default_account = 0;
|
||||
|
||||
config->accounts = g_slist_remove (config->accounts, account);
|
||||
account_destroy (account);
|
||||
|
||||
|
||||
return config->accounts;
|
||||
}
|
||||
|
||||
static gint
|
||||
gint
|
||||
mail_config_get_default_account_num (void)
|
||||
{
|
||||
int i = 0;
|
||||
GSList *node = config->accounts;
|
||||
return config->default_account;
|
||||
}
|
||||
|
||||
while (node) {
|
||||
MailConfigAccount *account = node->data;
|
||||
|
||||
if (account->default_account)
|
||||
return i;
|
||||
|
||||
i++;
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
static void
|
||||
mail_config_set_default_account_num (gint new_default)
|
||||
{
|
||||
config->default_account = new_default;
|
||||
}
|
||||
|
||||
void
|
||||
mail_config_set_default_account (const MailConfigAccount *account)
|
||||
{
|
||||
GSList *node = config->accounts;
|
||||
|
||||
while (node) {
|
||||
MailConfigAccount *acnt = node->data;
|
||||
gint position = 0;
|
||||
|
||||
position = g_slist_index (config->accounts, (void*)account);
|
||||
|
||||
config->default_account = position;
|
||||
|
||||
acnt->default_account = FALSE;
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
((MailConfigAccount *) account)->default_account = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
const MailConfigIdentity *
|
||||
@ -1630,7 +1607,6 @@ impl_GNOME_Evolution_MailConfig_addAccount (PortableServer_Servant servant,
|
||||
|
||||
mail_account = g_new0 (MailConfigAccount, 1);
|
||||
mail_account->name = g_strdup (account->name);
|
||||
mail_account->default_account = account->default_account;
|
||||
|
||||
/* Copy ID */
|
||||
id = account->id;
|
||||
|
||||
@ -51,7 +51,6 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
gchar *name;
|
||||
gboolean default_account;
|
||||
|
||||
MailConfigIdentity *id;
|
||||
MailConfigService *source;
|
||||
@ -164,11 +163,13 @@ const char *mail_config_get_default_charset (void);
|
||||
void mail_config_set_default_charset (const char *charset);
|
||||
|
||||
const MailConfigAccount *mail_config_get_default_account (void);
|
||||
gint mail_config_get_default_account_num (void);
|
||||
const MailConfigAccount *mail_config_get_account_by_name (const char *account_name);
|
||||
const MailConfigAccount *mail_config_get_account_by_source_url (const char *url);
|
||||
const GSList *mail_config_get_accounts (void);
|
||||
void mail_config_add_account (MailConfigAccount *account);
|
||||
const GSList *mail_config_remove_account (MailConfigAccount *account);
|
||||
|
||||
void mail_config_set_default_account (const MailConfigAccount *account);
|
||||
|
||||
const MailConfigIdentity *mail_config_get_default_identity (void);
|
||||
|
||||
Reference in New Issue
Block a user