[gnome-builder/wip/gtk4-port] plugins/codeui: hold onto diagnostics manager reference



commit 6b2c9f0895fdbad42220ea72b84f9818d620dd08
Author: Christian Hergert <chergert redhat com>
Date:   Fri Apr 22 18:26:46 2022 -0700

    plugins/codeui: hold onto diagnostics manager reference
    
    So we don't have to look it up through the tree each time and potentially
    be unable to remove our handlers after it is unrooted.

 src/plugins/codeui/gbp-codeui-buffer-addin.c | 43 +++++++++++-----------------
 1 file changed, 16 insertions(+), 27 deletions(-)
---
diff --git a/src/plugins/codeui/gbp-codeui-buffer-addin.c b/src/plugins/codeui/gbp-codeui-buffer-addin.c
index bcd42462b..b4c453e19 100644
--- a/src/plugins/codeui/gbp-codeui-buffer-addin.c
+++ b/src/plugins/codeui/gbp-codeui-buffer-addin.c
@@ -30,32 +30,30 @@
 
 struct _GbpCodeuiBufferAddin
 {
-  GObject    parent_instance;
-  IdeBuffer *buffer;
-  GFile     *file;
+  GObject                parent_instance;
+  IdeDiagnosticsManager *diagnostics_manager;
+  IdeBuffer             *buffer;
+  GFile                 *file;
 };
 
 static void
 gbp_codeui_buffer_addin_queue_diagnose (GbpCodeuiBufferAddin *self,
                                         IdeBuffer            *buffer)
 {
-  g_autoptr(IdeContext) context = NULL;
-  IdeDiagnosticsManager *manager;
   g_autoptr(GBytes) contents = NULL;
   const gchar *lang_id;
   GFile *file;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_CODEUI_BUFFER_ADDIN (self));
+  g_assert (IDE_IS_DIAGNOSTICS_MANAGER (self->diagnostics_manager));
   g_assert (IDE_IS_BUFFER (buffer));
 
-  context = ide_buffer_ref_context (buffer);
-  manager = ide_diagnostics_manager_from_context (context);
   file = ide_buffer_get_file (buffer);
   lang_id = ide_buffer_get_language_id (buffer);
   contents = ide_buffer_dup_content (buffer);
 
-  _ide_diagnostics_manager_file_changed (manager, file, contents, lang_id);
+  _ide_diagnostics_manager_file_changed (self->diagnostics_manager, file, contents, lang_id);
 }
 
 static void
@@ -77,8 +75,6 @@ gbp_codeui_buffer_addin_file_loaded (IdeBufferAddin *addin,
                                      GFile          *file)
 {
   GbpCodeuiBufferAddin *self = (GbpCodeuiBufferAddin *)addin;
-  g_autoptr(IdeContext) context = NULL;
-  IdeDiagnosticsManager *manager;
   const gchar *lang_id;
 
   g_assert (IDE_IS_MAIN_THREAD ());
@@ -88,11 +84,9 @@ gbp_codeui_buffer_addin_file_loaded (IdeBufferAddin *addin,
 
   g_set_object (&self->file, file);
 
-  context = ide_buffer_ref_context (buffer);
-  manager = ide_diagnostics_manager_from_context (context);
   lang_id = ide_buffer_get_language_id (buffer);
 
-  _ide_diagnostics_manager_file_opened (manager, file, lang_id);
+  _ide_diagnostics_manager_file_opened (self->diagnostics_manager, file, lang_id);
 }
 
 static void
@@ -134,22 +128,19 @@ gbp_codeui_buffer_addin_language_set (IdeBufferAddin *addin,
                                       IdeBuffer      *buffer,
                                       const gchar    *language_id)
 {
-  g_autoptr(IdeContext) context = NULL;
-  IdeDiagnosticsManager *diagnostics_manager;
+  GbpCodeuiBufferAddin *self = (GbpCodeuiBufferAddin *)addin;
   GFile *file;
 
-  g_assert (GBP_IS_CODEUI_BUFFER_ADDIN (addin));
+  g_assert (GBP_IS_CODEUI_BUFFER_ADDIN (self));
+  g_assert (IDE_IS_DIAGNOSTICS_MANAGER (self->diagnostics_manager));
   g_assert (IDE_IS_BUFFER (buffer));
 
-  context = ide_buffer_ref_context (buffer);
   file = ide_buffer_get_file (buffer);
 
-  g_assert (IDE_IS_CONTEXT (context));
   g_assert (file != NULL);
   g_assert (G_IS_FILE (file));
 
-  diagnostics_manager = ide_diagnostics_manager_from_context (context);
-  _ide_diagnostics_manager_language_changed (diagnostics_manager, file, language_id);
+  _ide_diagnostics_manager_language_changed (self->diagnostics_manager, file, language_id);
 }
 
 static void
@@ -168,8 +159,9 @@ gbp_codeui_buffer_addin_load (IdeBufferAddin *addin,
   manager = ide_diagnostics_manager_from_context (context);
 
   self->buffer = g_object_ref (buffer);
+  self->diagnostics_manager = g_object_ref (manager);
 
-  g_signal_connect_object (manager,
+  g_signal_connect_object (self->diagnostics_manager,
                            "changed",
                            G_CALLBACK (gbp_codeui_buffer_addin_changed_cb),
                            self,
@@ -181,25 +173,22 @@ gbp_codeui_buffer_addin_unload (IdeBufferAddin *addin,
                                 IdeBuffer      *buffer)
 {
   GbpCodeuiBufferAddin *self = (GbpCodeuiBufferAddin *)addin;
-  g_autoptr(IdeContext) context = NULL;
-  IdeDiagnosticsManager *manager;
   GFile *file;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_CODEUI_BUFFER_ADDIN (self));
   g_assert (IDE_IS_BUFFER (buffer));
 
-  context = ide_buffer_ref_context (buffer);
-  manager = ide_diagnostics_manager_from_context (context);
   file = ide_buffer_get_file (buffer);
 
-  g_signal_handlers_disconnect_by_func (manager,
+  g_signal_handlers_disconnect_by_func (self->diagnostics_manager,
                                         G_CALLBACK (gbp_codeui_buffer_addin_changed_cb),
                                         self);
 
-  _ide_diagnostics_manager_file_closed (manager, file);
+  _ide_diagnostics_manager_file_closed (self->diagnostics_manager, file);
 
   g_clear_object (&self->file);
+  g_clear_object (&self->diagnostics_manager);
 }
 
 static void


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