[gnome-builder] buffer: add "reloading" parameter to IdeBufferManager:load-buffer



commit 218e48c7e4bd4116e57640c4556fcc22b4a7f649
Author: Christian Hergert <christian hergert me>
Date:   Thu Feb 18 14:40:25 2016 -0800

    buffer: add "reloading" parameter to IdeBufferManager:load-buffer
    
    This can be used to disambiguate between a new buffer being created and
    and an existing buffer being reloaded from changes to the underlying
    storage.

 libide/editor/ide-editor-perspective.c |    8 ++++++++
 libide/ide-buffer-manager.c            |   13 +++++++++----
 2 files changed, 17 insertions(+), 4 deletions(-)
---
diff --git a/libide/editor/ide-editor-perspective.c b/libide/editor/ide-editor-perspective.c
index 4aaa499..b7937cc 100644
--- a/libide/editor/ide-editor-perspective.c
+++ b/libide/editor/ide-editor-perspective.c
@@ -157,6 +157,7 @@ ide_editor_perspective_context_set (GtkWidget  *widget,
 static void
 ide_editor_perspective_load_buffer (IdeEditorPerspective *self,
                                     IdeBuffer            *buffer,
+                                    gboolean              reloading,
                                     IdeBufferManager     *buffer_manager)
 {
   IdeEditorView *view;
@@ -167,6 +168,13 @@ ide_editor_perspective_load_buffer (IdeEditorPerspective *self,
   g_assert (IDE_IS_BUFFER (buffer));
   g_assert (IDE_IS_BUFFER_MANAGER (buffer_manager));
 
+  /*
+   * We only want to create a new view when the buffer is originally
+   * created, not when it's reloaded.
+   */
+  if (reloading)
+    return;
+
   IDE_TRACE_MSG ("Loading %s", ide_buffer_get_title (buffer));
 
   view = g_object_new (IDE_TYPE_EDITOR_VIEW,
diff --git a/libide/ide-buffer-manager.c b/libide/ide-buffer-manager.c
index 8abad96..1edd115 100644
--- a/libide/ide-buffer-manager.c
+++ b/libide/ide-buffer-manager.c
@@ -630,7 +630,7 @@ ide_buffer_manager__load_file_query_info_cb (GObject      *object,
       _ide_buffer_set_mtime (state->buffer, &tv);
     }
 
-  g_signal_emit (self, signals [LOAD_BUFFER], 0, state->buffer);
+  g_signal_emit (self, signals [LOAD_BUFFER], 0, state->buffer, !state->is_new);
 
   gtk_source_file_loader_load_async (state->loader,
                                      G_PRIORITY_DEFAULT,
@@ -1379,9 +1379,13 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
    * IdeBufferManager::load-buffer:
    * @self: An #IdeBufferManager.
    * @buffer: an #IdeBuffer.
+   * @reloading: if the buffer is being reloaded
    *
    * This signal is emitted when a request has been made to load a buffer from storage. You might
    * connect to this signal to be notified when loading of a buffer has begun.
+   *
+   * If @reloading is %TRUE, then the buffer is being force-reloaded due to changes
+   * from the host file-system.
    */
   signals [LOAD_BUFFER] = g_signal_new ("load-buffer",
                                          G_TYPE_FROM_CLASS (klass),
@@ -1389,8 +1393,9 @@ ide_buffer_manager_class_init (IdeBufferManagerClass *klass)
                                          0,
                                          NULL, NULL, NULL,
                                          G_TYPE_NONE,
-                                         1,
-                                         IDE_TYPE_BUFFER);
+                                         2,
+                                         IDE_TYPE_BUFFER,
+                                         G_TYPE_BOOLEAN);
 
   /**
    * IdeBufferManager::buffer-loaded:
@@ -1676,7 +1681,7 @@ ide_buffer_manager_create_temporary_buffer (IdeBufferManager *self)
                        NULL);
 
   g_signal_emit (self, signals [CREATE_BUFFER], 0, file, &buffer);
-  g_signal_emit (self, signals [LOAD_BUFFER], 0, buffer);
+  g_signal_emit (self, signals [LOAD_BUFFER], 0, buffer, FALSE);
   ide_buffer_manager_add_buffer (self, buffer);
   g_signal_emit (self, signals [BUFFER_LOADED], 0, buffer);
 


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