enum {
ACCOUNT_NAME,
ACCOUNT_HOST,
+ ACCOUNT_PROT,
ACCOUNT_COLUMNS
};
typedef struct _CallbackData CallbackData;
struct _CallbackData {
- GtkWidget *id_tree_view;
- GtkWidget *acc_tree_view;
+ GtkTreeView *id_tree_view;
+ GtkTreeView *acc_tree_view;
ModestUI *modest_ui;
GladeXML *glade_xml;
};
static void
-identity_setup_dialog (ModestUI *, GtkListStore *, gchar *);
+identity_setup_dialog (ModestUI *, GtkTreeModel *, gchar *);
+
+static void
+account_setup_dialog (ModestUI *, gchar *);
static void
missing_notification(GtkWindow *, gchar *);
+static GtkTreeModel *
+create_identities_model(ModestIdentityMgr *);
+
+static GtkTreeModel *
+create_accounts_model(ModestAccountMgr *);
+
+static void
+refresh_identities(ModestIdentityMgr *,
+ GladeXML *);
+
+static void
+refresh_accounts(ModestAccountMgr *, GladeXML *glade_xml);
+
/* CALLBACKS */
+static gboolean
+filter_transports (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer userdata) {
+
+ gchar *name;
+ gboolean retval;
+
+ gtk_tree_model_get(model,
+ iter,
+ ACCOUNT_PROT, &name,
+ -1);
+
+ retval = strcasecmp(name, "SMTP")==0;
+ g_free(name);
+ return retval;
+}
+
+
+static void
+account_edit_action(GtkWidget *button,
+ gpointer userdata) {
+
+ CallbackData *cb_data;
+ GtkTreeModel *acc_liststore;
+ GtkTreeSelection *selection;
+ GtkTreeIter selected_iter;
+ gchar *account_name;
+
+ cb_data = (CallbackData *) userdata;
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
+
+ gtk_tree_selection_get_selected(selection,
+ &acc_liststore,
+ &selected_iter);
+ gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
+ &selected_iter,
+ ACCOUNT_NAME, &account_name,
+ -1);
+
+ account_setup_dialog (cb_data->modest_ui, account_name);
+ g_free(account_name);
+}
+
static void
-edit_action(GtkWidget *button,
- gpointer userdata)
+account_create_action(GtkWidget *button,
+ gpointer userdata) {
+ CallbackData *cb_data;
+
+ cb_data = (CallbackData *) userdata;
+
+ account_setup_dialog(cb_data->modest_ui, NULL);
+}
+
+static void
+account_delete_action(GtkWidget *button,
+ gpointer userdata) {
+ CallbackData *cb_data;
+ GtkTreeSelection *selection;
+ GtkTreeIter selected_iter;
+ GtkTreeModel *acc_liststore;
+ GtkWidget *confirmation_dialog;
+ GtkWidget *confirmation_message;
+ ModestUIPrivate *priv;
+ gchar *account_name;
+ gchar *message;
+ gint result;
+
+ cb_data = (CallbackData *) userdata;
+ priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
+
+ gtk_tree_selection_get_selected(selection,
+ &acc_liststore,
+ &selected_iter);
+ gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
+ &selected_iter,
+ ACCOUNT_NAME, &account_name,
+ -1);
+
+ confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of account",
+ GTK_WINDOW(gtk_widget_get_toplevel(button)),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NULL);
+
+ message = g_strdup_printf("Remove selected account '%s'?", account_name);
+ confirmation_message = gtk_label_new_with_mnemonic (message);
+
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
+
+ gtk_widget_show_all(confirmation_dialog);
+
+ result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
+ if (result==GTK_RESPONSE_OK)
+ {
+ modest_account_mgr_remove_server_account(priv->modest_acc_mgr,
+ account_name,
+ NULL);
+ }
+
+ gtk_widget_destroy(confirmation_dialog);
+ g_free(account_name);
+ g_free(message);
+}
+
+
+static void
+identity_edit_action(GtkWidget *button,
+ gpointer userdata)
{
CallbackData *cb_data;
- GtkListStore *acc_liststore;
+ GtkTreeModel *acc_liststore;
GtkTreeModel *id_liststore;
GtkTreeSelection *selection;
GtkTreeIter selected_iter;
&selected_iter);
gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
&selected_iter,
- ACCOUNT_NAME, &identity_name,
+ IDENTITY_NAME, &identity_name,
-1);
- acc_liststore=GTK_LIST_STORE(gtk_tree_view_get_model (GTK_TREE_VIEW(cb_data->acc_tree_view)));
+ /* We use the available tree model from the accounts page to display a selection
+ * of transports in the identities. Since we only want the transport accounts,
+ * we derive a gtk_tree_model_filter and apply filter_transports function.
+ */
+ acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
+ NULL);
+ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
+ filter_transports,
+ NULL,
+ NULL);
identity_setup_dialog (cb_data->modest_ui, acc_liststore, identity_name);
g_free(identity_name);
}
static void
-create_action(GtkWidget *button,
- gpointer userdata)
+identity_create_action(GtkWidget *button,
+ gpointer userdata)
{
CallbackData *cb_data;
- GtkListStore *acc_liststore;
+ GtkTreeModel *acc_liststore;
cb_data = (CallbackData *) userdata;
- acc_liststore=GTK_LIST_STORE(gtk_tree_view_get_model (GTK_TREE_VIEW(cb_data->acc_tree_view)));
+ /* Works as in identity_edit_action. */
+ acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
+ NULL);
+ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
+ filter_transports,
+ NULL,
+ NULL);
identity_setup_dialog(cb_data->modest_ui, acc_liststore, NULL);
+ g_object_unref(acc_liststore);
}
static void
-delete_action(GtkWidget *button,
- gpointer userdata)
+identity_delete_action(GtkWidget *button,
+ gpointer userdata)
{
CallbackData *cb_data;
GtkTreeSelection *selection;
GtkTreeIter selected_iter;
GtkTreeModel *id_liststore;
- gchar *identity_name;
GtkWidget *confirmation_dialog;
GtkWidget *confirmation_message;
+ ModestUIPrivate *priv;
+ gchar *identity_name;
+ gchar *message;
gint result;
cb_data = (CallbackData *) userdata;
+ priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
gtk_tree_selection_get_selected(selection,
GTK_RESPONSE_CANCEL,
NULL);
- gchar *messy = g_strdup_printf("Remove selected identity '%s'?", identity_name);
- confirmation_message = gtk_label_new_with_mnemonic (messy);
+ message = g_strdup_printf("Remove selected identity '%s'?", identity_name);
+ confirmation_message = gtk_label_new_with_mnemonic (message);
- gtk_container_add(GTK_CONTAINER(confirmation_dialog),
- confirmation_message);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
gtk_widget_show_all(confirmation_dialog);
result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
if (result==GTK_RESPONSE_OK)
{
- modest_identity_mgr_remove_identity(MODEST_UI_GET_PRIVATE(cb_data->modest_ui)->modest_id_mgr,
+ modest_identity_mgr_remove_identity(priv->modest_id_mgr,
identity_name,
NULL);
}
+
gtk_widget_destroy(confirmation_dialog);
g_free(identity_name);
- g_free(messy);
-
+ g_free(message);
}
static void
}
static void
+activate_buttons_on_account(GtkTreeView *tree_view,
+ gpointer user_data)
+{
+ GtkWidget *button;
+ GladeXML *glade_xml;
+
+ glade_xml=(GladeXML *) user_data;
+
+ button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
+ gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
+ button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
+ gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
+}
+
+static void
use_sig_toggled(GtkToggleButton *button,
gpointer userdata) {
gtk_widget_set_sensitive(awidget, gtk_toggle_button_get_active(button));
}
+static void
+refresh_accounts_on_add(ModestAccountMgr *modest_acc_mgr,
+ void *nu1,
+ gpointer userdata)
+{
+ refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
+}
+
+static void
+refresh_accounts_on_remove(ModestAccountMgr *modest_acc_mgr,
+ void *nu1,
+ gpointer userdata) {
+
+ GladeXML *glade_xml = (GladeXML *) userdata;
+ GtkWidget *button;
+
+ refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
+ /* Since we loose the selection through the delete operation, we need to
+ * change the buttons sensitivity .
+ */
+ button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
+ gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
+ button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
+ gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
+}
+
+static void
+refresh_accounts_on_change(ModestAccountMgr *modest_acc_mgr,
+ void *nu1,
+ void *nu2,
+ void *nu3,
+ gpointer userdata)
+{
+ refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
+}
+
+static void
+refresh_identities_on_add(ModestIdentityMgr *modest_id_mgr,
+ void *nu1,
+ gpointer userdata) {
+ refresh_identities(modest_id_mgr, (GladeXML *) userdata);
+}
+
+static void
+refresh_identities_on_remove(ModestIdentityMgr *modest_id_mgr,
+ void *nu1,
+ gpointer userdata) {
+
+ GladeXML *glade_xml = (GladeXML *) userdata;
+ GtkWidget *button;
+
+ refresh_identities(modest_id_mgr, glade_xml);
+
+ /* Since we loose the selection through the delete operation, we need to
+ * change the buttons sensitivity .
+ */
+ button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
+ gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
+ button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
+ gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
+}
+
+static void
+refresh_identities_on_change(ModestIdentityMgr *modest_id_mgr,
+ void *nu1,
+ void *nu2,
+ void *nu3,
+ gpointer userdata) {
+ refresh_identities(modest_id_mgr, (GladeXML *) userdata);
+}
+
/* METHODS */
+static gboolean
+search_model_column_for_string_advanced(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search, gboolean mcase) {
+
+ gchar *tmptext;
+ gboolean iter_true;
+
+ iter_true = gtk_tree_model_get_iter_first(model, iter);
+ while (iter_true) {
+ gtk_tree_model_get(model,
+ iter,
+ ColNum, &tmptext,
+ -1);
+ if ((mcase && strcasecmp(tmptext, search)==0)
+ || strcmp(tmptext, search)==0) {
+ g_free(tmptext);
+ break;
+ }
+ g_free(tmptext);
+ iter_true = gtk_tree_model_iter_next(model, iter);
+ if (!iter_true) {
+ break;
+ }
+ }
+ return iter_true;
+}
+
+static gboolean
+search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
+ return search_model_column_for_string_advanced(model, iter, ColNum, search, FALSE);
+}
+
+static gboolean
+case_search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
+ return search_model_column_for_string_advanced(model, iter, ColNum, search, TRUE);
+}
+
+static void
+refresh_identities(ModestIdentityMgr *modest_id_mgr,
+ GladeXML *glade_xml) {
+
+ GtkTreeModel *id_liststore;
+ GtkTreeView *id_treeview;
+
+ id_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
+
+ id_liststore=create_identities_model(modest_id_mgr);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(id_treeview), id_liststore);
+}
+
+static void
+refresh_accounts(ModestAccountMgr *modest_acc_mgr,
+ GladeXML *glade_xml) {
+
+ GtkTreeModel *acc_liststore;
+ GtkTreeView *acc_treeview;
+
+ acc_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
+
+ acc_liststore=create_accounts_model(modest_acc_mgr);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(acc_treeview), acc_liststore);
+}
+
static void
missing_notification(GtkWindow *parent, gchar *info_message) {
+
GtkWidget *DenyDialog;
DenyDialog=gtk_message_dialog_new(parent,
}
static gboolean
-add_identity(GladeXML *glade_xml, ModestUI *modest_ui, GtkListStore *accounts_model)
-{
- gchar *reply_to;
+write_identity(GladeXML *glade_xml, ModestUI *modest_ui, GtkTreeModel *accounts_model, gboolean newidentity) {
+
GtkTextBuffer *sigbuff;
- gchar *signature;
GtkTextIter start_iter;
GtkTextIter end_iter;
GtkTreeIter transport_iter;
ModestUIPrivate *priv;
+ const gchar *identity;
+ gchar *reply_to;
+ gchar *signature;
gchar *transport;
- gint retval;
priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
return FALSE;
}
- if (modest_identity_mgr_add_identity (priv->modest_id_mgr,
- gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISIdentityEntry"))),
- gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISNameEntry"))),
- gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
- reply_to,
- signature,
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton"))),
- transport,
- FALSE ))
- retval=TRUE;
- else
- retval=FALSE;
+ identity = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISIdentityEntry")));
+
+ if (newidentity) {
+
+ if (modest_identity_mgr_add_identity (priv->modest_id_mgr,
+ identity,
+ NULL,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
+ NULL,
+ NULL,
+ FALSE,
+ NULL,
+ FALSE));
+ else
+ return FALSE;
+ }
+ if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_REALNAME,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISNameEntry"))),
+ NULL))
+ return FALSE;
+ if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_EMAIL,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
+ NULL))
+ return FALSE;
+ if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_REPLYTO,
+ reply_to,
+ NULL))
+ return FALSE;
+ if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_SIGNATURE,
+ signature,
+ NULL))
+ return FALSE;
+ if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_USE_SIGNATURE,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml,
+ "ISUseSignatureCheckButton"))),
+ NULL))
+ return FALSE;
+ if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_ID_VIA,
+ transport,
+ NULL))
+ return FALSE;
+ if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
+ identity,
+ MODEST_IDENTITY_USE_ID_VIA,
+ TRUE, /* FIXME: for now */
+ NULL))
+ return FALSE;
g_free(transport);
- return retval;
+ return TRUE;
+}
+
+static gboolean
+write_account(GladeXML *glade_xml, ModestUI *modest_ui, gboolean newaccount) {
+
+ ModestUIPrivate *priv;
+ const gchar *account;
+ gchar *protocol;
+ gchar *tmptext;
+ gint retval;
+
+ priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
+
+ account = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASDisplaynameEntry")));
+
+ if (newaccount) {
+ tmptext = gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ASProtocolComboBox")));
+ protocol = g_utf8_strdown(tmptext, -1);
+ g_free(tmptext);
+
+ retval = modest_account_mgr_add_server_account (priv->modest_acc_mgr,
+ account,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
+ protocol);
+ g_free(protocol);
+ return retval;
+ }
+ if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
+ account,
+ MODEST_ACCOUNT_HOSTNAME,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
+ NULL))
+ return FALSE;
+ if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
+ account,
+ MODEST_ACCOUNT_USERNAME,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
+ NULL))
+ return FALSE;
+ if (!modest_account_mgr_set_server_account_string(priv->modest_acc_mgr,
+ account,
+ MODEST_ACCOUNT_PASSWORD,
+ gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
+ NULL))
+ return FALSE;
+ return TRUE;
}
static void
-identity_setup_dialog (ModestUI *modest_ui, GtkListStore *accounts_model, gchar *identity)
+identity_setup_dialog (ModestUI *modest_ui, GtkTreeModel *accounts_model, gchar *identity)
{
GladeXML *glade_xml;
GtkCellRenderer *renderer;
ModestIdentityMgr *id_mgr;
GtkTextBuffer *sigbuff;
+ GtkTreeIter out_iter;
+ gchar *outacc_name;
gchar *tmptext;
- gint account_added_successfully;
+ gint identity_added_successfully;
gint result;
+ gboolean newidentity;
glade_xml = glade_xml_new(MODEST_GLADE, "IdentitySetupDialog", NULL);
id_dialog = glade_xml_get_widget(glade_xml, "IdentitySetupDialog");
G_CALLBACK(use_sig_toggled),
glade_xml);
- if (identity!=NULL) {
+ newidentity = identity==NULL;
+ if (!newidentity) {
id_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_id_mgr;
+ outacc_name = modest_identity_mgr_get_identity_string(id_mgr,
+ identity,
+ MODEST_IDENTITY_ID_VIA,
+ NULL);
+ if (search_model_column_for_string(GTK_TREE_MODEL(accounts_model),
+ &out_iter,
+ ACCOUNT_NAME,
+ outacc_name))
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(outgoing_server), &out_iter);
+
awidget=glade_xml_get_widget(glade_xml, "ISIdentityEntry");
gtk_widget_set_sensitive(awidget, FALSE);
gtk_entry_set_text(GTK_ENTRY(awidget), identity);
tmptext = modest_identity_mgr_get_identity_string(id_mgr,
identity,
- MODEST_IDENTITY_REALNAME,
- NULL);
- awidget=glade_xml_get_widget(glade_xml, "ISNameEntry");
- gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
-
- g_free(tmptext);
-
- tmptext = modest_identity_mgr_get_identity_string(id_mgr,
- identity,
MODEST_IDENTITY_REPLYTO,
NULL);
awidget=glade_xml_get_widget(glade_xml, "ISReplyToEntry");
gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
g_free(tmptext);
+ g_free(outacc_name);
}
gtk_widget_show_all(id_dialog);
switch (result) {
case GTK_RESPONSE_OK:
- account_added_successfully = add_identity(glade_xml, modest_ui, accounts_model);
+ identity_added_successfully = write_identity(glade_xml, modest_ui, accounts_model, newidentity);
+ break;
+ default:
+ identity_added_successfully = FALSE;
+ break;
+ }
+ } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && identity_added_successfully!=TRUE);
+
+ gtk_widget_destroy(id_dialog);
+ g_object_unref(glade_xml);
+}
+
+static void
+account_setup_dialog (ModestUI *modest_ui, gchar *account) {
+
+ GladeXML *glade_xml;
+ GtkWidget *acc_dialog;
+ GtkWidget *awidget;
+ ModestAccountMgr *acc_mgr;
+ GtkTreeModel *typemodel;
+ GtkTreeIter proto_iter;
+ gchar *tmptext;
+ gint account_added_successfully;
+ gint result;
+ gboolean newaccount;
+
+ glade_xml = glade_xml_new(MODEST_GLADE, "AccountSetupDialog", NULL);
+ acc_dialog = glade_xml_get_widget(glade_xml, "AccountSetupDialog");
+
+ newaccount = account==NULL;
+ if (!newaccount) {
+ acc_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_acc_mgr;
+
+ awidget=glade_xml_get_widget(glade_xml, "ASDisplaynameEntry");
+ gtk_widget_set_sensitive(awidget, FALSE);
+ gtk_entry_set_text(GTK_ENTRY(awidget), account);
+
+ tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
+ account,
+ MODEST_ACCOUNT_PROTO,
+ NULL);
+ awidget=glade_xml_get_widget(glade_xml, "ASProtocolComboBox");
+ gtk_widget_set_sensitive(awidget, FALSE);
+ typemodel = gtk_combo_box_get_model(GTK_COMBO_BOX(awidget));
+ if (case_search_model_column_for_string(typemodel, &proto_iter, 0, tmptext))
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(awidget), &proto_iter);
+
+ g_free(tmptext);
+
+ tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
+ account,
+ MODEST_ACCOUNT_HOSTNAME,
+ NULL);
+ awidget=glade_xml_get_widget(glade_xml, "ASHostnameEntry");
+ gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
+ g_free(tmptext);
+
+ tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
+ account,
+ MODEST_ACCOUNT_USERNAME,
+ NULL);
+ awidget=glade_xml_get_widget(glade_xml, "ASUsernameEntry");
+ gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
+ g_free(tmptext);
+
+ tmptext = modest_account_mgr_get_server_account_string(acc_mgr,
+ account,
+ MODEST_ACCOUNT_PASSWORD,
+ NULL);
+ awidget=glade_xml_get_widget(glade_xml, "ASPasswordEntry");
+ gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
+ g_free(tmptext);
+ }
+
+ gtk_widget_show_all(acc_dialog);
+
+ do {
+ result=gtk_dialog_run(GTK_DIALOG(acc_dialog));
+
+ switch (result) {
+ case GTK_RESPONSE_OK:
+ account_added_successfully = write_account(glade_xml, modest_ui, newaccount);
+
break;
default:
account_added_successfully = FALSE;
}
} while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && account_added_successfully!=TRUE);
- gtk_widget_destroy(id_dialog);
+ gtk_widget_destroy(acc_dialog);
g_object_unref(glade_xml);
}
static CallbackData *
-setup_callback_data(GtkWidget *id_tree_view,
- GtkWidget *acc_tree_view,
- ModestUI *modest_ui)
+setup_callback_data(GtkTreeView *id_tree_view,
+ GtkTreeView *acc_tree_view,
+ ModestUI *modest_ui,
+ GladeXML *glade_xml)
{
CallbackData *self;
self = g_malloc(sizeof(CallbackData));
self->modest_ui=modest_ui;
self->id_tree_view=id_tree_view;
self->acc_tree_view=acc_tree_view;
+ self->glade_xml=glade_xml;
return self;
}
GSList *acc_names_list_iter;
GtkListStore *acc_list_store;
GtkTreeIter acc_list_store_iter;
- gchar *tmptext;
+ gchar *hostname;
+ gchar *protocol;
acc_names_list = modest_account_mgr_server_account_names(acc_mgr,
NULL,
MODEST_PROTO_TYPE_ANY,
NULL,
FALSE);
- acc_list_store = gtk_list_store_new(ACCOUNT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
+ acc_list_store = gtk_list_store_new(ACCOUNT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
for (acc_names_list_iter=acc_names_list;
acc_names_list_iter!=NULL;
acc_names_list_iter=g_slist_next(acc_names_list_iter)) {
gtk_list_store_append(acc_list_store, &acc_list_store_iter);
- tmptext=modest_account_mgr_get_server_account_string(acc_mgr,
- acc_names_list_iter->data,
- MODEST_ACCOUNT_HOSTNAME,
- NULL);
+ hostname=modest_account_mgr_get_server_account_string(acc_mgr,
+ acc_names_list_iter->data,
+ MODEST_ACCOUNT_HOSTNAME,
+ NULL);
+ protocol=modest_account_mgr_get_server_account_string(acc_mgr,
+ acc_names_list_iter->data,
+ MODEST_ACCOUNT_PROTO,
+ NULL);
gtk_list_store_set(acc_list_store, &acc_list_store_iter,
ACCOUNT_NAME, acc_names_list_iter->data,
- ACCOUNT_HOST, tmptext,
+ ACCOUNT_HOST, hostname,
+ ACCOUNT_PROT, protocol,
-1);
- g_free(tmptext);
+ g_free(hostname);
+ g_free(protocol);
}
g_slist_free(acc_names_list);
{
GladeXML *glade_xml;
GtkWidget *main_dialog;
- GtkWidget *identities_tree_view;
- GtkWidget *accounts_tree_view;
- GtkTreeModel *identities_model;
- GtkTreeModel *accounts_model;
+ GtkTreeView *identities_tree_view;
+ GtkTreeView *accounts_tree_view;
ModestUI *modest_ui;
ModestUIPrivate *priv;
+ gint sig_coll[6];
gint retval;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
main_dialog = glade_xml_get_widget(glade_xml, "IdentitiesAndAccountsDialog");
/* Accounts */
- accounts_tree_view = glade_xml_get_widget(glade_xml, "AccountsTreeview");
- accounts_model=create_accounts_model(priv->modest_acc_mgr);
- gtk_tree_view_set_model(GTK_TREE_VIEW(accounts_tree_view), accounts_model);
+ accounts_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
/* Account -> Accountname */
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Account",
renderer,
"text", ACCOUNT_NAME,
NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW(accounts_tree_view), column);
+ gtk_tree_view_append_column (accounts_tree_view, column);
/* Account -> Hostname */
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Hostname",
renderer,
"text", ACCOUNT_HOST,
NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW(accounts_tree_view), column);
+ gtk_tree_view_append_column (accounts_tree_view, column);
/* Identities */
- identities_tree_view = glade_xml_get_widget(glade_xml, "IdentitiesTreeview");
- identities_model=create_identities_model(priv->modest_id_mgr);
- gtk_tree_view_set_model(GTK_TREE_VIEW(identities_tree_view), identities_model);
+ identities_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
/* Identities -> Identityname */
renderer = gtk_cell_renderer_text_new ();
renderer,
"text", IDENTITY_NAME,
NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW(identities_tree_view), column);
+ gtk_tree_view_append_column (identities_tree_view, column);
/* Identities -> E-mail address */
renderer = gtk_cell_renderer_text_new ();
renderer,
"text", IDENTITY_ADDRESS,
NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW(identities_tree_view), column);
+ gtk_tree_view_append_column (identities_tree_view, column);
/* Identities -> Relay */
renderer = gtk_cell_renderer_text_new ();
renderer,
"text", IDENTITY_VIA,
NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW(identities_tree_view), column);
+ gtk_tree_view_append_column (identities_tree_view, column);
+
+ cb_data=setup_callback_data(identities_tree_view, accounts_tree_view, modest_ui, glade_xml);
+
+ refresh_accounts(priv->modest_acc_mgr,
+ glade_xml);
- cb_data=setup_callback_data(identities_tree_view, accounts_tree_view, modest_ui);
+ refresh_identities(priv->modest_id_mgr,
+ glade_xml);
+ /* Identities */
abutton=glade_xml_get_widget(glade_xml, "IdentityCreateButton");
g_signal_connect(abutton,
"clicked",
- G_CALLBACK(create_action),
+ G_CALLBACK(identity_create_action),
cb_data);
abutton=glade_xml_get_widget(glade_xml, "IdentityEditButton");
g_signal_connect(abutton,
"clicked",
- G_CALLBACK(edit_action),
+ G_CALLBACK(identity_edit_action),
cb_data);
abutton=glade_xml_get_widget(glade_xml, "IdentityDeleteButton");
g_signal_connect(abutton,
"clicked",
- G_CALLBACK(delete_action),
+ G_CALLBACK(identity_delete_action),
cb_data);
- /* FIXME: the edit/delete buttons are sensitive by default
- * but we have no selection by default.
- */
+ /* Accounts */
+ abutton=glade_xml_get_widget(glade_xml, "AccountCreateButton");
+ g_signal_connect(abutton,
+ "clicked",
+ G_CALLBACK(account_create_action),
+ cb_data);
+ abutton=glade_xml_get_widget(glade_xml, "AccountEditButton");
+ g_signal_connect(abutton,
+ "clicked",
+ G_CALLBACK(account_edit_action),
+ cb_data);
+ abutton=glade_xml_get_widget(glade_xml, "AccountDeleteButton");
+ g_signal_connect(abutton,
+ "clicked",
+ G_CALLBACK(account_delete_action),
+ cb_data);
- activate_buttons_on_identity(NULL, glade_xml);
+ g_signal_connect(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"),
+ "cursor-changed",
+ G_CALLBACK(activate_buttons_on_identity),
+ glade_xml);
+ g_signal_connect(glade_xml_get_widget(glade_xml, "AccountsTreeview"),
+ "cursor-changed",
+ G_CALLBACK(activate_buttons_on_account),
+ glade_xml);
+
+ sig_coll[0] = g_signal_connect(priv->modest_id_mgr,
+ "identity-change",
+ G_CALLBACK(refresh_identities_on_change),
+ glade_xml);
+ sig_coll[1] = g_signal_connect(priv->modest_id_mgr,
+ "identity-add",
+ G_CALLBACK(refresh_identities_on_add),
+ glade_xml);
+ sig_coll[2] = g_signal_connect(priv->modest_id_mgr,
+ "identity-remove",
+ G_CALLBACK(refresh_identities_on_remove),
+ glade_xml);
+
+ sig_coll[3] = g_signal_connect(priv->modest_acc_mgr,
+ "account-change",
+ G_CALLBACK(refresh_accounts_on_change),
+ glade_xml);
+ sig_coll[4] = g_signal_connect(priv->modest_acc_mgr,
+ "account-add",
+ G_CALLBACK(refresh_accounts_on_add),
+ glade_xml);
+ sig_coll[5] = g_signal_connect(priv->modest_acc_mgr,
+ "account-remove",
+ G_CALLBACK(refresh_accounts_on_remove),
+ glade_xml);
gtk_widget_show_all(GTK_WIDGET(main_dialog));
retval=gtk_dialog_run(GTK_DIALOG(main_dialog));
+ g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[0]);
+ g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[1]);
+ g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[2]);
+ g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[3]);
+ g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[4]);
+ g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[5]);
+
gtk_widget_destroy(GTK_WIDGET(main_dialog));
- g_object_unref(accounts_model);
- g_object_unref(identities_model);
free_callback_data(cb_data);
g_object_unref(glade_xml);
}