[gnome-photos] Show the contents of a collection from collections and favorites modes



commit 4ca6704b5b2cfbedba945f7e11870363a261918d
Author: Debarshi Ray <debarshir gnome org>
Date:   Sun Apr 14 23:29:08 2013 +0200

    Show the contents of a collection from collections and favorites modes
    
    Selecting a collection inside the collection or favorites mode should
    display the items inside the collection.
    
    So we modify the queries returned by the PhotosTrackerController and
    PhotosOffsetController implementations so that they don't use an query
    flags when an active collection is present. Similarly, we don't remove
    anything from PhotosViewModel when they stop being a collection or
    favorite when a collection is active

 src/photos-offset-collections-controller.c  | 43 +++++++++++++++++++++++++++--
 src/photos-offset-collections-controller.h  |  2 ++
 src/photos-offset-controller.c              |  2 +-
 src/photos-offset-controller.h              |  2 +-
 src/photos-offset-favorites-controller.c    | 43 +++++++++++++++++++++++++++--
 src/photos-offset-favorites-controller.h    |  4 ++-
 src/photos-offset-overview-controller.c     |  2 +-
 src/photos-tracker-collections-controller.c | 43 +++++++++++++++++++++++++++--
 src/photos-tracker-collections-controller.h |  2 ++
 src/photos-tracker-controller.c             |  2 +-
 src/photos-tracker-controller.h             |  2 +-
 src/photos-tracker-favorites-controller.c   | 43 +++++++++++++++++++++++++++--
 src/photos-tracker-favorites-controller.h   |  4 ++-
 src/photos-tracker-overview-controller.c    |  2 +-
 src/photos-view-model.c                     | 38 +++++++++++++++++--------
 15 files changed, 206 insertions(+), 28 deletions(-)
---
diff --git a/src/photos-offset-collections-controller.c b/src/photos-offset-collections-controller.c
index 269c4ba..0565ed0 100644
--- a/src/photos-offset-collections-controller.c
+++ b/src/photos-offset-collections-controller.c
@@ -25,19 +25,36 @@
 
 #include "config.h"
 
+#include "photos-collection-manager.h"
 #include "photos-query-builder.h"
 #include "photos-offset-collections-controller.h"
 
 
+struct _PhotosOffsetCollectionsControllerPrivate
+{
+  PhotosBaseManager *col_mngr;
+};
+
+
 G_DEFINE_TYPE (PhotosOffsetCollectionsController,
                photos_offset_collections_controller,
                PHOTOS_TYPE_OFFSET_CONTROLLER);
 
 
 static PhotosQuery *
-photos_offset_collections_controller_get_query (void)
+photos_offset_collections_controller_get_query (PhotosOffsetController *offset_cntrlr)
 {
-  return photos_query_builder_count_query (PHOTOS_QUERY_FLAGS_COLLECTIONS);
+  PhotosOffsetCollectionsController *self = PHOTOS_OFFSET_COLLECTIONS_CONTROLLER (offset_cntrlr);
+  GObject *collection;
+  gint flags;
+
+  collection = photos_base_manager_get_active_object (self->priv->col_mngr);
+  if (collection != NULL)
+    flags = PHOTOS_QUERY_FLAGS_NONE;
+  else
+    flags = PHOTOS_QUERY_FLAGS_COLLECTIONS;
+
+  return photos_query_builder_count_query (flags);
 }
 
 
@@ -62,8 +79,27 @@ photos_offset_collections_controller_constructor (GType type,
 
 
 static void
+photos_offset_collections_controller_dispose (GObject *object)
+{
+  PhotosOffsetCollectionsController *self = PHOTOS_OFFSET_COLLECTIONS_CONTROLLER (object);
+
+  g_clear_object (&self->priv->col_mngr);
+
+  G_OBJECT_CLASS (photos_offset_collections_controller_parent_class)->dispose (object);
+}
+
+
+static void
 photos_offset_collections_controller_init (PhotosOffsetCollectionsController *self)
 {
+  PhotosOffsetCollectionsControllerPrivate *priv;
+
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                            PHOTOS_TYPE_OFFSET_COLLECTIONS_CONTROLLER,
+                                            PhotosOffsetCollectionsControllerPrivate);
+  priv = self->priv;
+
+  priv->col_mngr = photos_collection_manager_new ();
 }
 
 
