[gnome-photos/wip/rishi/misc-fixes: 10/18] tracker-favorites-controller: Break a reference cycle
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/misc-fixes: 10/18] tracker-favorites-controller: Break a reference cycle
- Date: Mon, 14 Dec 2015 19:17:59 +0000 (UTC)
commit d9d8b31e3e48b5487b9883693bae4c86ef6b69ec
Author: Debarshi Ray <debarshir gnome org>
Date: Mon Dec 14 19:07:10 2015 +0100
tracker-favorites-controller: Break a reference cycle
src/photos-tracker-favorites-controller.c | 37 ++++++++++++++++++++++-------
1 files changed, 28 insertions(+), 9 deletions(-)
---
diff --git a/src/photos-tracker-favorites-controller.c b/src/photos-tracker-favorites-controller.c
index 9a5c6fd..43d8f78 100644
--- a/src/photos-tracker-favorites-controller.c
+++ b/src/photos-tracker-favorites-controller.c
@@ -79,14 +79,16 @@ photos_tracker_favorites_controller_get_query (PhotosTrackerController *trk_cntr
GApplication *app;
PhotosBaseItem *collection;
PhotosSearchContextState *state;
- gint flags;
+ gint flags = PHOTOS_QUERY_FLAGS_FAVORITES;
+
+ if (priv->item_mngr == NULL)
+ goto end;
collection = photos_item_manager_get_active_collection (PHOTOS_ITEM_MANAGER (priv->item_mngr));
if (collection != NULL)
flags = PHOTOS_QUERY_FLAGS_NONE;
- else
- flags = PHOTOS_QUERY_FLAGS_FAVORITES;
+ end:
app = g_application_get_default ();
state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
@@ -118,17 +120,30 @@ static void
photos_tracker_favorites_controller_dispose (GObject *object)
{
PhotosTrackerFavoritesController *self = PHOTOS_TRACKER_FAVORITES_CONTROLLER (object);
- PhotosTrackerFavoritesControllerPrivate *priv = self->priv;
- g_clear_object (&priv->item_mngr);
- g_clear_object (&priv->mode_cntrlr);
- g_clear_object (&priv->offset_cntrlr);
+ g_clear_object (&self->priv->offset_cntrlr);
G_OBJECT_CLASS (photos_tracker_favorites_controller_parent_class)->dispose (object);
}
static void
+photos_tracker_favorites_controller_finalize (GObject *object)
+{
+ PhotosTrackerFavoritesController *self = PHOTOS_TRACKER_FAVORITES_CONTROLLER (object);
+ PhotosTrackerFavoritesControllerPrivate *priv = self->priv;
+
+ if (priv->item_mngr != NULL)
+ g_object_remove_weak_pointer (G_OBJECT (priv->item_mngr), (gpointer *) &priv->item_mngr);
+
+ if (priv->mode_cntrlr != NULL)
+ g_object_remove_weak_pointer (G_OBJECT (priv->mode_cntrlr), (gpointer *) &priv->mode_cntrlr);
+
+ G_OBJECT_CLASS (photos_tracker_favorites_controller_parent_class)->finalize (object);
+}
+
+
+static void
photos_tracker_favorites_controller_init (PhotosTrackerFavoritesController *self)
{
PhotosTrackerFavoritesControllerPrivate *priv;
@@ -141,13 +156,16 @@ photos_tracker_favorites_controller_init (PhotosTrackerFavoritesController *self
app = g_application_get_default ();
state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
- priv->item_mngr = g_object_ref (state->item_mngr);
+ priv->item_mngr = state->item_mngr;
+ g_object_add_weak_pointer (G_OBJECT (priv->item_mngr), (gpointer *) &priv->item_mngr);
g_signal_connect_swapped (priv->item_mngr,
"active-collection-changed",
G_CALLBACK (photos_tracker_favorites_controller_col_active_changed),
self);
- priv->mode_cntrlr = g_object_ref (state->mode_cntrlr);
+ priv->mode_cntrlr = state->mode_cntrlr;
+ g_object_add_weak_pointer (G_OBJECT (priv->mode_cntrlr), (gpointer *) &priv->mode_cntrlr);
+
priv->offset_cntrlr = photos_offset_favorites_controller_dup_singleton ();
}
@@ -160,6 +178,7 @@ photos_tracker_favorites_controller_class_init (PhotosTrackerFavoritesController
object_class->constructor = photos_tracker_favorites_controller_constructor;
object_class->dispose = photos_tracker_favorites_controller_dispose;
+ object_class->finalize = photos_tracker_favorites_controller_finalize;
tracker_controller_class->get_offset_controller =
photos_tracker_favorites_controller_get_offset_controller;
tracker_controller_class->get_query = photos_tracker_favorites_controller_get_query;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]