summaryrefslogtreecommitdiff
path: root/gladeui/glade-adaptor-chooser.c
diff options
context:
space:
mode:
Diffstat (limited to 'gladeui/glade-adaptor-chooser.c')
-rw-r--r--gladeui/glade-adaptor-chooser.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gladeui/glade-adaptor-chooser.c b/gladeui/glade-adaptor-chooser.c
index 42ca56c2..2249b6f5 100644
--- a/gladeui/glade-adaptor-chooser.c
+++ b/gladeui/glade-adaptor-chooser.c
@@ -305,6 +305,15 @@ glade_adaptor_chooser_update_adaptor (GladeAdaptorChooser *chooser)
}
}
+static void
+on_project_weak_notify (gpointer data, GObject *project)
+{
+ GladeAdaptorChooser *chooser = data;
+ GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
+
+ priv->project = NULL;
+}
+
void
glade_adaptor_chooser_set_project (GladeAdaptorChooser *chooser,
GladeProject *project)
@@ -320,12 +329,15 @@ glade_adaptor_chooser_set_project (GladeAdaptorChooser *chooser,
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->project),
G_CALLBACK (glade_adaptor_chooser_update_adaptor),
chooser);
- g_clear_object (&priv->project);
+ g_object_weak_unref (G_OBJECT (priv->project), on_project_weak_notify, chooser);
+ priv->project = NULL;
}
if (project)
{
- priv->project = g_object_ref (project);
+ priv->project = project;
+ g_object_weak_ref (G_OBJECT (project), on_project_weak_notify, chooser);
+
g_signal_connect_swapped (G_OBJECT (project), "notify::add-item",
G_CALLBACK (glade_adaptor_chooser_update_adaptor),
chooser);