1 /* Copyright (c) 2006, Nokia Corporation
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the Nokia Corporation nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include <glade/glade.h>
33 #include <glib/gi18n.h>
38 #endif /*HAVE_CONFIG_H*/
40 #include "../modest-account-mgr.h"
41 #include "../modest-identity-mgr.h"
43 #include "modest-ui-glade.h"
44 #include "modest-ui-account-setup.h"
60 typedef struct _CallbackData CallbackData;
62 struct _CallbackData {
63 GtkTreeView *id_tree_view;
64 GtkTreeView *acc_tree_view;
70 identity_setup_dialog (ModestUI *, GtkTreeModel *, gchar *);
73 account_setup_dialog (ModestUI *, gchar *);
76 missing_notification(GtkWindow *, gchar *);
79 create_identities_model(ModestIdentityMgr *);
82 create_accounts_model(ModestAccountMgr *);
85 refresh_identities(ModestIdentityMgr *,
89 refresh_accounts(ModestAccountMgr *, GladeXML *glade_xml);
94 filter_transports (GtkTreeModel *model,
101 gtk_tree_model_get(model,
106 retval = strcasecmp(name, "SMTP")==0;
113 account_edit_action(GtkWidget *button,
116 CallbackData *cb_data;
117 GtkTreeModel *acc_liststore;
118 GtkTreeSelection *selection;
119 GtkTreeIter selected_iter;
122 cb_data = (CallbackData *) userdata;
123 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
125 gtk_tree_selection_get_selected(selection,
128 gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
130 ACCOUNT_NAME, &account_name,
133 account_setup_dialog (cb_data->modest_ui, account_name);
134 g_free(account_name);
138 account_create_action(GtkWidget *button,
140 CallbackData *cb_data;
142 cb_data = (CallbackData *) userdata;
144 account_setup_dialog(cb_data->modest_ui, NULL);
148 account_delete_action(GtkWidget *button,
150 CallbackData *cb_data;
151 GtkTreeSelection *selection;
152 GtkTreeIter selected_iter;
153 GtkTreeModel *acc_liststore;
154 GtkWidget *confirmation_dialog;
155 GtkWidget *confirmation_message;
156 ModestUIPrivate *priv;
161 cb_data = (CallbackData *) userdata;
162 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
163 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->acc_tree_view));
165 gtk_tree_selection_get_selected(selection,
168 gtk_tree_model_get(GTK_TREE_MODEL(acc_liststore),
170 ACCOUNT_NAME, &account_name,
173 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of account",
174 GTK_WINDOW(gtk_widget_get_toplevel(button)),
175 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
182 message = g_strdup_printf("Remove selected account '%s'?", account_name);
183 confirmation_message = gtk_label_new_with_mnemonic (message);
185 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
187 gtk_widget_show_all(confirmation_dialog);
189 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
190 if (result==GTK_RESPONSE_OK) {
191 modest_account_mgr_remove_account(priv->modest_acc_mgr,
196 gtk_widget_destroy(confirmation_dialog);
197 g_free(account_name);
203 identity_edit_action(GtkWidget *button,
206 CallbackData *cb_data;
207 GtkTreeModel *acc_liststore;
208 GtkTreeModel *id_liststore;
209 GtkTreeSelection *selection;
210 GtkTreeIter selected_iter;
211 gchar *identity_name;
213 cb_data = (CallbackData *) userdata;
214 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
216 gtk_tree_selection_get_selected(selection,
219 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
221 IDENTITY_NAME, &identity_name,
223 /* We use the available tree model from the accounts page to display a selection
224 * of transports in the identities. Since we only want the transport accounts,
225 * we derive a gtk_tree_model_filter and apply filter_transports function.
227 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
229 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
234 identity_setup_dialog (cb_data->modest_ui, acc_liststore, identity_name);
235 g_free(identity_name);
239 identity_create_action(GtkWidget *button,
242 CallbackData *cb_data;
243 GtkTreeModel *acc_liststore;
245 cb_data = (CallbackData *) userdata;
247 /* Works as in identity_edit_action. */
248 acc_liststore = gtk_tree_model_filter_new(gtk_tree_view_get_model(cb_data->acc_tree_view),
250 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(acc_liststore),
255 identity_setup_dialog(cb_data->modest_ui, acc_liststore, NULL);
256 g_object_unref(acc_liststore);
260 identity_delete_action(GtkWidget *button,
263 CallbackData *cb_data;
264 GtkTreeSelection *selection;
265 GtkTreeIter selected_iter;
266 GtkTreeModel *id_liststore;
267 GtkWidget *confirmation_dialog;
268 GtkWidget *confirmation_message;
269 ModestUIPrivate *priv;
270 gchar *identity_name;
274 cb_data = (CallbackData *) userdata;
275 priv = MODEST_UI_GET_PRIVATE(cb_data->modest_ui);
276 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cb_data->id_tree_view));
278 gtk_tree_selection_get_selected(selection,
281 gtk_tree_model_get(GTK_TREE_MODEL(id_liststore),
283 ACCOUNT_NAME, &identity_name,
286 confirmation_dialog = gtk_dialog_new_with_buttons ("Confirm removal of identity",
287 GTK_WINDOW(gtk_widget_get_toplevel(button)),
288 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
295 message = g_strdup_printf("Remove selected identity '%s'?", identity_name);
296 confirmation_message = gtk_label_new_with_mnemonic (message);
298 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(confirmation_dialog)->vbox), confirmation_message, FALSE, FALSE, 10);
300 gtk_widget_show_all(confirmation_dialog);
302 result=gtk_dialog_run(GTK_DIALOG(confirmation_dialog));
303 if (result==GTK_RESPONSE_OK)
305 modest_identity_mgr_remove_identity(priv->modest_id_mgr,
310 gtk_widget_destroy(confirmation_dialog);
311 g_free(identity_name);
316 activate_buttons_on_identity(GtkTreeView *tree_view,
322 glade_xml=(GladeXML *) user_data;
324 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
325 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
326 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
327 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
331 activate_buttons_on_account(GtkTreeView *tree_view,
337 glade_xml=(GladeXML *) user_data;
339 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
340 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
341 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
342 gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
346 use_sig_toggled(GtkToggleButton *button,
350 GladeXML *glade_xml = (GladeXML *) userdata;
352 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
353 gtk_widget_set_sensitive(awidget, gtk_toggle_button_get_active(button));
357 refresh_accounts_on_add(ModestAccountMgr *modest_acc_mgr,
361 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
365 refresh_accounts_on_remove(ModestAccountMgr *modest_acc_mgr,
369 GladeXML *glade_xml = (GladeXML *) userdata;
372 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
373 /* Since we loose the selection through the delete operation, we need to
374 * change the buttons sensitivity .
376 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountEditButton");
377 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
378 button = glade_xml_get_widget(GLADE_XML(glade_xml), "AccountDeleteButton");
379 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
383 refresh_accounts_on_change(ModestAccountMgr *modest_acc_mgr,
389 refresh_accounts(modest_acc_mgr, (GladeXML *) userdata);
393 refresh_identities_on_add(ModestIdentityMgr *modest_id_mgr,
396 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
400 refresh_identities_on_remove(ModestIdentityMgr *modest_id_mgr,
404 GladeXML *glade_xml = (GladeXML *) userdata;
407 refresh_identities(modest_id_mgr, glade_xml);
409 /* Since we loose the selection through the delete operation, we need to
410 * change the buttons sensitivity .
412 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityEditButton");
413 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
414 button = glade_xml_get_widget(GLADE_XML(glade_xml), "IdentityDeleteButton");
415 gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
419 refresh_identities_on_change(ModestIdentityMgr *modest_id_mgr,
424 refresh_identities(modest_id_mgr, (GladeXML *) userdata);
430 search_model_column_for_string_advanced(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search, gboolean mcase) {
435 iter_true = gtk_tree_model_get_iter_first(model, iter);
437 gtk_tree_model_get(model,
441 if ((mcase && strcasecmp(tmptext, search)==0)
442 || strcmp(tmptext, search)==0) {
447 iter_true = gtk_tree_model_iter_next(model, iter);
456 search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
457 return search_model_column_for_string_advanced(model, iter, ColNum, search, FALSE);
461 case_search_model_column_for_string(GtkTreeModel *model, GtkTreeIter *iter, gint ColNum, gchar *search) {
462 return search_model_column_for_string_advanced(model, iter, ColNum, search, TRUE);
466 refresh_identities(ModestIdentityMgr *modest_id_mgr,
467 GladeXML *glade_xml) {
469 GtkTreeModel *id_liststore;
470 GtkTreeView *id_treeview;
472 id_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
474 id_liststore=create_identities_model(modest_id_mgr);
475 gtk_tree_view_set_model(GTK_TREE_VIEW(id_treeview), id_liststore);
479 refresh_accounts(ModestAccountMgr *modest_acc_mgr,
480 GladeXML *glade_xml) {
482 GtkTreeModel *acc_liststore;
483 GtkTreeView *acc_treeview;
485 acc_treeview = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
487 acc_liststore=create_accounts_model(modest_acc_mgr);
488 gtk_tree_view_set_model(GTK_TREE_VIEW(acc_treeview), acc_liststore);
492 missing_notification(GtkWindow *parent, gchar *info_message) {
494 GtkWidget *DenyDialog;
496 DenyDialog=gtk_message_dialog_new(parent,
503 gtk_dialog_run(GTK_DIALOG(DenyDialog));
505 gtk_widget_destroy(DenyDialog);
509 write_identity(GladeXML *glade_xml, ModestUI *modest_ui, GtkTreeModel *accounts_model, gboolean newidentity) {
511 GtkTextBuffer *sigbuff;
512 GtkTextIter start_iter;
513 GtkTextIter end_iter;
514 GtkTreeIter transport_iter;
515 ModestUIPrivate *priv;
516 const gchar *identity;
521 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
523 reply_to = g_strdup_printf("%s", gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISReplyToEntry"))));
525 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton"))))
527 sigbuff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")));
528 gtk_text_buffer_get_bounds(sigbuff,
531 signature = gtk_text_buffer_get_text(sigbuff,
539 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ISOutServerComboBox")), &transport_iter)) {
540 gtk_tree_model_get(GTK_TREE_MODEL(accounts_model),
542 ACCOUNT_NAME, &transport,
546 missing_notification(NULL, "Please select an outgoing server!");
550 identity = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISIdentityEntry")));
554 if (modest_identity_mgr_add_identity (priv->modest_id_mgr,
557 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
566 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
568 MODEST_IDENTITY_REALNAME,
569 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISNameEntry"))),
572 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
574 MODEST_IDENTITY_EMAIL,
575 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ISEMailAddress"))),
578 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
580 MODEST_IDENTITY_REPLYTO,
584 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
586 MODEST_IDENTITY_SIGNATURE,
590 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
592 MODEST_IDENTITY_USE_SIGNATURE,
593 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml,
594 "ISUseSignatureCheckButton"))),
597 if (!modest_identity_mgr_set_identity_string(priv->modest_id_mgr,
599 MODEST_IDENTITY_ID_VIA,
603 if (!modest_identity_mgr_set_identity_bool(priv->modest_id_mgr,
605 MODEST_IDENTITY_USE_ID_VIA,
606 TRUE, /* FIXME: for now */
614 write_account(GladeXML *glade_xml, ModestUI *modest_ui, gboolean newaccount) {
616 ModestUIPrivate *priv;
617 const gchar *account;
622 priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
624 account = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASDisplaynameEntry")));
627 tmptext = gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "ASProtocolComboBox")));
628 protocol = g_utf8_strdown(tmptext, -1);
631 retval = modest_account_mgr_add_server_account (priv->modest_acc_mgr,
633 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
634 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
635 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
640 if (!modest_account_mgr_set_string(priv->modest_acc_mgr,
642 MODEST_ACCOUNT_HOSTNAME,
643 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASHostnameEntry"))),
649 if (!modest_account_mgr_set_string(priv->modest_acc_mgr,
651 MODEST_ACCOUNT_USERNAME,
652 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASUsernameEntry"))),
657 if (!modest_account_mgr_set_string(priv->modest_acc_mgr,
659 MODEST_ACCOUNT_PASSWORD,
660 gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "ASPasswordEntry"))),
669 identity_setup_dialog (ModestUI *modest_ui, GtkTreeModel *accounts_model, gchar *identity)
673 GtkWidget *id_dialog;
674 GtkWidget *outgoing_server;
676 GtkCellRenderer *renderer;
677 ModestIdentityMgr *id_mgr;
678 GtkTextBuffer *sigbuff;
679 GtkTreeIter out_iter;
682 gint identity_added_successfully;
684 gboolean newidentity;
686 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitySetupDialog", NULL);
687 id_dialog = glade_xml_get_widget(glade_xml, "IdentitySetupDialog");
689 outgoing_server = glade_xml_get_widget(glade_xml, "ISOutServerComboBox");
690 gtk_combo_box_set_model(GTK_COMBO_BOX(outgoing_server), GTK_TREE_MODEL(accounts_model));
691 renderer = gtk_cell_renderer_text_new ();
692 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (outgoing_server), renderer, TRUE);
693 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (outgoing_server), renderer,
696 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
697 g_signal_connect(awidget,
699 G_CALLBACK(use_sig_toggled),
702 newidentity = identity==NULL;
704 id_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_id_mgr;
706 outacc_name = modest_identity_mgr_get_identity_string(id_mgr,
708 MODEST_IDENTITY_ID_VIA,
710 if (search_model_column_for_string(GTK_TREE_MODEL(accounts_model),
714 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(outgoing_server), &out_iter);
716 awidget=glade_xml_get_widget(glade_xml, "ISIdentityEntry");
717 gtk_widget_set_sensitive(awidget, FALSE);
718 gtk_entry_set_text(GTK_ENTRY(awidget), identity);
719 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
721 MODEST_IDENTITY_EMAIL,
723 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
724 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
727 if (modest_identity_mgr_get_identity_bool(id_mgr,
729 MODEST_IDENTITY_USE_SIGNATURE,
731 awidget=glade_xml_get_widget(glade_xml, "ISUseSignatureCheckButton");
732 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(awidget), TRUE);
733 awidget=glade_xml_get_widget(glade_xml, "ISSignatureTextView");
734 gtk_widget_set_sensitive(awidget, TRUE);
737 sigbuff=gtk_text_buffer_new(NULL);
738 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
740 MODEST_IDENTITY_SIGNATURE,
742 gtk_text_buffer_set_text(sigbuff, tmptext, -1);
743 gtk_text_view_set_buffer(GTK_TEXT_VIEW(glade_xml_get_widget(glade_xml, "ISSignatureTextView")),
745 g_object_unref(sigbuff);
748 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
750 MODEST_IDENTITY_EMAIL,
752 awidget=glade_xml_get_widget(glade_xml, "ISEMailAddress");
753 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
756 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
758 MODEST_IDENTITY_REALNAME,
760 awidget=glade_xml_get_widget(glade_xml, "ISNameEntry");
761 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
764 tmptext = modest_identity_mgr_get_identity_string(id_mgr,
766 MODEST_IDENTITY_REPLYTO,
768 awidget=glade_xml_get_widget(glade_xml, "ISReplyToEntry");
769 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
775 gtk_widget_show_all(id_dialog);
778 result=gtk_dialog_run(GTK_DIALOG(id_dialog));
781 case GTK_RESPONSE_OK:
782 identity_added_successfully = write_identity(glade_xml, modest_ui, accounts_model, newidentity);
785 identity_added_successfully = FALSE;
788 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && identity_added_successfully!=TRUE);
790 gtk_widget_destroy(id_dialog);
791 g_object_unref(glade_xml);
795 account_setup_dialog (ModestUI *modest_ui, gchar *account) {
798 GtkWidget *acc_dialog;
800 ModestAccountMgr *acc_mgr;
801 GtkTreeModel *typemodel;
802 GtkTreeIter proto_iter;
804 gint account_added_successfully;
808 glade_xml = glade_xml_new(MODEST_GLADE, "AccountSetupDialog", NULL);
809 acc_dialog = glade_xml_get_widget(glade_xml, "AccountSetupDialog");
811 newaccount = account==NULL;
813 acc_mgr = MODEST_UI_GET_PRIVATE(modest_ui)->modest_acc_mgr;
815 awidget=glade_xml_get_widget(glade_xml, "ASDisplaynameEntry");
816 gtk_widget_set_sensitive(awidget, FALSE);
817 gtk_entry_set_text(GTK_ENTRY(awidget), account);
819 tmptext = modest_account_mgr_get_string(acc_mgr,
821 MODEST_ACCOUNT_PROTO,
823 awidget=glade_xml_get_widget(glade_xml, "ASProtocolComboBox");
824 gtk_widget_set_sensitive(awidget, FALSE);
825 typemodel = gtk_combo_box_get_model(GTK_COMBO_BOX(awidget));
826 if (case_search_model_column_for_string(typemodel, &proto_iter, 0, tmptext))
827 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(awidget), &proto_iter);
831 tmptext = modest_account_mgr_get_string(acc_mgr,
833 MODEST_ACCOUNT_HOSTNAME,
835 awidget=glade_xml_get_widget(glade_xml, "ASHostnameEntry");
836 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
839 tmptext = modest_account_mgr_get_string(acc_mgr,
841 MODEST_ACCOUNT_USERNAME,
843 awidget=glade_xml_get_widget(glade_xml, "ASUsernameEntry");
844 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
847 tmptext = modest_account_mgr_get_string(acc_mgr,
849 MODEST_ACCOUNT_PASSWORD,
851 awidget=glade_xml_get_widget(glade_xml, "ASPasswordEntry");
852 gtk_entry_set_text(GTK_ENTRY(awidget), tmptext);
856 gtk_widget_show_all(acc_dialog);
859 result=gtk_dialog_run(GTK_DIALOG(acc_dialog));
862 case GTK_RESPONSE_OK:
863 account_added_successfully = write_account(glade_xml, modest_ui, newaccount);
867 account_added_successfully = FALSE;
870 } while(result!=GTK_RESPONSE_DELETE_EVENT && result!=GTK_RESPONSE_CANCEL && account_added_successfully!=TRUE);
872 gtk_widget_destroy(acc_dialog);
873 g_object_unref(glade_xml);
877 static CallbackData *
878 setup_callback_data(GtkTreeView *id_tree_view,
879 GtkTreeView *acc_tree_view,
884 self = g_malloc(sizeof(CallbackData));
885 self->modest_ui=modest_ui;
886 self->id_tree_view=id_tree_view;
887 self->acc_tree_view=acc_tree_view;
888 self->glade_xml=glade_xml;
893 free_callback_data(CallbackData *data)
898 static GtkTreeModel *
899 create_identities_model(ModestIdentityMgr *id_mgr) {
901 GSList *id_names_list;
902 GSList *id_names_list_iter;
903 GtkListStore *id_list_store;
904 GtkTreeIter id_list_store_iter;
908 id_names_list = modest_identity_mgr_identity_names(id_mgr, NULL);
909 id_list_store = gtk_list_store_new(IDENTITY_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
911 for (id_names_list_iter=id_names_list;
912 id_names_list_iter!=NULL;
913 id_names_list_iter=g_slist_next(id_names_list_iter)) {
914 gtk_list_store_append(id_list_store, &id_list_store_iter);
915 tmptext1=modest_identity_mgr_get_identity_string(id_mgr,
916 id_names_list_iter->data,
917 MODEST_IDENTITY_EMAIL,
919 tmptext2=modest_identity_mgr_get_identity_string(id_mgr,
920 id_names_list_iter->data,
921 MODEST_IDENTITY_ID_VIA,
923 gtk_list_store_set(id_list_store, &id_list_store_iter,
924 IDENTITY_NAME, id_names_list_iter->data,
925 IDENTITY_ADDRESS, tmptext1,
926 IDENTITY_VIA, tmptext2,
932 g_slist_free(id_names_list);
934 return GTK_TREE_MODEL(id_list_store);
937 static GtkTreeModel *
938 create_accounts_model(ModestAccountMgr *acc_mgr) {
940 GSList *acc_names_list;
941 GSList *acc_names_list_iter;
942 GtkListStore *acc_list_store;
943 GtkTreeIter acc_list_store_iter;
947 acc_names_list = modest_account_mgr_search_server_accounts (acc_mgr,
949 MODEST_PROTO_TYPE_ANY,
952 acc_list_store = gtk_list_store_new(ACCOUNT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
954 for (acc_names_list_iter=acc_names_list;
955 acc_names_list_iter!=NULL;
956 acc_names_list_iter=g_slist_next(acc_names_list_iter)) {
957 gtk_list_store_append(acc_list_store, &acc_list_store_iter);
958 hostname=modest_account_mgr_get_string(acc_mgr,
959 acc_names_list_iter->data,
960 MODEST_ACCOUNT_HOSTNAME,
963 protocol=modest_account_mgr_get_string(acc_mgr,
964 acc_names_list_iter->data,
965 MODEST_ACCOUNT_PROTO,
968 gtk_list_store_set(acc_list_store, &acc_list_store_iter,
969 ACCOUNT_NAME, acc_names_list_iter->data,
970 ACCOUNT_HOST, hostname,
971 ACCOUNT_PROT, protocol,
977 g_slist_free(acc_names_list);
979 return GTK_TREE_MODEL(acc_list_store);
984 accounts_and_identities_dialog (gpointer user_data)
987 GtkWidget *main_dialog;
988 GtkTreeView *identities_tree_view;
989 GtkTreeView *accounts_tree_view;
991 ModestUIPrivate *priv;
994 GtkCellRenderer *renderer;
995 GtkTreeViewColumn *column;
996 CallbackData *cb_data;
999 g_return_if_fail(MODEST_IS_UI(user_data));
1000 modest_ui = (ModestUI *) user_data;
1001 priv = MODEST_UI_GET_PRIVATE(modest_ui);
1003 glade_xml = glade_xml_new(MODEST_GLADE, "IdentitiesAndAccountsDialog", NULL);
1004 main_dialog = glade_xml_get_widget(glade_xml, "IdentitiesAndAccountsDialog");
1007 accounts_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "AccountsTreeview"));
1008 /* Account -> Accountname */
1009 renderer = gtk_cell_renderer_text_new ();
1010 column = gtk_tree_view_column_new_with_attributes ("Account",
1012 "text", ACCOUNT_NAME,
1014 gtk_tree_view_append_column (accounts_tree_view, column);
1015 /* Account -> Hostname */
1016 renderer = gtk_cell_renderer_text_new ();
1017 column = gtk_tree_view_column_new_with_attributes ("Hostname",
1019 "text", ACCOUNT_HOST,
1021 gtk_tree_view_append_column (accounts_tree_view, column);
1024 identities_tree_view = GTK_TREE_VIEW(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"));
1026 /* Identities -> Identityname */
1027 renderer = gtk_cell_renderer_text_new ();
1028 column = gtk_tree_view_column_new_with_attributes ("Identity",
1030 "text", IDENTITY_NAME,
1032 gtk_tree_view_append_column (identities_tree_view, column);
1034 /* Identities -> E-mail address */
1035 renderer = gtk_cell_renderer_text_new ();
1036 column = gtk_tree_view_column_new_with_attributes ("E-mail address",
1038 "text", IDENTITY_ADDRESS,
1040 gtk_tree_view_append_column (identities_tree_view, column);
1042 /* Identities -> Relay */
1043 renderer = gtk_cell_renderer_text_new ();
1044 column = gtk_tree_view_column_new_with_attributes ("Transport",
1046 "text", IDENTITY_VIA,
1048 gtk_tree_view_append_column (identities_tree_view, column);
1050 cb_data=setup_callback_data(identities_tree_view, accounts_tree_view, modest_ui, glade_xml);
1052 refresh_accounts(priv->modest_acc_mgr,
1055 refresh_identities(priv->modest_id_mgr,
1059 abutton=glade_xml_get_widget(glade_xml, "IdentityCreateButton");
1060 g_signal_connect(abutton,
1062 G_CALLBACK(identity_create_action),
1064 abutton=glade_xml_get_widget(glade_xml, "IdentityEditButton");
1065 g_signal_connect(abutton,
1067 G_CALLBACK(identity_edit_action),
1069 abutton=glade_xml_get_widget(glade_xml, "IdentityDeleteButton");
1070 g_signal_connect(abutton,
1072 G_CALLBACK(identity_delete_action),
1076 abutton=glade_xml_get_widget(glade_xml, "AccountCreateButton");
1077 g_signal_connect(abutton,
1079 G_CALLBACK(account_create_action),
1081 abutton=glade_xml_get_widget(glade_xml, "AccountEditButton");
1082 g_signal_connect(abutton,
1084 G_CALLBACK(account_edit_action),
1086 abutton=glade_xml_get_widget(glade_xml, "AccountDeleteButton");
1087 g_signal_connect(abutton,
1089 G_CALLBACK(account_delete_action),
1092 g_signal_connect(glade_xml_get_widget(glade_xml, "IdentitiesTreeview"),
1094 G_CALLBACK(activate_buttons_on_identity),
1096 g_signal_connect(glade_xml_get_widget(glade_xml, "AccountsTreeview"),
1098 G_CALLBACK(activate_buttons_on_account),
1101 sig_coll[0] = g_signal_connect(priv->modest_id_mgr,
1103 G_CALLBACK(refresh_identities_on_change),
1105 sig_coll[1] = g_signal_connect(priv->modest_id_mgr,
1107 G_CALLBACK(refresh_identities_on_add),
1109 sig_coll[2] = g_signal_connect(priv->modest_id_mgr,
1111 G_CALLBACK(refresh_identities_on_remove),
1114 sig_coll[3] = g_signal_connect(priv->modest_acc_mgr,
1116 G_CALLBACK(refresh_accounts_on_change),
1118 sig_coll[4] = g_signal_connect(priv->modest_acc_mgr,
1120 G_CALLBACK(refresh_accounts_on_add),
1122 sig_coll[5] = g_signal_connect(priv->modest_acc_mgr,
1124 G_CALLBACK(refresh_accounts_on_remove),
1127 gtk_widget_show_all(GTK_WIDGET(main_dialog));
1129 retval=gtk_dialog_run(GTK_DIALOG(main_dialog));
1131 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[0]);
1132 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[1]);
1133 g_signal_handler_disconnect(priv->modest_id_mgr, sig_coll[2]);
1134 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[3]);
1135 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[4]);
1136 g_signal_handler_disconnect(priv->modest_acc_mgr, sig_coll[5]);
1138 gtk_widget_destroy(GTK_WIDGET(main_dialog));
1139 free_callback_data(cb_data);
1140 g_object_unref(glade_xml);
1143 void account_settings (GtkWidget *widget,
1146 accounts_and_identities_dialog (MODEST_UI(user_data));