@@ -74,7 +110,10 @@ photos_offset_collections_controller_class_init (PhotosOffsetCollectionsControll
   PhotosOffsetControllerClass *offset_controller_class = PHOTOS_OFFSET_CONTROLLER_CLASS (class);
 
   object_class->constructor = photos_offset_collections_controller_constructor;
+  object_class->dispose = photos_offset_collections_controller_dispose;
   offset_controller_class->get_query = photos_offset_collections_controller_get_query;
+
+  g_type_class_add_private (class, sizeof (PhotosOffsetCollectionsControllerPrivate));
 }
 
 
diff --git a/src/photos-offset-collections-controller.h b/src/photos-offset-collections-controller.h
index 2616aa3..fac50c1 100644
--- a/src/photos-offset-collections-controller.h
+++ b/src/photos-offset-collections-controller.h
@@ -53,10 +53,12 @@ G_BEGIN_DECLS
 
 typedef struct _PhotosOffsetCollectionsController        PhotosOffsetCollectionsController;
 typedef struct _PhotosOffsetCollectionsControllerClass   PhotosOffsetCollectionsControllerClass;
+typedef struct _PhotosOffsetCollectionsControllerPrivate PhotosOffsetCollectionsControllerPrivate;
 
 struct _PhotosOffsetCollectionsController
 {
   PhotosOffsetController parent_instance;
+  PhotosOffsetCollectionsControllerPrivate *priv;
 };
 
 struct _PhotosOffsetCollectionsControllerClass
diff --git a/src/photos-offset-controller.c b/src/photos-offset-controller.c
index 33d29b6..96ba810 100644
--- a/src/photos-offset-controller.c
+++ b/src/photos-offset-controller.c
@@ -212,7 +212,7 @@ photos_offset_controller_reset_count (PhotosOffsetController *self)
   PhotosOffsetControllerPrivate *priv = self->priv;
   PhotosQuery *query;
 
