[gnome-builder] libide: create shared GtkSourceCompletionWords for all buffers



commit 7b5cdd53265e4a3fbe92e28e46e5225dafcf8670
Author: Christian Hergert <christian hergert me>
Date:   Tue Mar 10 15:19:21 2015 -0700

    libide: create shared GtkSourceCompletionWords for all buffers
    
    This allows IdeSourceView instances to attach word completion using all
    buffers loaded in the IdeBufferManager.

 libide/ide-buffer-manager.c |   25 +++++++++++++++++++++++++
 libide/ide-buffer-manager.h |    2 ++
 2 files changed, 27 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-buffer-manager.c b/libide/ide-buffer-manager.c
index 69fed9a..4aedd1c 100644
--- a/libide/ide-buffer-manager.c
+++ b/libide/ide-buffer-manager.c
@@ -39,6 +39,8 @@ struct _IdeBufferManager
 
   IdeBuffer                *focus_buffer;
 
+  GtkSourceCompletionWords *word_completion;
+
   guint                     auto_save_timeout;
   guint                     auto_save : 1;
 };
@@ -314,6 +316,8 @@ ide_buffer_manager_add_buffer (IdeBufferManager *self,
   if (self->auto_save)
     register_auto_save (self, buffer);
 
+  gtk_source_completion_words_register (self->word_completion, GTK_TEXT_BUFFER (buffer));
+
   g_signal_connect_object (buffer,
                            "changed",
                            G_CALLBACK (ide_buffer_manager_buffer_changed),
@@ -330,6 +334,7 @@ ide_buffer_manager_remove_buffer (IdeBufferManager *self,
 
   if (g_ptr_array_remove_fast (self->buffers, buffer))
     {
+      gtk_source_completion_words_unregister (self->word_completion, GTK_TEXT_BUFFER (buffer));
       unregister_auto_save (self, buffer);
       g_signal_handlers_disconnect_by_func (buffer,
                                             G_CALLBACK (ide_buffer_manager_buffer_changed),
@@ -747,6 +752,8 @@ ide_buffer_manager_dispose (GObject *object)
       ide_buffer_manager_remove_buffer (self, buffer);
     }
 
+  g_clear_object (&self->word_completion);
+
   G_OBJECT_CLASS (ide_buffer_manager_parent_class)->dispose (object);
 }
 
@@ -960,6 +967,7 @@ ide_buffer_manager_init (IdeBufferManager *self)
   self->auto_save_timeout = AUTO_SAVE_TIMEOUT_DEFAULT;
   self->buffers = g_ptr_array_new ();
   self->timeouts = g_hash_table_new (g_direct_hash, g_direct_equal);
+  self->word_completion = gtk_source_completion_words_new (_("Words"), NULL);
 }
 
 static void
@@ -1037,3 +1045,20 @@ ide_buffer_manager_get_buffers (IdeBufferManager *self)
 
   return ret;
 }
+
+/**
+ * ide_buffer_manager_get_word_completion:
+ * @self: A #IdeBufferManager.
+ *
+ * Gets the #GtkSourceCompletionWords completion provider that will complete
+ * words using the loaded documents.
+ *
+ * Returns: (transfer none): A #GtkSourceCompletionWords
+ */
+GtkSourceCompletionWords *
+ide_buffer_manager_get_word_completion (IdeBufferManager *self)
+{
+  g_return_val_if_fail (IDE_IS_BUFFER_MANAGER (self), NULL);
+
+  return self->word_completion;
+}
diff --git a/libide/ide-buffer-manager.h b/libide/ide-buffer-manager.h
index de3eb7e..5f944c4 100644
--- a/libide/ide-buffer-manager.h
+++ b/libide/ide-buffer-manager.h
@@ -20,6 +20,7 @@
 #define IDE_BUFFER_MANAGER_H
 
 #include <gtk/gtk.h>
+#include <gtksourceview/completion-providers/words/gtksourcecompletionwords.h>
 
 #include "ide-object.h"
 
@@ -53,6 +54,7 @@ IdeBuffer                *ide_buffer_manager_get_focus_buffer    (IdeBufferManag
 void                      ide_buffer_manager_set_focus_buffer    (IdeBufferManager     *self,
                                                                   IdeBuffer            *buffer);
 GPtrArray                *ide_buffer_manager_get_buffers         (IdeBufferManager     *self);
+GtkSourceCompletionWords *ide_buffer_manager_get_word_completion (IdeBufferManager     *self);
 
 G_END_DECLS
 


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