[gnome-contacts] Use singleton pattern for NewContactDialog



commit f9de25fc11d13829c5a93e7d72c04929673d6e0b
Author: Chris Cummins <christopher e cummins intel com>
Date:   Thu May 23 14:22:18 2013 +0100

    Use singleton pattern for NewContactDialog
    
    This ensures that only one instance of the new contact dialog can exist
    at a time, preventing users from opening multiple dialogs simultaneously
    by repeatedly clicking the 'New' button.
    
    v2: Rename 'get_instance()' to 'get_default()' (Erick Pérez Castellanos)
    
    https://bugzilla.gnome.org/show_bug.cgi?id=700889

 src/contacts-app.vala                |    2 +-
 src/contacts-new-contact-dialog.vala |   14 +++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/src/contacts-app.vala b/src/contacts-app.vala
index 9f9dfba..6162b9e 100644
--- a/src/contacts-app.vala
+++ b/src/contacts-app.vala
@@ -469,7 +469,7 @@ public class Contacts.App : Gtk.Application {
   }
 
   public void new_contact () {
-    var dialog = new NewContactDialog (contacts_store, window);
+    var dialog = NewContactDialog.get_default (contacts_store, window);
     dialog.show_all ();
   }
 
diff --git a/src/contacts-new-contact-dialog.vala b/src/contacts-new-contact-dialog.vala
index 816c863..80750e0 100644
--- a/src/contacts-new-contact-dialog.vala
+++ b/src/contacts-new-contact-dialog.vala
@@ -20,6 +20,8 @@ using Gtk;
 using Folks;
 using Gee;
 
+private static Contacts.NewContactDialog new_contact_dialog;
+
 public class Contacts.NewContactDialog : Dialog {
   Store contacts_store;
   Grid grid;
@@ -31,7 +33,15 @@ public class Contacts.NewContactDialog : Dialog {
   ArrayList<Grid> address_entries;
   ArrayList<TypeCombo> address_combos;
 
-  public NewContactDialog(Store contacts_store, Window? parent) {
+  public static NewContactDialog get_default (Store contacts_store,
+                                              Window? parent) {
+    if (new_contact_dialog == null)
+      new_contact_dialog = new NewContactDialog (contacts_store, parent);
+
+    return new_contact_dialog;
+  }
+
+  private NewContactDialog (Store contacts_store, Window? parent) {
     set_title (_("New contact"));
     this.contacts_store = contacts_store;
     set_destroy_with_parent (true);
@@ -221,6 +231,8 @@ public class Contacts.NewContactDialog : Dialog {
       create_persona (details);
     }
 
+    new_contact_dialog = null;
+
     this.destroy ();
   }
 


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