[gnome-builder/editor-layout] use weak reference in gutter



commit f65b072dc8ca54185f1bcc54bcefd61066eebc52
Author: Christian Hergert <christian hergert me>
Date:   Sat Nov 29 04:28:39 2014 -0800

    use weak reference in gutter

 .../gb-source-code-assistant-renderer.c            |   25 ++++++++++++++++---
 1 files changed, 21 insertions(+), 4 deletions(-)
---
diff --git a/src/code-assistant/gb-source-code-assistant-renderer.c 
b/src/code-assistant/gb-source-code-assistant-renderer.c
index fe41258..5f74028 100644
--- a/src/code-assistant/gb-source-code-assistant-renderer.c
+++ b/src/code-assistant/gb-source-code-assistant-renderer.c
@@ -16,8 +16,11 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#define G_LOG_DOMAIN "code-assist-gutter"
+
 #include <glib/gi18n.h>
 
+#include "gb-log.h"
 #include "gb-source-code-assistant.h"
 #include "gb-source-code-assistant-renderer.h"
 #include "gca-structs.h"
@@ -168,7 +171,7 @@ gb_source_code_assistant_renderer_disconnect (GbSourceCodeAssistantRenderer *ren
 
   g_signal_handler_disconnect (renderer->priv->code_assistant,
                                renderer->priv->changed_handler);
-  renderer->priv->code_assistant = 0;
+  renderer->priv->changed_handler = 0;
 }
 
 void
@@ -187,12 +190,16 @@ gb_source_code_assistant_renderer_set_code_assistant (GbSourceCodeAssistantRende
       if (priv->code_assistant)
         {
           gb_source_code_assistant_renderer_disconnect (renderer);
-          g_clear_object (&priv->code_assistant);
+          g_object_remove_weak_pointer (G_OBJECT (priv->code_assistant),
+                                        (gpointer *)&priv->code_assistant);
+          priv->code_assistant = NULL;
         }
 
       if (code_assistant)
         {
-          priv->code_assistant = g_object_ref (code_assistant);
+          priv->code_assistant = code_assistant;
+          g_object_add_weak_pointer (G_OBJECT (priv->code_assistant),
+                                     (gpointer *)&priv->code_assistant);
           gb_source_code_assistant_renderer_connect (renderer);
         }
 
@@ -254,12 +261,22 @@ gb_source_code_assistant_renderer_finalize (GObject *object)
 {
   GbSourceCodeAssistantRendererPrivate *priv;
 
+  ENTRY;
+
   priv = GB_SOURCE_CODE_ASSISTANT_RENDERER (object)->priv;
 
-  g_clear_object (&priv->code_assistant);
+  if (priv->code_assistant)
+    {
+      g_object_remove_weak_pointer (G_OBJECT (priv->code_assistant),
+                                    (gpointer *)&priv->code_assistant);
+      priv->code_assistant = NULL;
+    }
+
   g_clear_pointer (&priv->line_to_severity_hash, g_hash_table_unref);
 
   G_OBJECT_CLASS (gb_source_code_assistant_renderer_parent_class)->finalize (object);
+
+  EXIT;
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]