[gnome-contacts] Use singleton pattern for NewContactDialog
- From: Erick Pérez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-contacts] Use singleton pattern for NewContactDialog
- Date: Tue, 28 May 2013 12:31:08 +0000 (UTC)
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]