diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2020-07-21 11:05:56 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2020-07-26 18:00:20 -0300 |
commit | 8918dfb79b957cbc97b435a3d28e8ac9f33e759c (patch) | |
tree | 6fc0e9d93319127497646617cdc267db4fc9b377 /gladeui | |
parent | 1e85f469b9b05ebf3c5485977f047c836486e1e5 (diff) | |
download | glade-8918dfb79b957cbc97b435a3d28e8ac9f33e759c.tar.gz |
GladeAdaptorChooser[Widget]: use GladeProject weak reference.
Use a weak reference for project to prevent holding a reference
after the project is closed.
Diffstat (limited to 'gladeui')
-rw-r--r-- | gladeui/glade-adaptor-chooser-widget.c | 21 | ||||
-rw-r--r-- | gladeui/glade-adaptor-chooser.c | 16 |
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); |