[anjal] Support for delete/add new accounts. View refresh, etc.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: svn-commits-list gnome org
- Subject: [anjal] Support for delete/add new accounts. View refresh, etc.
- Date: Sun, 19 Jul 2009 16:51:34 +0000 (UTC)
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]