[frogr] Don't stay in a non-idle state when loading projects with no pictures
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [frogr] Don't stay in a non-idle state when loading projects with no pictures
- Date: Fri, 7 Dec 2012 23:29:28 +0000 (UTC)
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]