]> git.0d.be Git - empathy.git/commitdiff
Show the assistant if there are no non-salut accounts
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Tue, 13 Oct 2009 23:22:40 +0000 (19:22 -0400)
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>
Wed, 14 Oct 2009 17:26:03 +0000 (13:26 -0400)
src/empathy-account-assistant.c
src/empathy-account-assistant.h
src/empathy.c

index ca4881fd3a360ba309fa387af4c3c760f7ab3f00..d9834f38b6a9efb221a0f90cfeb8dee815a060ad 100644 (file)
@@ -930,8 +930,20 @@ empathy_account_assistant_init (EmpathyAccountAssistant *self)
 }
 
 GtkWidget *
 }
 
 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;
 }
 }
+
+
index 85746020198f0be4df43ef0dc19b73eb95a0f67c..ef91fa9da5c6dd855b8ba1133ca0e9a3a823cdbd 100644 (file)
@@ -56,7 +56,7 @@ typedef struct {
 
 GType empathy_account_assistant_get_type (void);
 
 
 GType empathy_account_assistant_get_type (void);
 
-GtkWidget *empathy_account_assistant_new (GtkWindow *parent);
+GtkWidget *empathy_account_assistant_show (GtkWindow *parent);
 
 G_END_DECLS
 
 
 G_END_DECLS
 
index 1226b55ddf5e00c6a2af0939d68f624ce2458290..9152b643d64bb1e0e3f7e4126a723eb05a7aeeb8 100644 (file)
@@ -313,18 +313,37 @@ create_salut_account_if_needed (EmpathyConnectionManagers *managers)
   g_object_unref (book);
 }
 
   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 ();
 
 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
 }
 
 static gboolean