[geary/wip/714922-multiple-addresses-2] properly save alternate email addresses



commit 941d2677cea0ce4a3fc3e32d3e843db89f91cb2c
Author: Jim Nelson <jim yorba org>
Date:   Wed Feb 11 15:37:41 2015 -0800

    properly save alternate email addresses

 .../account-dialog-edit-alternate-emails-pane.vala |   25 ++++++++++++++-----
 src/engine/api/geary-account-information.vala      |   17 +++++++++++++
 ui/edit_alternate_emails.glade                     |    7 +++--
 3 files changed, 39 insertions(+), 10 deletions(-)
---
diff --git a/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala 
b/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala
index 3e4dfd4..56f1c34 100644
--- a/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala
+++ b/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala
@@ -28,7 +28,7 @@ public class AccountDialogEditAlternateEmailsPane : AccountDialogPane {
     private Gtk.ListBox address_listbox;
     private Gtk.ToolButton delete_button;
     private Gtk.Button cancel_button;
-    private Gtk.Button save_button;
+    private Gtk.Button update_button;
     private ListItem? selected_item = null;
     
     private Geary.AccountInformation? account_info = null;
@@ -52,11 +52,11 @@ public class AccountDialogEditAlternateEmailsPane : AccountDialogPane {
         address_listbox = (Gtk.ListBox) builder.get_object("address_listbox");
         delete_button = (Gtk.ToolButton) builder.get_object("delete_button");
         cancel_button = (Gtk.Button) builder.get_object("cancel_button");
-        save_button = (Gtk.Button) builder.get_object("save_button");
+        update_button = (Gtk.Button) builder.get_object("update_button");
         
         email_entry.bind_property("text", add_button, "sensitive", BindingFlags.SYNC_CREATE,
             transform_email_to_sensitive);
-        bind_property("changed", save_button, "sensitive", BindingFlags.SYNC_CREATE);
+        bind_property("changed", update_button, "sensitive", BindingFlags.SYNC_CREATE);
         
         delete_button.sensitive = false;
         
@@ -64,7 +64,7 @@ public class AccountDialogEditAlternateEmailsPane : AccountDialogPane {
         add_button.clicked.connect(on_add_clicked);
         delete_button.clicked.connect(on_delete_clicked);
         cancel_button.clicked.connect(() => { done(); });
-        save_button.clicked.connect(on_save_clicked);
+        update_button.clicked.connect(on_update_clicked);
     }
     
     private bool transform_email_to_sensitive(Binding binding, Value source, ref Value target) {
@@ -94,6 +94,14 @@ public class AccountDialogEditAlternateEmailsPane : AccountDialogPane {
             add_email_address(email_address, false);
     }
     
+    public override void present() {
+        base.present();
+        
+        // because in a Gtk.Stack, need to do this manually after presenting
+        email_entry.grab_focus();
+        add_button.has_default = true;
+    }
+    
     private void add_email_address(string email_address, bool is_change) {
         if (email_addresses.contains(email_address))
             return;
@@ -139,7 +147,11 @@ public class AccountDialogEditAlternateEmailsPane : AccountDialogPane {
     
     private void on_add_clicked() {
         add_email_address(email_entry.text, true);
+        
+        // reset state for next input
         email_entry.text = "";
+        email_entry.grab_focus();
+        add_button.has_default = true;
     }
     
     private void on_delete_clicked() {
@@ -147,9 +159,8 @@ public class AccountDialogEditAlternateEmailsPane : AccountDialogPane {
             remove_email_address(selected_item.mailbox);
     }
     
-    private void on_save_clicked() {
-        foreach (string email_address in email_addresses)
-            account_info.add_alternate_email(email_address);
+    private void on_update_clicked() {
+        account_info.replace_alternate_emails(email_addresses);
         
         done();
     }
diff --git a/src/engine/api/geary-account-information.vala b/src/engine/api/geary-account-information.vala
index cf5a8dd..381ce76 100644
--- a/src/engine/api/geary-account-information.vala
+++ b/src/engine/api/geary-account-information.vala
@@ -309,6 +309,21 @@ public class Geary.AccountInformation : BaseObject {
     }
     
     /**
+     * Replaces the list of alternate email addresses with the supplied collection.
+     *
+     * Duplicates will be ignored.
+     */
+    public void replace_alternate_emails(Gee.Collection<string>? emails) {
+        alternate_emails = null;
+        
+        if (emails == null || emails.size == 0)
+            return;
+        
+        foreach (string email in emails)
+            add_alternate_email(email);
+    }
+    
+    /**
      * Return whether this account allows setting the save_sent_mail option.
      * If not, save_sent_mail will always be true and setting it will be
      * ignored.
@@ -762,6 +777,8 @@ public class Geary.AccountInformation : BaseObject {
         key_file.set_boolean(GROUP, SAVE_SENT_MAIL_KEY, save_sent_mail);
         key_file.set_boolean(GROUP, USE_EMAIL_SIGNATURE_KEY, use_email_signature);
         key_file.set_string(GROUP, EMAIL_SIGNATURE_KEY, email_signature);
+        if (alternate_emails != null && alternate_emails.size > 0)
+            key_file.set_string_list(GROUP, ALTERNATE_EMAILS_KEY, alternate_emails.to_array());
         
         if (service_provider == ServiceProvider.OTHER) {
             key_file.set_value(GROUP, IMAP_HOST, default_imap_server_host);
diff --git a/ui/edit_alternate_emails.glade b/ui/edit_alternate_emails.glade
index ee563d7..2e26887 100644
--- a/ui/edit_alternate_emails.glade
+++ b/ui/edit_alternate_emails.glade
@@ -47,7 +47,6 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="can_default">True</property>
-            <property name="has_default">True</property>
             <property name="receives_default">True</property>
             <property name="use_underline">True</property>
             <child>
@@ -161,6 +160,7 @@
             <property name="label" translatable="yes">_Cancel</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
+            <property name="can_default">True</property>
             <property name="receives_default">True</property>
             <property name="use_underline">True</property>
           </object>
@@ -171,10 +171,11 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="save_button">
-            <property name="label" translatable="yes">_Save</property>
+          <object class="GtkButton" id="update_button">
+            <property name="label" translatable="yes">_Update</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
+            <property name="can_default">True</property>
             <property name="receives_default">True</property>
             <property name="use_underline">True</property>
           </object>


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