summaryrefslogtreecommitdiff
path: root/gladeui
diff options
context:
space:
mode:
Diffstat (limited to 'gladeui')
-rw-r--r--gladeui/glade-adaptor-chooser-widget.c21
-rw-r--r--gladeui/glade-adaptor-chooser.c16
2 files changed, 33 insertions, 4 deletions
diff --git a/gladeui/glade-adaptor-chooser-widget.c b/gladeui/glade-adaptor-chooser-widget.c
index 40746af3..cdfa5942 100644
--- a/gladeui/glade-adaptor-chooser-widget.c
+++ b/gladeui/glade-adaptor-chooser-widget.c
@@ -574,6 +574,15 @@ _glade_adaptor_chooser_widget_new (_GladeAdaptorChooserWidgetFlags flags, GladeP
NULL));
}
+static void
+on_project_weak_notify (gpointer data, GObject *project)
+{
+ _GladeAdaptorChooserWidget *chooser = data;
+ _GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (chooser);
+
+ priv->project = NULL;
+}
+
void
_glade_adaptor_chooser_widget_set_project (_GladeAdaptorChooserWidget *chooser,
GladeProject *project)
@@ -583,10 +592,18 @@ _glade_adaptor_chooser_widget_set_project (_GladeAdaptorChooserWidget *chooser,
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER_WIDGET (chooser));
priv = GET_PRIVATE (chooser);
- g_clear_object (&priv->project);
+ if (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);
+ }
+
gtk_tree_model_filter_refilter (priv->treemodelfilter);
}
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);