-  query = PHOTOS_OFFSET_CONTROLLER_GET_CLASS (self)->get_query ();
+  query = PHOTOS_OFFSET_CONTROLLER_GET_CLASS (self)->get_query (self);
   photos_tracker_queue_select (priv->queue,
                                query->sparql,
                                NULL,
diff --git a/src/photos-offset-controller.h b/src/photos-offset-controller.h
index c895d0a..bf3bf66 100644
--- a/src/photos-offset-controller.h
+++ b/src/photos-offset-controller.h
@@ -68,7 +68,7 @@ struct _PhotosOffsetControllerClass
   GObjectClass parent_class;
 
   /* virtual methods */
-  PhotosQuery *(*get_query) (void);
+  PhotosQuery *(*get_query) (PhotosOffsetController *self);
 
   /* signals */
   void (*count_changed)      (PhotosOffsetController *self, gint count);
diff --git a/src/photos-offset-favorites-controller.c b/src/photos-offset-favorites-controller.c
index 82f797f..78293ae 100644
--- a/src/photos-offset-favorites-controller.c
+++ b/src/photos-offset-favorites-controller.c
@@ -25,17 +25,34 @@
 
 #include "config.h"
 
+#include "photos-collection-manager.h"
 #include "photos-query-builder.h"
 #include "photos-offset-favorites-controller.h"
 
 
+struct _PhotosOffsetFavoritesControllerPrivate
+{
+  PhotosBaseManager *col_mngr;
+};
+
+
 G_DEFINE_TYPE (PhotosOffsetFavoritesController, photos_offset_favorites_controller, 
PHOTOS_TYPE_OFFSET_CONTROLLER);
 
 
 static PhotosQuery *
-photos_offset_favorites_controller_get_query (void)
+photos_offset_favorites_controller_get_query (PhotosOffsetController *offset_cntrlr)
 {
-  return photos_query_builder_count_query (PHOTOS_QUERY_FLAGS_FAVORITES);
+  PhotosOffsetFavoritesController *self = PHOTOS_OFFSET_FAVORITES_CONTROLLER (offset_cntrlr);
+  GObject *collection;
+  gint flags;
+
+  collection = photos_base_manager_get_active_object (self->priv->col_mngr);
+  if (collection != NULL)
+    flags = PHOTOS_QUERY_FLAGS_NONE;
+  else
+    flags = PHOTOS_QUERY_FLAGS_FAVORITES;
+
+  return photos_query_builder_count_query (flags);
 }
 
 
@@ -60,8 +77,27 @@ photos_offset_favorites_controller_constructor (GType type,
 
 
 static void
+photos_offset_favorites_controller_dispose (GObject *object)
+{
+  PhotosOffsetFavoritesController *self = PHOTOS_OFFSET_FAVORITES_CONTROLLER (object);
+
+  g_clear_object (&self->priv->col_mngr);
+
+  G_OBJECT_CLASS (photos_offset_favorites_controller_parent_class)->dispose (object);
+}
+
+
+static void
 photos_offset_favorites_controller_init (PhotosOffsetFavoritesController *self)
 {
+  PhotosOffsetFavoritesControllerPrivate *priv;
+
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                            PHOTOS_TYPE_OFFSET_FAVORITES_CONTROLLER,
+                                            PhotosOffsetFavoritesControllerPrivate);
+  priv = self->priv;
+
+  priv->col_mngr = photos_collection_manager_new ();
 }
 
 
@@ -72,7 +108,10 @@ photos_offset_favorites_controller_class_init (PhotosOffsetFavoritesControllerCl
   PhotosOffsetControllerClass *offset_controller_class = PHOTOS_OFFSET_CONTROLLER_CLASS (class);
 
   object_class->constructor = photos_offset_favorites_controller_constructor;
+  object_class->dispose = photos_offset_favorites_controller_dispose;
   offset_controller_class->get_query = photos_offset_favorites_controller_get_query;
+
+  g_type_class_add_private (class, sizeof (PhotosOffsetFavoritesControllerPrivate));
 }
 
 
diff --git a/src/photos-offset-favorites-controller.h b/src/photos-offset-favorites-controller.h
index 2f608a8..15cf843 100644
--- a/src/photos-offset-favorites-controller.h
+++ b/src/photos-offset-favorites-controller.h
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012 Red Hat, Inc.
+ * Copyright © 2012, 2013 Red Hat, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -53,10 +53,12 @@ G_BEGIN_DECLS
 
 typedef struct _PhotosOffsetFavoritesController        PhotosOffsetFavoritesController;
 typedef struct _PhotosOffsetFavoritesControllerClass   PhotosOffsetFavoritesControllerClass;
+typedef struct _PhotosOffsetFavoritesControllerPrivate PhotosOffsetFavoritesControllerPrivate;
 
 struct _PhotosOffsetFavoritesController
 {
   PhotosOffsetController parent_instance;
+  PhotosOffsetFavoritesControllerPrivate *priv;
 };
 
 struct _PhotosOffsetFavoritesControllerClass
diff --git a/src/photos-offset-overview-controller.c b/src/photos-offset-overview-controller.c
index 644e927..33bf550 100644
--- a/src/photos-offset-overview-controller.c
+++ b/src/photos-offset-overview-controller.c
@@ -33,7 +33,7 @@ G_DEFINE_TYPE (PhotosOffsetOverviewController, photos_offset_overview_controller
 
 
 static PhotosQuery *
-photos_offset_overview_controller_get_query (void)
+photos_offset_overview_controller_get_query (PhotosOffsetController *offset_cntrlr)
 {
   return photos_query_builder_count_query (PHOTOS_QUERY_FLAGS_NONE);
 }
diff --git a/src/photos-tracker-collections-controller.c b/src/photos-tracker-collections-controller.c
index 67eaf74..631dbdb 100644
--- a/src/photos-tracker-collections-controller.c
+++ b/src/photos-tracker-collections-controller.c
@@ -21,11 +21,18 @@
 
 #include "config.h"
 
+#include "photos-collection-manager.h"
 #include "photos-offset-collections-controller.h"
 #include "photos-query-builder.h"
 #include "photos-tracker-collections-controller.h"
 
 
+struct _PhotosTrackerCollectionsControllerPrivate
+{
+  PhotosBaseManager *col_mngr;
+};
+
+
 G_DEFINE_TYPE (PhotosTrackerCollectionsController,
                photos_tracker_collections_controller,
                PHOTOS_TYPE_TRACKER_CONTROLLER);
@@ -39,9 +46,19 @@ photos_tracker_collections_controller_get_offset_controller (void)
 
 
 static PhotosQuery *
-photos_tracker_collections_controller_get_query (void)
+photos_tracker_collections_controller_get_query (PhotosTrackerController *trk_cntrlr)
 {
-  return photos_query_builder_global_query (PHOTOS_QUERY_FLAGS_COLLECTIONS);
+  PhotosTrackerCollectionsController *self = PHOTOS_TRACKER_COLLECTIONS_CONTROLLER (trk_cntrlr);
+  GObject *collection;
+  gint flags;
+
+  collection = photos_base_manager_get_active_object (self->priv->col_mngr);
+  if (collection != NULL)
+    flags = PHOTOS_QUERY_FLAGS_NONE;
+  else
+    flags = PHOTOS_QUERY_FLAGS_COLLECTIONS;
+
+  return photos_query_builder_global_query (flags);
 }
 
 
@@ -66,8 +83,27 @@ photos_tracker_collections_controller_constructor (GType type,
 
 
 static void
+photos_tracker_collections_controller_dispose (GObject *object)
+{
+  PhotosTrackerCollectionsController *self = PHOTOS_TRACKER_COLLECTIONS_CONTROLLER (object);
+
+  g_clear_object (&self->priv->col_mngr);
+
+  G_OBJECT_CLASS (photos_tracker_collections_controller_parent_class)->dispose (object);
+}
+
+
+static void
 photos_tracker_collections_controller_init (PhotosTrackerCollectionsController *self)
 {
+  PhotosTrackerCollectionsControllerPrivate *priv;
+
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                            PHOTOS_TYPE_TRACKER_COLLECTIONS_CONTROLLER,
+                                            PhotosTrackerCollectionsControllerPrivate);
+  priv = self->priv;
+
+  priv->col_mngr = photos_collection_manager_new ();
 }
 
 
@@ -78,8 +114,11 @@ photos_tracker_collections_controller_class_init (PhotosTrackerCollectionsContro
   PhotosTrackerControllerClass *tracker_controller_class = PHOTOS_TRACKER_CONTROLLER_CLASS (class);
 
   object_class->constructor = photos_tracker_collections_controller_constructor;
+  object_class->dispose = photos_tracker_collections_controller_dispose;
   tracker_controller_class->get_offset_controller = 
photos_tracker_collections_controller_get_offset_controller;
   tracker_controller_class->get_query = photos_tracker_collections_controller_get_query;
+
+  g_type_class_add_private (class, sizeof (PhotosTrackerCollectionsControllerPrivate));
 }
 
 
diff --git a/src/photos-tracker-collections-controller.h b/src/photos-tracker-collections-controller.h
index 820fa04..4e437a7 100644
--- a/src/photos-tracker-collections-controller.h
+++ b/src/photos-tracker-collections-controller.h
@@ -49,10 +49,12 @@ G_BEGIN_DECLS
 
 typedef struct _PhotosTrackerCollectionsController        PhotosTrackerCollectionsController;
 typedef struct _PhotosTrackerCollectionsControllerClass   PhotosTrackerCollectionsControllerClass;
+typedef struct _PhotosTrackerCollectionsControllerPrivate PhotosTrackerCollectionsControllerPrivate;
 
 struct _PhotosTrackerCollectionsController
 {
   PhotosTrackerController parent_instance;
+  PhotosTrackerCollectionsControllerPrivate *priv;
 };
 
 struct _PhotosTrackerCollectionsControllerClass
diff --git a/src/photos-tracker-controller.c b/src/photos-tracker-controller.c
index 2a026aa..a818e24 100644
--- a/src/photos-tracker-controller.c
+++ b/src/photos-tracker-controller.c
@@ -170,7 +170,7 @@ photos_tracker_controller_perform_current_query (PhotosTrackerController *self)
   if (priv->current_query != NULL)
     photos_query_free (priv->current_query);
 
-  priv->current_query = PHOTOS_TRACKER_CONTROLLER_GET_CLASS (self)->get_query ();
+  priv->current_query = PHOTOS_TRACKER_CONTROLLER_GET_CLASS (self)->get_query (self);
   g_cancellable_reset (priv->cancellable);
 
   photos_tracker_queue_select (priv->queue,
diff --git a/src/photos-tracker-controller.h b/src/photos-tracker-controller.h
index a6ac72d..639a1b3 100644
--- a/src/photos-tracker-controller.h
+++ b/src/photos-tracker-controller.h
@@ -70,7 +70,7 @@ struct _PhotosTrackerControllerClass
 
   /* virtual methods */
   PhotosOffsetController *(*get_offset_controller) (void);
-  PhotosQuery *(*get_query) (void);
+  PhotosQuery *(*get_query) (PhotosTrackerController *self);
 
   /* signals */
   void (*query_error) (PhotosTrackerController *self, const gchar *primary, const gchar *secondary);
diff --git a/src/photos-tracker-favorites-controller.c b/src/photos-tracker-favorites-controller.c
index 46c7c80..b8958b0 100644
--- a/src/photos-tracker-favorites-controller.c
+++ b/src/photos-tracker-favorites-controller.c
@@ -21,11 +21,18 @@
 
 #include "config.h"
 
+#include "photos-collection-manager.h"
 #include "photos-offset-favorites-controller.h"
 #include "photos-query-builder.h"
 #include "photos-tracker-favorites-controller.h"
 
 
+struct _PhotosTrackerFavoritesControllerPrivate
+{
+  PhotosBaseManager *col_mngr;
+};
+
+
 G_DEFINE_TYPE (PhotosTrackerFavoritesController,
                photos_tracker_favorites_controller,
                PHOTOS_TYPE_TRACKER_CONTROLLER);
@@ -39,9 +46,19 @@ photos_tracker_favorites_controller_get_offset_controller (void)
 
 
 static PhotosQuery *
-photos_tracker_favorites_controller_get_query (void)
+photos_tracker_favorites_controller_get_query (PhotosTrackerController *trk_cntrlr)
 {
-  return photos_query_builder_global_query (PHOTOS_QUERY_FLAGS_FAVORITES);
+  PhotosTrackerFavoritesController *self = PHOTOS_TRACKER_FAVORITES_CONTROLLER (trk_cntrlr);
+  GObject *collection;
+  gint flags;
+
+  collection = photos_base_manager_get_active_object (self->priv->col_mngr);
+  if (collection != NULL)
+    flags = PHOTOS_QUERY_FLAGS_NONE;
+  else
+    flags = PHOTOS_QUERY_FLAGS_FAVORITES;
+
+  return photos_query_builder_global_query (flags);
 }
 
 
@@ -66,8 +83,27 @@ photos_tracker_favorites_controller_constructor (GType type,
 
 
 static void
+photos_tracker_favorites_controller_dispose (GObject *object)
+{
+  PhotosTrackerFavoritesController *self = PHOTOS_TRACKER_FAVORITES_CONTROLLER (object);
+
+  g_clear_object (&self->priv->col_mngr);
+
+  G_OBJECT_CLASS (photos_tracker_favorites_controller_parent_class)->dispose (object);
+}
+
+
+static void
 photos_tracker_favorites_controller_init (PhotosTrackerFavoritesController *self)
 {
+  PhotosTrackerFavoritesControllerPrivate *priv;
+
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                            PHOTOS_TYPE_TRACKER_FAVORITES_CONTROLLER,
+                                            PhotosTrackerFavoritesControllerPrivate);
+  priv = self->priv;
+
+  priv->col_mngr = photos_collection_manager_new ();
 }
 
 
@@ -78,8 +114,11 @@ photos_tracker_favorites_controller_class_init (PhotosTrackerFavoritesController
   PhotosTrackerControllerClass *tracker_controller_class = PHOTOS_TRACKER_CONTROLLER_CLASS (class);
 
   object_class->constructor = photos_tracker_favorites_controller_constructor;
+  object_class->dispose = photos_tracker_favorites_controller_dispose;
   tracker_controller_class->get_offset_controller = 
photos_tracker_favorites_controller_get_offset_controller;
   tracker_controller_class->get_query = photos_tracker_favorites_controller_get_query;
+
+  g_type_class_add_private (class, sizeof (PhotosTrackerFavoritesControllerPrivate));
 }
 
 
diff --git a/src/photos-tracker-favorites-controller.h b/src/photos-tracker-favorites-controller.h
index 59fcf77..72b69f1 100644
--- a/src/photos-tracker-favorites-controller.h
+++ b/src/photos-tracker-favorites-controller.h
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012 Red Hat, Inc.
+ * Copyright © 2012, 2013 Red Hat, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,10 +49,12 @@ G_BEGIN_DECLS
 
 typedef struct _PhotosTrackerFavoritesController        PhotosTrackerFavoritesController;
 typedef struct _PhotosTrackerFavoritesControllerClass   PhotosTrackerFavoritesControllerClass;
+typedef struct _PhotosTrackerFavoritesControllerPrivate PhotosTrackerFavoritesControllerPrivate;
 
 struct _PhotosTrackerFavoritesController
 {
   PhotosTrackerController parent_instance;
+  PhotosTrackerFavoritesControllerPrivate *priv;
 };
 
 struct _PhotosTrackerFavoritesControllerClass
diff --git a/src/photos-tracker-overview-controller.c b/src/photos-tracker-overview-controller.c
index dbfb30c..e381f5b 100644
--- a/src/photos-tracker-overview-controller.c
+++ b/src/photos-tracker-overview-controller.c
@@ -41,7 +41,7 @@ photos_tracker_overview_controller_get_offset_controller (void)
 
 
 static PhotosQuery *
-photos_tracker_overview_controller_get_query (void)
+photos_tracker_overview_controller_get_query (PhotosTrackerController *trk_cntrlr)
 {
   return photos_query_builder_global_query (PHOTOS_QUERY_FLAGS_NONE);
 }
diff --git a/src/photos-view-model.c b/src/photos-view-model.c
index 7519418..0d43c14 100644
--- a/src/photos-view-model.c
+++ b/src/photos-view-model.c
@@ -25,6 +25,7 @@
 
 #include "config.h"
 
+#include "photos-collection-manager.h"
 #include "photos-enums.h"
 #include "photos-item-manager.h"
 #include "photos-view-model.h"
@@ -32,6 +33,7 @@
 
 struct _PhotosViewModelPrivate
 {
+  PhotosBaseManager *col_mngr;
   PhotosBaseManager *item_mngr;
   PhotosWindowMode mode;
   gchar *row_ref_key;
@@ -123,30 +125,32 @@ photos_view_model_info_updated (PhotosBaseItem *item, gpointer user_data)
 {
   PhotosViewModel *self = PHOTOS_VIEW_MODEL (user_data);
   PhotosViewModelPrivate *priv = self->priv;
+  GObject *collection;
   GtkTreeIter iter;
   GtkTreePath *path;
   GtkTreeRowReference *row_ref;
 
+  collection = photos_base_manager_get_active_object (priv->col_mngr);
   row_ref = (GtkTreeRowReference *) g_object_get_data (G_OBJECT (item), priv->row_ref_key);
 
   if (priv->mode == PHOTOS_WINDOW_MODE_COLLECTIONS)
     {
-      gboolean collection;
+      gboolean is_collection;
 
-      collection = photos_base_item_is_collection (item);
-      if (!collection && row_ref != NULL)
+      is_collection = photos_base_item_is_collection (item);
+      if (!is_collection && row_ref != NULL && collection == NULL)
         photos_view_model_object_removed (self, G_OBJECT (item));
-      else if (collection  && row_ref == NULL)
+      else if (is_collection  && row_ref == NULL)
         photos_view_model_add_item (self, item);
     }
   else if (priv->mode == PHOTOS_WINDOW_MODE_FAVORITES)
     {
-      gboolean favorite;
+      gboolean is_favorite;
 
-      favorite = photos_base_item_is_favorite (item);
-      if (!favorite && row_ref != NULL)
+      is_favorite = photos_base_item_is_favorite (item);
+      if (!is_favorite && row_ref != NULL && collection == NULL)
         photos_view_model_object_removed (self, G_OBJECT (item));
-      else if (favorite  && row_ref == NULL)
+      else if (is_favorite  && row_ref == NULL && collection == NULL)
         photos_view_model_add_item (self, item);
     }
 
@@ -168,10 +172,16 @@ photos_view_model_object_added (PhotosViewModel *self, GObject *object)
 {
   PhotosBaseItem *item = PHOTOS_BASE_ITEM (object);
   PhotosViewModelPrivate *priv = self->priv;
+  GObject *collection;
 
-  if ((priv->mode == PHOTOS_WINDOW_MODE_COLLECTIONS && !photos_base_item_is_collection (item))
-      || (priv->mode == PHOTOS_WINDOW_MODE_FAVORITES && !photos_base_item_is_favorite (item)))
-    goto out;
+  collection = photos_base_manager_get_active_object (priv->col_mngr);
+
+  if (collection == NULL)
+    {
+      if ((priv->mode == PHOTOS_WINDOW_MODE_COLLECTIONS && !photos_base_item_is_collection (item))
+          || (priv->mode == PHOTOS_WINDOW_MODE_FAVORITES && !photos_base_item_is_favorite (item)))
+        goto out;
+    }
 
   photos_view_model_add_item (self, item);
 
@@ -184,8 +194,10 @@ static void
 photos_view_model_dispose (GObject *object)
 {
   PhotosViewModel *self = PHOTOS_VIEW_MODEL (object);
+  PhotosViewModelPrivate *priv = self->priv;
 
-  g_clear_object (&self->priv->item_mngr);
+  g_clear_object (&priv->col_mngr);
+  g_clear_object (&priv->item_mngr);
 
   G_OBJECT_CLASS (photos_view_model_parent_class)->dispose (object);
 }
@@ -240,6 +252,8 @@ photos_view_model_init (PhotosViewModel *self)
   gtk_list_store_set_column_types (GTK_LIST_STORE (self), sizeof (columns) / sizeof (columns[0]), columns);
   gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self), PHOTOS_VIEW_MODEL_MTIME, 
GTK_SORT_DESCENDING);
 
+  priv->col_mngr = photos_collection_manager_new ();
+
   priv->item_mngr = photos_item_manager_new ();
   g_signal_connect_swapped (priv->item_mngr, "object-added", G_CALLBACK (photos_view_model_object_added), 
self);
   g_signal_connect_swapped (priv->item_mngr, "object-removed", G_CALLBACK 
(photos_view_model_object_removed), self);


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