]> git.0d.be Git - empathy.git/blobdiff - src/empathy-accounts-dialog.c
keep a ref on the selected account
[empathy.git] / src / empathy-accounts-dialog.c
index 98d31b3b9a0bcad49814a985b88ac6d9734c03ce..f027eccc01a2877587c3b44d017ae3d92630d9db 100644 (file)
@@ -1199,6 +1199,7 @@ accounts_dialog_cms_ready_cb (EmpathyConnectionManagers *cms,
         {
           accounts_dialog_set_selected_account
               (dialog, priv->initial_selection);
+          g_object_unref (priv->initial_selection);
           priv->initial_selection = NULL;
         }
     }
@@ -1304,6 +1305,10 @@ do_dispose (GObject *obj)
       priv->cms = NULL;
     }
 
+  if (priv->initial_selection != NULL)
+    g_object_unref (priv->initial_selection);
+  priv->initial_selection = NULL;
+
   G_OBJECT_CLASS (empathy_accounts_dialog_parent_class)->dispose (obj);
 }
 
@@ -1488,13 +1493,16 @@ empathy_accounts_dialog_show (GtkWindow *parent,
 
   priv = GET_PRIV (dialog);
 
-  if (selected_account && empathy_connection_managers_is_ready (priv->cms))
-    accounts_dialog_set_selected_account (dialog, selected_account);
-  else
-    /* save the selection to set it later when the cms
-     * becomes ready.
-     */
-    priv->initial_selection = selected_account;
+  if (selected_account)
+    {
+      if (empathy_connection_managers_is_ready (priv->cms))
+        accounts_dialog_set_selected_account (dialog, selected_account);
+      else
+        /* save the selection to set it later when the cms
+         * becomes ready.
+         */
+        priv->initial_selection = g_object_ref (selected_account);
+    }
 
   gtk_window_present (GTK_WINDOW (priv->window));