[gspell/wip/inline-checker] inline-checker: do not have reference cycles
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gspell/wip/inline-checker] inline-checker: do not have reference cycles
- Date: Wed, 6 Jan 2016 13:30:46 +0000 (UTC)
commit 69fb2cd7ff757cae2e40980dbc11455d06727772
Author: Sébastien Wilmet <swilmet gnome org>
Date: Wed Jan 6 14:12:24 2016 +0100
inline-checker: do not have reference cycles
Although GtkTextView is a widget, gtk_widget_destroy() is sometimes not
called in applications because e.g. gtk_notebook_remove_page() is called
which does a simple g_object_unref(). Even if it is a best-practice to
call gtk_widget_destroy() when a widget is no longer needed, it is not
guaranteed that it is the case. So it's better to avoid ref cycles in
the first place, when easily feasible, which is the case here.
Not having ref cycles was actually a reason to not expose
GspellInlineCheckerText. Otherwise weak references would have been
needed, which complicates a little the code since it needs to handle the
NULL case.
gspell/gspell-inline-checker-text-buffer.c | 8 +++-----
gspell/gspell-inline-checker-text.c | 4 ++--
2 files changed, 5 insertions(+), 7 deletions(-)
---
diff --git a/gspell/gspell-inline-checker-text-buffer.c b/gspell/gspell-inline-checker-text-buffer.c
index b4e08c2..77c8a72 100644
--- a/gspell/gspell-inline-checker-text-buffer.c
+++ b/gspell/gspell-inline-checker-text-buffer.c
@@ -2,7 +2,7 @@
* This file is part of gspell, a spell-checking library.
*
* Copyright 2002 - Paolo Maggi
- * Copyright 2015 - Sébastien Wilmet
+ * Copyright 2015, 2016 - Sébastien Wilmet
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -324,7 +324,7 @@ check_visible_region (GspellInlineCheckerTextBuffer *spell)
for (l = spell->views; l != NULL; l = l->next)
{
- GtkTextView *view = l->data;
+ GtkTextView *view = GTK_TEXT_VIEW (l->data);
check_visible_region_in_view (spell, view);
}
@@ -1077,7 +1077,7 @@ _gspell_inline_checker_text_buffer_dispose (GObject *object)
g_clear_object (&spell->highlight_tag);
g_clear_object (&spell->no_spell_check_tag);
- g_slist_free_full (spell->views, g_object_unref);
+ g_slist_free (spell->views);
spell->views = NULL;
spell->mark_click = NULL;
@@ -1182,7 +1182,6 @@ _gspell_inline_checker_text_buffer_attach_view (GspellInlineCheckerTextBuffer *s
0);
spell->views = g_slist_prepend (spell->views, view);
- g_object_ref (view);
check_visible_region_in_view (spell, view);
}
@@ -1205,7 +1204,6 @@ _gspell_inline_checker_text_buffer_detach_view (GspellInlineCheckerTextBuffer *s
g_signal_handlers_disconnect_by_data (view, spell);
spell->views = g_slist_remove (spell->views, view);
- g_object_unref (view);
}
/* ex:set ts=8 noet: */
diff --git a/gspell/gspell-inline-checker-text.c b/gspell/gspell-inline-checker-text.c
index e461cf6..ce8ed11 100644
--- a/gspell/gspell-inline-checker-text.c
+++ b/gspell/gspell-inline-checker-text.c
@@ -85,7 +85,7 @@ set_view (GspellInlineCheckerText *self,
g_assert (priv->view == NULL);
g_assert (priv->inline_checker == NULL);
- priv->view = g_object_ref (view);
+ priv->view = view;
g_signal_connect_object (priv->view,
"notify::buffer",
@@ -151,7 +151,7 @@ _gspell_inline_checker_text_dispose (GObject *object)
priv->view);
}
- g_clear_object (&priv->view);
+ priv->view = NULL;
g_clear_object (&priv->inline_checker);
G_OBJECT_CLASS (_gspell_inline_checker_text_parent_class)->dispose (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]