[evolution] Preferences window never freed
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Preferences window never freed
- Date: Fri, 13 Nov 2015 16:58:17 +0000 (UTC)
commit 8bcf52730339a1612e84de9f1ebb56fa7d483ae0
Author: Milan Crha <mcrha redhat com>
Date: Fri Nov 13 17:54:40 2015 +0100
Preferences window never freed
The shell creates it on start and unrefs it on its dispose, but
the window is not freed, it's still left in memory. The other parts
are need too, otherwise runtime warnings are shown during the free
of the preferences window.
e-util/e-preferences-window.c | 3 +++
shell/e-shell.c | 8 +++++---
smime/gui/certificate-manager.c | 10 ++++++----
3 files changed, 14 insertions(+), 7 deletions(-)
---
diff --git a/e-util/e-preferences-window.c b/e-util/e-preferences-window.c
index d15b208..680140d 100644
--- a/e-util/e-preferences-window.c
+++ b/e-util/e-preferences-window.c
@@ -208,6 +208,9 @@ preferences_window_dispose (GObject *object)
priv = E_PREFERENCES_WINDOW_GET_PRIVATE (object);
if (priv->icon_view != NULL) {
+ g_signal_handlers_disconnect_by_func (priv->icon_view,
+ G_CALLBACK (preferences_window_selection_changed_cb), object);
+
g_object_unref (priv->icon_view);
priv->icon_view = NULL;
}
diff --git a/shell/e-shell.c b/shell/e-shell.c
index 01ad218..05336e1 100644
--- a/shell/e-shell.c
+++ b/shell/e-shell.c
@@ -1416,7 +1416,11 @@ shell_dispose (GObject *object)
g_clear_object (&priv->registry);
g_clear_object (&priv->credentials_prompter);
g_clear_object (&priv->client_cache);
- g_clear_object (&priv->preferences_window);
+
+ if (priv->preferences_window) {
+ gtk_widget_destroy (priv->preferences_window);
+ priv->preferences_window = NULL;
+ }
if (priv->preparing_for_line_change != NULL) {
g_object_remove_weak_pointer (
@@ -1937,8 +1941,6 @@ e_shell_init (EShell *shell)
shell->priv->backends_by_scheme = backends_by_scheme;
shell->priv->safe_mode = e_file_lock_exists ();
- g_object_ref_sink (shell->priv->preferences_window);
-
/* Add our icon directory to the theme's search path
* here instead of in main() so Anjal picks it up. */
icon_theme = gtk_icon_theme_get_default ();
diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c
index cab4f06..793c8c4 100644
--- a/smime/gui/certificate-manager.c
+++ b/smime/gui/certificate-manager.c
@@ -1831,13 +1831,15 @@ free_cert (GtkTreeModel *model,
gpointer user_data)
{
CertPage *cp = user_data;
- ECert *cert;
+ ECert *cert = NULL;
gtk_tree_model_get (model, iter, cp->columns_count - 1, &cert, -1);
- /* Double unref: one for gtk_tree_model_get() and one for e_cert_new() */
- g_object_unref (cert);
- g_object_unref (cert);
+ if (cert) {
+ /* Double unref: one for gtk_tree_model_get() and one for e_cert_new() */
+ g_object_unref (cert);
+ g_object_unref (cert);
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]