[anjal] Support for delete/add new accounts. View refresh, etc.



commit 12e08a82a30ec0e5f215fe2a52fa3d0dc7182bd9
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Sun Jul 19 22:20:33 2009 +0530

    Support for delete/add new accounts. View refresh, etc.

 src/mail-settings-view.c |   76 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 61 insertions(+), 15 deletions(-)
---
diff --git a/src/mail-settings-view.c b/src/mail-settings-view.c
index 27b4d5a..6fa2721 100644
--- a/src/mail-settings-view.c
+++ b/src/mail-settings-view.c
@@ -36,6 +36,8 @@ struct _MailSettingsViewPrivate {
 
 	GtkWidget *scroll;
 	GtkWidget *box;
+
+	EAccountList *accounts;
 };
 
 G_DEFINE_TYPE (MailSettingsView, mail_settings_view, GTK_TYPE_VBOX)
@@ -48,6 +50,9 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
+
+static void msv_regen_view (MailSettingsView *acview);
+
 static void
 mail_settings_view_init (MailSettingsView  *shell)
 {
@@ -93,19 +98,41 @@ mail_settings_view_class_init (MailSettingsViewClass *klass)
 static void
 msv_edit_account(GtkButton *button, MailSettingsView *msv)
 {
-	EAccount *acc = g_object_get_data(button, "account");
+	EAccount *acc = g_object_get_data((GObject *)button, "account");
 
 	g_signal_emit (msv, signals[SHOW_ACCOUNT], 0, acc);
 }
 
+static void
+msv_delete_account(GtkButton *button, MailSettingsView *msv)
+{
+	EAccount *account = g_object_get_data((GObject *)button, "account");
+
+	if (account->enabled && account->source && account->source->url)
+		mail_component_remove_store_by_uri (mail_component_peek (), account->source->url);
+	mail_config_remove_account (account);
+	mail_config_write ();
+	msv_regen_view (msv);
+
+}
+
+static void
+msv_account_added (EAccountList *al, EAccount *account, MailSettingsView *msv)
+{
+	msv_regen_view (msv);
+}
+
 #define PACK_BOX(w,s) box = gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *)box, w, FALSE, FALSE, s); gtk_widget_show(box); gtk_widget_show(w); gtk_box_pack_start((GtkBox *)acview->priv->box, box, FALSE, FALSE, 3);
 
 
 static void
 build_account_button (MailSettingsView *acview, EAccount *account)
 {
-	GtkWidget *box, *label, *tbox, *tlabel;
+	GtkWidget *box, *box1, *label, *tbox, *tlabel;
 	char *tmp;
+	
+	box1 = gtk_hbox_new (FALSE, 0);
+	gtk_widget_show (box1);
 
 	label = gtk_button_new ();
 	tbox = gtk_hbox_new (FALSE, 0);
@@ -125,32 +152,36 @@ build_account_button (MailSettingsView *acview, EAccount *account)
 	gtk_box_pack_start((GtkBox *)tbox, tlabel, FALSE, FALSE, 0);
 	gtk_widget_show(tbox);
 	gtk_container_add((GtkContainer *)label, tbox);
-	PACK_BOX(label,24);
 	g_object_set_data ((GObject *)label, "account", account);
 	g_signal_connect(label, "clicked", G_CALLBACK(msv_edit_account), acview);
+	gtk_box_pack_start ((GtkBox *)box1, label, FALSE, FALSE, 0);
+	gtk_widget_show (label);
+
+	if (account) {
+		tlabel = gtk_button_new_from_stock ("gtk-delete");
+		gtk_box_pack_start((GtkBox *)box1, tlabel, FALSE, FALSE, 12);
+		gtk_widget_show(tlabel);
+		g_object_set_data ((GObject *)tlabel, "account", account);
+		g_signal_connect (tlabel, "clicked", G_CALLBACK(msv_delete_account), acview);
+	}
+
+	PACK_BOX(box1,24);
 }
 
-void
-mail_settings_view_construct (MailSettingsView *acview)
+static void 
+msv_regen_view (MailSettingsView *acview)
 {
-	GtkWidget *box, *label;
 	struct _EAccount *account;
-	EAccountList *accounts;
+	EAccountList *accounts = acview->priv->accounts;
 	EIterator *node;
+	GtkWidget *box, *label;
 
-	acview->priv->scroll = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (acview->priv->scroll);
-	gtk_container_add (acview, acview->priv->scroll);
-	gtk_scrolled_window_set_policy (acview->priv->scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	acview->priv->box = gtk_vbox_new (FALSE, 0);
-	gtk_widget_show (acview->priv->box);
-	gtk_scrolled_window_add_with_viewport (acview->priv->scroll, acview->priv->box);
+	gtk_container_foreach(acview->priv->box, gtk_widget_destroy, NULL);
 
 	label = gtk_label_new (NULL);
 	gtk_label_set_markup ((GtkLabel *)label, _("<span size=\"large\" weight=\"bold\">Account management</span>"));
 	PACK_BOX(label,12);
 
-	accounts = mail_config_get_accounts ();
 	node = e_list_get_iterator ((EList *) accounts);
 	while (e_iterator_is_valid (node)) {
 		account = (EAccount *) e_iterator_get (node);
@@ -159,7 +190,22 @@ mail_settings_view_construct (MailSettingsView *acview)
 	}
 	g_object_unref (node);
 	build_account_button (acview, NULL);
+}
+
+void
+mail_settings_view_construct (MailSettingsView *acview)
+{
+	acview->priv->scroll = gtk_scrolled_window_new (NULL, NULL);
+	gtk_widget_show (acview->priv->scroll);
+	gtk_container_add (acview, acview->priv->scroll);
+	gtk_scrolled_window_set_policy (acview->priv->scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	acview->priv->box = gtk_vbox_new (FALSE, 0);
+	gtk_widget_show (acview->priv->box);
+	gtk_scrolled_window_add_with_viewport (acview->priv->scroll, acview->priv->box);
 
+	acview->priv->accounts = mail_config_get_accounts ();
+	g_signal_connect (acview->priv->accounts, "account-added", G_CALLBACK(msv_account_added), acview);
+	msv_regen_view (acview);
 	gtk_widget_show((GtkWidget *)acview);
 
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]