[frogr] Don't stay in a non-idle state when loading projects with no pictures



commit 3f93f6aec84581d2d0b6f2c50352047959897c4e
Author: Mario Sanchez Prada <msanchez gnome org>
Date:   Sat Dec 8 00:28:48 2012 +0100

    Don't stay in a non-idle state when loading projects with no pictures

 src/frogr-controller.c |   14 ++++++++------
 src/frogr-model.c      |   40 ++++++++++++++++++++++++----------------
 2 files changed, 32 insertions(+), 22 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index f7dd956..2011b12 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -281,6 +281,7 @@ _g_application_startup_cb (GApplication *app, gpointer data)
 {
   FrogrController *self = FROGR_CONTROLLER (data);
   FrogrControllerPrivate *priv = FROGR_CONTROLLER_GET_PRIVATE (self);
+  FrogrModel *model = NULL;
   FrogrAccount *account = NULL;
   gboolean use_dark_theme;
 
@@ -290,6 +291,11 @@ _g_application_startup_cb (GApplication *app, gpointer data)
   priv->mainview = frogr_main_view_new (GTK_APPLICATION (app));
   g_object_add_weak_pointer (G_OBJECT (priv->mainview),
                              (gpointer) & priv->mainview);
+  /* Connect to signals */
+  model = frogr_main_view_get_model (priv->mainview);
+  g_signal_connect (G_OBJECT (model), "model-deserialized",
+                    G_CALLBACK (_on_model_deserialized),
+                    self);
 
   /* Start on idle state */
   _set_state (self, FROGR_STATE_IDLE);
@@ -2844,8 +2850,6 @@ frogr_controller_open_project_from_file (FrogrController *self, const gchar *pat
       FrogrModel *model = NULL;
       JsonNode *json_root = NULL;
 
-      _set_state (self, FROGR_STATE_LOADING_PICTURES);
-
       /* Make sure we are not fetching any data from the network at
          this moment, or cancel otherwise, so the model is ready */
       priv = FROGR_CONTROLLER_GET_PRIVATE (self);
@@ -2853,13 +2857,11 @@ frogr_controller_open_project_from_file (FrogrController *self, const gchar *pat
         frogr_controller_cancel_ongoing_requests (self);
 
       /* Deserialize from the JSON data and update the model */
+      _set_state (self, FROGR_STATE_LOADING_PICTURES);
+
       model = frogr_main_view_get_model (priv->mainview);
       json_root = json_parser_get_root (json_parser);
       frogr_model_deserialize (model, json_root);
-
-      g_signal_connect (G_OBJECT (model), "model-deserialized",
-                        G_CALLBACK (_on_model_deserialized),
-                        self);
     }
 
   g_object_unref (json_parser);
diff --git a/src/frogr-model.c b/src/frogr-model.c
index 73544b3..98ad1cd 100644
--- a/src/frogr-model.c
+++ b/src/frogr-model.c
@@ -813,7 +813,6 @@ frogr_model_serialize (FrogrModel *self)
 void
 frogr_model_deserialize (FrogrModel *self, JsonNode *json_node)
 {
-  FrogrFileLoader *loader = NULL;
   JsonObject *root_object = NULL;
   JsonArray *array_member = NULL;
   GSList *pictures = NULL;
@@ -849,19 +848,28 @@ frogr_model_deserialize (FrogrModel *self, JsonNode *json_node)
   if (array_member)
     pictures = _deserialize_list_from_json_array (array_member, FROGR_TYPE_PICTURE);
 
-  /* Now we take the list of pictures and carefully add them into the
-     model as long as the associated thumbnails are being loaded */
-  loader = frogr_file_loader_new_from_pictures (pictures);
-
-  g_signal_connect (G_OBJECT (loader), "file-loaded",
-                    G_CALLBACK (_on_file_loaded),
-                    self);
-
-  g_signal_connect (G_OBJECT (loader), "files-loaded",
-                    G_CALLBACK (_on_files_loaded),
-                    self);
-
-  /* Load the pictures! */
-  _remove_pictures (self);
-  frogr_file_loader_load (loader);
+  if (pictures)
+    {
+      FrogrFileLoader *loader = NULL;
+
+      /* Now we take the list of pictures and add them into the
+         model as the associated thumbnails are being loaded */
+      loader = frogr_file_loader_new_from_pictures (pictures);
+
+      g_signal_connect (G_OBJECT (loader), "file-loaded",
+                        G_CALLBACK (_on_file_loaded),
+                        self);
+
+      g_signal_connect (G_OBJECT (loader), "files-loaded",
+                        G_CALLBACK (_on_files_loaded),
+                        self);
+      /* Load the pictures! */
+      _remove_pictures (self);
+      frogr_file_loader_load (loader);
+    }
+  else
+    {
+      /* We are done deserializing already now if there are no pictures */
+      g_signal_emit (self, signals[MODEL_DESERIALIZED], 0);
+    }
 }



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