[gnome-photos] embed: Simplify signal handlers tracking
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] embed: Simplify signal handlers tracking
- Date: Thu, 27 Jun 2013 13:35:56 +0000 (UTC)
commit ec763e8f6b364adecb2ba228325b484bbc9e1835
Author: Emanuele Aina <emanuele aina collabora com>
Date: Tue Jun 25 14:03:35 2013 +0200
embed: Simplify signal handlers tracking
Use g_signal_connect_object() to make sure that signals are disconnected
when the toolbar is destroyed and use g_signal_handlers_disconnect_by_func()
otherwise.
This allows us to get rid of all the signal id member fields.
https://bugzilla.gnome.org/show_bug.cgi?id=703054
src/photos-embed.c | 47 +++++++++++++++++++----------------------------
1 files changed, 19 insertions(+), 28 deletions(-)
---
diff --git a/src/photos-embed.c b/src/photos-embed.c
index 14df4ec..e93934b 100644
--- a/src/photos-embed.c
+++ b/src/photos-embed.c
@@ -68,14 +68,15 @@ struct _PhotosEmbedPrivate
PhotosTrackerChangeMonitor *monitor;
PhotosTrackerController *trk_ovrvw_cntrlr;
guint load_show_id;
- gulong no_results_change_id;
- gulong notify_visible_child_id;
};
G_DEFINE_TYPE (PhotosEmbed, photos_embed, GTK_TYPE_BOX);
+static void photos_embed_changes_pending (PhotosEmbed *self, GHashTable *changes);
+
+
static void
photos_embed_clear_load_timer (PhotosEmbed *self)
{
@@ -195,12 +196,7 @@ photos_embed_hide_no_results_page (PhotosEmbed *self)
{
PhotosEmbedPrivate *priv = self->priv;
- if (priv->no_results_change_id != 0)
- {
- g_signal_handler_disconnect (priv->monitor, priv->no_results_change_id);
- priv->no_results_change_id = 0;
- }
-
+ g_signal_handlers_disconnect_by_func (priv->monitor, photos_embed_changes_pending, self);
photos_embed_restore_last_page (self);
}
@@ -224,10 +220,11 @@ photos_embed_count_changed (PhotosEmbed *self, gint count)
if (count == 0)
{
- priv->no_results_change_id = g_signal_connect_swapped (priv->monitor,
- "changes-pending",
- G_CALLBACK (photos_embed_changes_pending),
- self);
+ g_signal_connect_object (priv->monitor,
+ "changes-pending",
+ G_CALLBACK (photos_embed_changes_pending),
+ self,
+ G_CONNECT_SWAPPED);
gd_stack_set_visible_child_name (GD_STACK (priv->stack), "no-results");
}
else
@@ -387,18 +384,6 @@ photos_embed_dispose (GObject *object)
PhotosEmbed *self = PHOTOS_EMBED (object);
PhotosEmbedPrivate *priv = self->priv;
- if (priv->no_results_change_id != 0)
- {
- g_signal_handler_disconnect (priv->monitor, priv->no_results_change_id);
- priv->no_results_change_id = 0;
- }
-
- if (priv->notify_visible_child_id != 0)
- {
- g_signal_handler_disconnect (priv->stack, priv->notify_visible_child_id);
- priv->notify_visible_child_id = 0;
- }
-
g_clear_object (&priv->ntfctn_mngr);
g_clear_object (&priv->loader_cancellable);
g_clear_object (&priv->indexing_ntfctn);
@@ -408,6 +393,13 @@ photos_embed_dispose (GObject *object)
g_clear_object (&priv->monitor);
g_clear_object (&priv->trk_ovrvw_cntrlr);
+ /* GdStack triggers notify::visible-child during dispose and this means that
+ * we have to explicitly disconnect the signal handler before calling up to
+ * the parent implementation, or photos_embed_notify_visible_child() will
+ * get called while we're in a inconsistent state
+ */
+ g_signal_handlers_disconnect_by_func (priv->stack, photos_embed_notify_visible_child, self);
+
G_OBJECT_CLASS (photos_embed_parent_class)->dispose (object);
}
@@ -470,10 +462,9 @@ photos_embed_init (PhotosEmbed *self)
priv->selection_toolbar = photos_selection_toolbar_new ();
gtk_overlay_add_overlay (GTK_OVERLAY (priv->stack_overlay), priv->selection_toolbar);
- priv->notify_visible_child_id = g_signal_connect_swapped (priv->stack,
- "notify::visible-child",
- G_CALLBACK (photos_embed_notify_visible_child),
- self);
+ g_signal_connect_object (priv->stack, "notify::visible-child",
+ G_CALLBACK (photos_embed_notify_visible_child),
+ self, G_CONNECT_SWAPPED);
priv->mode_cntrlr = photos_mode_controller_new ();
g_signal_connect (priv->mode_cntrlr,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]