[empathy] Show the assistant if there are no non-salut accounts



commit e288bb38a4f04cf4ce00e77b5b81937eda2f0a12
Author: Sjoerd Simons <sjoerd simons collabora co uk>
Date:   Tue Oct 13 19:22:40 2009 -0400

    Show the assistant if there are no non-salut accounts

 src/empathy-account-assistant.c |   18 +++++++++++++++---
 src/empathy-account-assistant.h |    2 +-
 src/empathy.c                   |   31 +++++++++++++++++++++++++------
 3 files changed, 41 insertions(+), 10 deletions(-)
---
diff --git a/src/empathy-account-assistant.c b/src/empathy-account-assistant.c
index ca4881f..d9834f3 100644
--- a/src/empathy-account-assistant.c
+++ b/src/empathy-account-assistant.c
@@ -930,8 +930,20 @@ empathy_account_assistant_init (EmpathyAccountAssistant *self)
 }
 
 GtkWidget *
-empathy_account_assistant_new (GtkWindow *window)
+empathy_account_assistant_show (GtkWindow *window)
 {
-  return g_object_new (EMPATHY_TYPE_ACCOUNT_ASSISTANT, "parent-window",
-      window, NULL);
+  static GtkWidget *dialog = NULL;
+
+  if (dialog == NULL)
+    {
+      dialog =  g_object_new (EMPATHY_TYPE_ACCOUNT_ASSISTANT, "parent-window",
+        window, NULL);
+      g_object_add_weak_pointer (G_OBJECT (dialog), (gpointer *) &dialog);
+    }
+
+  gtk_window_present (GTK_WINDOW (dialog));
+
+  return dialog;
 }
+
+
diff --git a/src/empathy-account-assistant.h b/src/empathy-account-assistant.h
index 8574602..ef91fa9 100644
--- a/src/empathy-account-assistant.h
+++ b/src/empathy-account-assistant.h
@@ -56,7 +56,7 @@ typedef struct {
 
 GType empathy_account_assistant_get_type (void);
 
-GtkWidget *empathy_account_assistant_new (GtkWindow *parent);
+GtkWidget *empathy_account_assistant_show (GtkWindow *parent);
 
 G_END_DECLS
 
diff --git a/src/empathy.c b/src/empathy.c
index 1226b55..9152b64 100644
--- a/src/empathy.c
+++ b/src/empathy.c
@@ -313,18 +313,37 @@ create_salut_account_if_needed (EmpathyConnectionManagers *managers)
   g_object_unref (book);
 }
 
+static gboolean
+has_non_salut_accounts (EmpathyAccountManager *manager)
+{
+  gboolean ret = FALSE;
+  GList *accounts, *l;
+
+  accounts = empathy_account_manager_dup_accounts (manager);
+
+  for (l = accounts ; l != NULL; l = g_list_next (l))
+    {
+      EmpathyAccount *account = EMPATHY_ACCOUNT (l->data);
+
+      if (tp_strdiff (empathy_account_get_protocol (l->data), "local-xmpp"))
+        ret = TRUE;
+
+      g_object_unref (account);
+    }
+
+  g_list_free (accounts);
+
+  return ret;
+}
+
 static void
 maybe_show_account_assistant (void)
 {
   EmpathyAccountManager *manager;
   manager = empathy_account_manager_dup_singleton ();
 
-  if (empathy_account_manager_get_count (manager) == 0)
-    {
-      GtkWidget * assistant = empathy_account_assistant_new (
-        GTK_WINDOW (empathy_main_window_get ()));
-      gtk_window_present (GTK_WINDOW (assistant));
-    }
+  if (!has_non_salut_accounts (manager))
+    empathy_account_assistant_show (GTK_WINDOW (empathy_main_window_get ()));
 }
 
 static gboolean



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