empathy r1629 - trunk/src



Author: xclaesse
Date: Fri Oct 17 12:47:45 2008
New Revision: 1629
URL: http://svn.gnome.org/viewvc/empathy?rev=1629&view=rev

Log:
Moved some code around for clarity and also to parse accounts before the Glade file is loaded. (Jonny Lamb)

This prevents the glade being parsed, all the widgets being set up, and
then a single message dialog popping up saying there are no accounts to
import, just to then free it all.

Signed-off-by: Jonny Lamb <jonny lamb collabora co uk>

Modified:
   trunk/src/empathy-import-dialog.c

Modified: trunk/src/empathy-import-dialog.c
==============================================================================
--- trunk/src/empathy-import-dialog.c	(original)
+++ trunk/src/empathy-import-dialog.c	Fri Oct 17 12:47:45 2008
@@ -102,6 +102,7 @@
   GtkWidget *button_ok;
   GtkWidget *button_cancel;
   gboolean not_imported;
+  GList *accounts;
 } EmpathyImportDialog;
 
 #define PIDGIN_ACCOUNT_TAG_NAME "name"
@@ -460,7 +461,9 @@
 static void
 import_dialog_free (EmpathyImportDialog *dialog)
 {
-  gtk_widget_destroy (dialog->window);
+  if (dialog->window)
+    gtk_widget_destroy (dialog->window);
+  g_list_free (dialog->accounts);
   g_slice_free (EmpathyImportDialog, dialog);
 }
 
@@ -519,21 +522,16 @@
   return !result;
 }
 
-static gboolean
+static void
 import_dialog_add_accounts_to_model (EmpathyImportDialog *dialog)
 {
   GtkTreeModel *model;
   GtkTreeIter iter;
-  GList *accounts, *account;
-  guint length;
+  GList *account;
 
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
 
-  accounts = import_dialog_pidgin_load ();
-
-  length = g_list_length (accounts);
-
-  for (account = accounts; account; account = account->next)
+  for (account = dialog->accounts; account; account = account->next)
     {
       GValue *value, *account_data;
       AccountData *data = (AccountData *) account->data;
@@ -576,26 +574,6 @@
           COL_ACCOUNT_DATA, account_data,
           -1);
     }
-
-  g_list_free (accounts);
-
-  if (length == 0)
-    {
-      GtkWidget *message;
-
-      message = gtk_message_dialog_new (
-          gtk_window_get_transient_for (GTK_WINDOW (dialog->window)),
-          GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,
-          _("No accounts to import could be found. Empathy currently only "
-            "supports importing accounts from Pidgin."));
-
-      gtk_dialog_run (GTK_DIALOG (message));
-      gtk_widget_destroy (message);
-      import_dialog_free (dialog);
-      return FALSE;
-    }
-  else
-    return TRUE;
 }
 
 static void
@@ -619,7 +597,7 @@
   gtk_tree_path_free (path);
 }
 
-static gboolean
+static void
 import_dialog_set_up_account_list (EmpathyImportDialog *dialog)
 {
   GtkListStore *store;
@@ -687,7 +665,7 @@
   gtk_tree_view_column_pack_start (column, cell, TRUE);
   gtk_tree_view_column_add_attribute (column, cell, "text", COL_SOURCE);
 
-  return import_dialog_add_accounts_to_model (dialog);
+  import_dialog_add_accounts_to_model (dialog);
 }
 
 void
@@ -705,6 +683,24 @@
 
   dialog = g_slice_new0 (EmpathyImportDialog);
 
+  dialog->accounts = import_dialog_pidgin_load ();
+
+  if (g_list_length (dialog->accounts) == 0)
+    {
+      GtkWidget *message;
+
+      message = gtk_message_dialog_new (parent,
+          GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,
+          _("No accounts to import could be found. Empathy currently only "
+            "supports importing accounts from Pidgin."));
+
+      gtk_dialog_run (GTK_DIALOG (message));
+      gtk_widget_destroy (message);
+      import_dialog_free (dialog);
+      dialog = NULL;
+      return;
+    }
+
   filename = empathy_file_lookup ("empathy-import-dialog.glade", "src");
   glade = empathy_glade_get_file (filename,
       "import_dialog",
@@ -727,6 +723,7 @@
   if (parent)
     gtk_window_set_transient_for (GTK_WINDOW (dialog->window), parent);
 
-  if (import_dialog_set_up_account_list (dialog))
-    gtk_widget_show (dialog->window);
+  import_dialog_set_up_account_list (dialog);
+
+  gtk_widget_show (dialog->window);
 }



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