[gnome-builder] buffer: ensure highlighter/diagnostcs/settings are reloaded



commit aea75ecb049faadd29ba2a2907d6fce5fac38050
Author: Christian Hergert <christian hergert me>
Date:   Sun May 17 17:16:52 2015 -0700

    buffer: ensure highlighter/diagnostcs/settings are reloaded
    
    When changing the underlying language, ensure that we reload various
    settings. This is not how we want to do things long term, as we should
    make this more generic with libpeas. But it gets us something we can
    release for 3.16.3.

 libide/ide-buffer.c |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-buffer.c b/libide/ide-buffer.c
index 3b07c44..ddd7091 100644
--- a/libide/ide-buffer.c
+++ b/libide/ide-buffer.c
@@ -21,6 +21,7 @@
 #include <glib/gi18n.h>
 
 #include "egg-counter.h"
+#include "egg-signal-group.h"
 
 #include "ide-battery-monitor.h"
 #include "ide-buffer.h"
@@ -66,6 +67,8 @@ typedef struct
   IdeSymbolResolver      *symbol_resolver;
   gchar                  *title;
 
+  EggSignalGroup         *file_signals;
+
   gulong                  change_monitor_changed_handler;
 
   guint                   diagnose_timeout;
@@ -790,6 +793,27 @@ ide_buffer_mark_set (GtkTextBuffer     *buffer,
 }
 
 static void
+ide_buffer__file_notify_language (IdeBuffer  *self,
+                                  GParamSpec *pspec,
+                                  IdeFile    *file)
+{
+  g_assert (IDE_IS_BUFFER (self));
+  g_assert (IDE_IS_FILE (file));
+
+  /*
+   * FIXME: Workaround for 3.16.3
+   *        This should be refactored as part of the move to libpeas.
+   */
+
+  ide_file_load_settings_async (file,
+                                NULL,
+                                ide_buffer__file_load_settings_cb,
+                                g_object_ref (self));
+  ide_buffer_reload_highlighter (self);
+  ide_buffer_reload_change_monitor (self);
+}
+
+static void
 ide_buffer_constructed (GObject *object)
 {
   IdeBuffer *self = (IdeBuffer *)object;
@@ -846,6 +870,8 @@ ide_buffer_dispose (GObject *object)
 
   IDE_ENTRY;
 
+  g_clear_object (&priv->file_signals);
+
   if (priv->highlight_engine != NULL)
     g_object_run_dispose (G_OBJECT (priv->highlight_engine));
 
@@ -1130,6 +1156,13 @@ ide_buffer_init (IdeBuffer *self)
 
   IDE_ENTRY;
 
+  priv->file_signals = egg_signal_group_new (IDE_TYPE_FILE);
+  egg_signal_group_connect_object (priv->file_signals,
+                                   "notify::language",
+                                   G_CALLBACK (ide_buffer__file_notify_language),
+                                   self,
+                                   G_CONNECT_SWAPPED);
+
   priv->diagnostics_line_cache = g_hash_table_new (g_direct_hash, g_direct_equal);
 
   EGG_COUNTER_INC (instances);
@@ -1198,6 +1231,7 @@ ide_buffer_set_file (IdeBuffer *self,
 
   if (g_set_object (&priv->file, file))
     {
+      egg_signal_group_set_target (priv->file_signals, file);
       ide_file_load_settings_async (priv->file,
                                     NULL,
                                     ide_buffer__file_load_settings_cb,


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