Almost completed account creation process
This commit is contained in:
parent
a0367b6ed1
commit
f6685deaf9
@ -49,6 +49,7 @@ Account * account_new(char const * type, char const * name)
|
|||||||
}
|
}
|
||||||
free(filename);
|
free(filename);
|
||||||
account->title = NULL;
|
account->title = NULL;
|
||||||
|
account->identity = NULL;
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,12 @@
|
|||||||
|
|
||||||
|
|
||||||
/* types */
|
/* types */
|
||||||
|
typedef struct _AccountIdentity
|
||||||
|
{
|
||||||
|
char * from;
|
||||||
|
char * email;
|
||||||
|
} AccountIdentity;
|
||||||
|
|
||||||
typedef enum _AccountConfigType
|
typedef enum _AccountConfigType
|
||||||
{
|
{
|
||||||
ACT_NONE = 0,
|
ACT_NONE = 0,
|
||||||
@ -46,10 +52,12 @@ typedef struct _AccountPlugin
|
|||||||
AccountConfig * config;
|
AccountConfig * config;
|
||||||
AccountFolder ** (*folders)(void);
|
AccountFolder ** (*folders)(void);
|
||||||
} AccountPlugin;
|
} AccountPlugin;
|
||||||
|
|
||||||
typedef struct _Account
|
typedef struct _Account
|
||||||
{
|
{
|
||||||
char * name;
|
char * name;
|
||||||
char * title;
|
char * title;
|
||||||
|
AccountIdentity * identity;
|
||||||
void * handle;
|
void * handle;
|
||||||
AccountPlugin * plugin;
|
AccountPlugin * plugin;
|
||||||
} Account;
|
} Account;
|
||||||
|
116
src/callbacks.c
116
src/callbacks.c
@ -27,7 +27,7 @@ static char const _license[] = "GPLv2";
|
|||||||
|
|
||||||
const char * title[3] =
|
const char * title[3] =
|
||||||
{
|
{
|
||||||
"Account type", "Account settings", "Account confirmation"
|
"New account", "Account settings", "Account confirmation"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -298,6 +298,8 @@ void on_preferences_cancel(GtkWidget * widget, gpointer data)
|
|||||||
typedef struct _AccountData
|
typedef struct _AccountData
|
||||||
{
|
{
|
||||||
Mailer * mailer;
|
Mailer * mailer;
|
||||||
|
char * title;
|
||||||
|
AccountIdentity identity;
|
||||||
unsigned int available;
|
unsigned int available;
|
||||||
Account * account;
|
Account * account;
|
||||||
GtkWidget * settings;
|
GtkWidget * settings;
|
||||||
@ -333,13 +335,16 @@ static void _on_assistant_close(GtkWidget * widget, gpointer data);
|
|||||||
static void _on_assistant_apply(GtkWidget * widget, gpointer data);
|
static void _on_assistant_apply(GtkWidget * widget, gpointer data);
|
||||||
static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
static void _on_account_type_change(GtkWidget * widget, gpointer data);
|
static void _on_entry_changed(GtkWidget * widget, gpointer data);
|
||||||
|
static void _on_account_type_changed(GtkWidget * widget, gpointer data);
|
||||||
void on_account_new(GtkWidget * widget, gpointer data)
|
void on_account_new(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
Mailer * mailer = data;
|
Mailer * mailer = data;
|
||||||
AccountData * ad;
|
AccountData * ad;
|
||||||
GtkWidget * assistant;
|
GtkWidget * assistant;
|
||||||
GtkWidget * vbox;
|
GtkWidget * vbox;
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkSizeGroup * group;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if(mailer->available_cnt == 0)
|
if(mailer->available_cnt == 0)
|
||||||
@ -353,6 +358,8 @@ void on_account_new(GtkWidget * widget, gpointer data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ad->mailer = mailer;
|
ad->mailer = mailer;
|
||||||
|
ad->title = NULL;
|
||||||
|
memset(&ad->identity, 0, sizeof(ad->identity));
|
||||||
ad->available = 0;
|
ad->available = 0;
|
||||||
ad->account = NULL;
|
ad->account = NULL;
|
||||||
assistant = gtk_assistant_new();
|
assistant = gtk_assistant_new();
|
||||||
@ -367,11 +374,43 @@ void on_account_new(GtkWidget * widget, gpointer data)
|
|||||||
/* plug-in selection */
|
/* plug-in selection */
|
||||||
vbox = gtk_vbox_new(FALSE, 4);
|
vbox = gtk_vbox_new(FALSE, 4);
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
||||||
widget = gtk_label_new("Please select the type of account\n"
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
"you want to create now:"),
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
widget = gtk_label_new("Account title:");
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_entry_new();
|
||||||
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
|
_on_entry_changed), &ad->title);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||||
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
widget = gtk_label_new("Your name:");
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_entry_new();
|
||||||
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
|
_on_entry_changed), &(ad->identity.from));
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||||
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
widget = gtk_label_new("e-mail address:");
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_entry_new();
|
||||||
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
|
_on_entry_changed), &ad->identity.email);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||||
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
widget = gtk_label_new("Type of account:");
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
widget = gtk_combo_box_new_text();
|
widget = gtk_combo_box_new_text();
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
/* XXX this works because there is no plug-in list reload
|
/* XXX this works because there is no plug-in list reload
|
||||||
* would it be implemented this will need validation later */
|
* would it be implemented this will need validation later */
|
||||||
for(i = 0; i < mailer->available_cnt; i++)
|
for(i = 0; i < mailer->available_cnt; i++)
|
||||||
@ -379,8 +418,9 @@ void on_account_new(GtkWidget * widget, gpointer data)
|
|||||||
mailer->available[i].title);
|
mailer->available[i].title);
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
|
||||||
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
_on_account_type_change), ad);
|
_on_account_type_changed), ad);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||||
gtk_widget_show_all(vbox);
|
gtk_widget_show_all(vbox);
|
||||||
gtk_assistant_append_page(GTK_ASSISTANT(assistant), vbox);
|
gtk_assistant_append_page(GTK_ASSISTANT(assistant), vbox);
|
||||||
gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), vbox, title[0]);
|
gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), vbox, title[0]);
|
||||||
@ -599,7 +639,7 @@ static void _on_assistant_apply(GtkWidget * widget, gpointer data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget * _account_config_update(AccountConfig * config);
|
static GtkWidget * _account_config_update(AccountConfig * config);
|
||||||
static GtkWidget * _account_config_display(AccountConfig * config);
|
static GtkWidget * _account_display(Account * account);
|
||||||
static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
@ -619,6 +659,7 @@ static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
|||||||
account_delete(ad->account);
|
account_delete(ad->account);
|
||||||
ac = &ad->mailer->available[ad->available];
|
ac = &ad->mailer->available[ad->available];
|
||||||
ad->account = account_new("account", ac->name);
|
ad->account = account_new("account", ac->name);
|
||||||
|
account_set_title(ad->account, ad->title);
|
||||||
}
|
}
|
||||||
if(ad->account == NULL)
|
if(ad->account == NULL)
|
||||||
ad->settings = gtk_label_new("Could not load plug-in");
|
ad->settings = gtk_label_new("Could not load plug-in");
|
||||||
@ -626,15 +667,13 @@ static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
|||||||
{
|
{
|
||||||
ad->settings = _account_config_update(
|
ad->settings = _account_config_update(
|
||||||
ad->account->plugin->config);
|
ad->account->plugin->config);
|
||||||
account_set_title(ad->account, ac->title);
|
|
||||||
}
|
}
|
||||||
gtk_container_add(GTK_CONTAINER(page), ad->settings);
|
gtk_container_add(GTK_CONTAINER(page), ad->settings);
|
||||||
}
|
}
|
||||||
else if(i == 2)
|
else if(i == 2)
|
||||||
{
|
{
|
||||||
gtk_container_remove(GTK_CONTAINER(page), ad->confirm);
|
gtk_container_remove(GTK_CONTAINER(page), ad->confirm);
|
||||||
ad->confirm = _account_config_display(
|
ad->confirm = _account_display(ad->account);
|
||||||
ad->account->plugin->config);
|
|
||||||
gtk_container_add(GTK_CONTAINER(page), ad->confirm);
|
gtk_container_add(GTK_CONTAINER(page), ad->confirm);
|
||||||
}
|
}
|
||||||
old = i;
|
old = i;
|
||||||
@ -648,8 +687,6 @@ static GtkWidget * _update_uint16(AccountConfig * config, GtkSizeGroup * group);
|
|||||||
static GtkWidget * _update_boolean(AccountConfig * config);
|
static GtkWidget * _update_boolean(AccountConfig * config);
|
||||||
static GtkWidget * _account_config_update(AccountConfig * config)
|
static GtkWidget * _account_config_update(AccountConfig * config)
|
||||||
/* FIXME append ":" to labels */
|
/* FIXME append ":" to labels */
|
||||||
/* FIXME consider working on a temporary plug-in instance instead
|
|
||||||
* of the available ones */
|
|
||||||
{
|
{
|
||||||
GtkWidget * vbox;
|
GtkWidget * vbox;
|
||||||
GtkSizeGroup * group;
|
GtkSizeGroup * group;
|
||||||
@ -680,6 +717,8 @@ static GtkWidget * _account_config_update(AccountConfig * config)
|
|||||||
case ACT_BOOLEAN:
|
case ACT_BOOLEAN:
|
||||||
widget = _update_boolean(&config[i]);
|
widget = _update_boolean(&config[i]);
|
||||||
break;
|
break;
|
||||||
|
default: /* should not happen */
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
||||||
}
|
}
|
||||||
@ -687,7 +726,6 @@ static GtkWidget * _account_config_update(AccountConfig * config)
|
|||||||
return vbox;
|
return vbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _on_string_changed(GtkWidget * widget, gpointer data);
|
|
||||||
static GtkWidget * _update_string(AccountConfig * config, GtkSizeGroup * group)
|
static GtkWidget * _update_string(AccountConfig * config, GtkSizeGroup * group)
|
||||||
{
|
{
|
||||||
GtkWidget * hbox;
|
GtkWidget * hbox;
|
||||||
@ -702,27 +740,11 @@ static GtkWidget * _update_string(AccountConfig * config, GtkSizeGroup * group)
|
|||||||
gtk_entry_set_text(GTK_ENTRY(widget), config->value);
|
gtk_entry_set_text(GTK_ENTRY(widget), config->value);
|
||||||
gtk_size_group_add_widget(group, widget);
|
gtk_size_group_add_widget(group, widget);
|
||||||
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
_on_string_changed), &config->value);
|
_on_entry_changed), &config->value);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
return hbox;
|
return hbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _on_string_changed(GtkWidget * widget, gpointer data)
|
|
||||||
{
|
|
||||||
const char * text;
|
|
||||||
char ** value = data;
|
|
||||||
char * p;
|
|
||||||
|
|
||||||
text = gtk_entry_get_text(GTK_ENTRY(widget));
|
|
||||||
if((p = realloc(*value, strlen(text)+1)) == NULL)
|
|
||||||
{
|
|
||||||
mailer_error(NULL, strerror(errno), 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
*value = p;
|
|
||||||
strcpy(p, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget * _update_password(AccountConfig * config,
|
static GtkWidget * _update_password(AccountConfig * config,
|
||||||
GtkSizeGroup * group)
|
GtkSizeGroup * group)
|
||||||
{
|
{
|
||||||
@ -739,7 +761,7 @@ static GtkWidget * _update_password(AccountConfig * config,
|
|||||||
gtk_entry_set_text(GTK_ENTRY(widget), config->value);
|
gtk_entry_set_text(GTK_ENTRY(widget), config->value);
|
||||||
gtk_size_group_add_widget(group, widget);
|
gtk_size_group_add_widget(group, widget);
|
||||||
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
_on_string_changed), &config->value);
|
_on_entry_changed), &config->value);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
return hbox;
|
return hbox;
|
||||||
}
|
}
|
||||||
@ -757,6 +779,7 @@ static GtkWidget * _update_file(AccountConfig * config, GtkSizeGroup * group)
|
|||||||
GTK_FILE_CHOOSER_ACTION_OPEN);
|
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||||
gtk_file_chooser_button_set_title(GTK_FILE_CHOOSER_BUTTON(widget),
|
gtk_file_chooser_button_set_title(GTK_FILE_CHOOSER_BUTTON(widget),
|
||||||
config->title);
|
config->title);
|
||||||
|
/* FIXME implement signal handler */
|
||||||
gtk_size_group_add_widget(group, widget);
|
gtk_size_group_add_widget(group, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
return hbox;
|
return hbox;
|
||||||
@ -816,9 +839,11 @@ static GtkWidget * _display_uint16(AccountConfig * config,
|
|||||||
GtkSizeGroup * group);
|
GtkSizeGroup * group);
|
||||||
static GtkWidget * _display_boolean(AccountConfig * config,
|
static GtkWidget * _display_boolean(AccountConfig * config,
|
||||||
GtkSizeGroup * group);
|
GtkSizeGroup * group);
|
||||||
static GtkWidget * _account_config_display(AccountConfig * config)
|
static GtkWidget * _account_display(Account * account)
|
||||||
/* FIXME append ":" to labels */
|
/* FIXME append ":" to labels */
|
||||||
{
|
{
|
||||||
|
AccountConfig * config = account->plugin->config;
|
||||||
|
AccountConfig p;
|
||||||
GtkWidget * vbox;
|
GtkWidget * vbox;
|
||||||
GtkSizeGroup * group;
|
GtkSizeGroup * group;
|
||||||
GtkWidget * widget;
|
GtkWidget * widget;
|
||||||
@ -827,6 +852,11 @@ static GtkWidget * _account_config_display(AccountConfig * config)
|
|||||||
vbox = gtk_vbox_new(FALSE, 4);
|
vbox = gtk_vbox_new(FALSE, 4);
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
||||||
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
|
p.name = NULL;
|
||||||
|
p.title = "Account title";
|
||||||
|
p.value = account->title;
|
||||||
|
widget = _display_string(&p, group);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
||||||
for(i = 0; config[i].name != NULL; i++)
|
for(i = 0; config[i].name != NULL; i++)
|
||||||
{
|
{
|
||||||
switch(config[i].type)
|
switch(config[i].type)
|
||||||
@ -848,6 +878,8 @@ static GtkWidget * _account_config_display(AccountConfig * config)
|
|||||||
case ACT_BOOLEAN:
|
case ACT_BOOLEAN:
|
||||||
widget = _display_boolean(&config[i], group);
|
widget = _display_boolean(&config[i], group);
|
||||||
break;
|
break;
|
||||||
|
default: /* should not happen */
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
||||||
}
|
}
|
||||||
@ -931,7 +963,23 @@ static GtkWidget * _display_boolean(AccountConfig * config,
|
|||||||
return hbox;
|
return hbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _on_account_type_change(GtkWidget * widget, gpointer data)
|
static void _on_entry_changed(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
const char * text;
|
||||||
|
char ** value = data;
|
||||||
|
char * p;
|
||||||
|
|
||||||
|
text = gtk_entry_get_text(GTK_ENTRY(widget));
|
||||||
|
if((p = realloc(*value, strlen(text)+1)) == NULL)
|
||||||
|
{
|
||||||
|
mailer_error(NULL, strerror(errno), 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*value = p;
|
||||||
|
strcpy(p, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_account_type_changed(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
AccountData * ad = data;
|
AccountData * ad = data;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user