[gnome-builder] plugins/buffer-monitor: be robust during context destruction



commit ef18f2274d2d9e46a695536a2259ab41652e6554
Author: Christian Hergert <chergert redhat com>
Date:   Mon Jul 11 22:10:40 2022 -0700

    plugins/buffer-monitor: be robust during context destruction
    
    And remove dependency on editor.

 src/plugins/buffer-monitor/buffer-monitor.plugin           |  1 -
 .../buffer-monitor/gbp-buffer-monitor-buffer-addin.c       | 14 +++++++-------
 2 files changed, 7 insertions(+), 8 deletions(-)
---
diff --git a/src/plugins/buffer-monitor/buffer-monitor.plugin 
b/src/plugins/buffer-monitor/buffer-monitor.plugin
index e03a533a4..0cabe8139 100644
--- a/src/plugins/buffer-monitor/buffer-monitor.plugin
+++ b/src/plugins/buffer-monitor/buffer-monitor.plugin
@@ -2,7 +2,6 @@
 Authors=Christian Hergert <christian hergert me>
 Builtin=true
 Copyright=Copyright © 2018 Christian Hergert
-Depends=editor;
 Description=Watches buffers for changes on disk
 Embedded=_gbp_buffer_monitor_register_types
 Hidden=true
diff --git a/src/plugins/buffer-monitor/gbp-buffer-monitor-buffer-addin.c 
b/src/plugins/buffer-monitor/gbp-buffer-monitor-buffer-addin.c
index 225f8bee5..32a7eb96e 100644
--- a/src/plugins/buffer-monitor/gbp-buffer-monitor-buffer-addin.c
+++ b/src/plugins/buffer-monitor/gbp-buffer-monitor-buffer-addin.c
@@ -36,6 +36,7 @@ struct _GbpBufferMonitorBufferAddin
 
   IdeBuffer    *buffer;
   GFileMonitor *monitor;
+  IdeProject   *project;
 
   GDateTime    *mtime;
   guint         mtime_set : 1;
@@ -246,7 +247,9 @@ gbp_buffer_monitor_buffer_addin_load (IdeBufferAddin *addin,
 
   context = ide_buffer_ref_context (buffer);
   project = ide_project_from_context (context);
-  g_signal_connect_object (project,
+
+  self->project = g_object_ref (project);
+  g_signal_connect_object (self->project,
                            "file-renamed",
                            G_CALLBACK (file_renamed_cb),
                            self,
@@ -258,21 +261,18 @@ gbp_buffer_monitor_buffer_addin_unload (IdeBufferAddin *addin,
                                         IdeBuffer      *buffer)
 {
   GbpBufferMonitorBufferAddin *self = (GbpBufferMonitorBufferAddin *)addin;
-  g_autoptr(IdeContext) context = NULL;
-  IdeProject *project;
 
   g_assert (GBP_IS_BUFFER_MONITOR_BUFFER_ADDIN (self));
   g_assert (IDE_IS_BUFFER (buffer));
 
   gbp_buffer_monitor_buffer_addin_setup_monitor (self, NULL);
 
-  context = ide_buffer_ref_context (buffer);
-  project = ide_project_from_context (context);
-  g_signal_handlers_disconnect_by_func (project,
+  g_signal_handlers_disconnect_by_func (self->project,
                                         G_CALLBACK (file_renamed_cb),
                                         self);
 
   g_clear_pointer (&self->mtime, g_date_time_unref);
+  g_clear_object (&self->project);
   self->buffer = NULL;
 }
 
@@ -343,7 +343,7 @@ buffer_addin_iface_init (IdeBufferAddinInterface *iface)
 }
 
 G_DEFINE_FINAL_TYPE_WITH_CODE (GbpBufferMonitorBufferAddin, gbp_buffer_monitor_buffer_addin, G_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUFFER_ADDIN, buffer_addin_iface_init))
+                               G_IMPLEMENT_INTERFACE (IDE_TYPE_BUFFER_ADDIN, buffer_addin_iface_init))
 
 static void
 gbp_buffer_monitor_buffer_addin_class_init (GbpBufferMonitorBufferAddinClass *klass)


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