[gnome-builder/wip/chergert/clang] clang: add API to set unsaved file data



commit f4b87f55aaa2e26f2ca16d59aa8cb58bbaf24808
Author: Christian Hergert <chergert redhat com>
Date:   Thu Apr 26 02:50:37 2018 -0700

    clang: add API to set unsaved file data

 src/plugins/clang/ide-clang.c | 24 ++++++++++++++++++++++--
 src/plugins/clang/ide-clang.h |  3 +++
 2 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/src/plugins/clang/ide-clang.c b/src/plugins/clang/ide-clang.c
index 22ac77d40..209a0f748 100644
--- a/src/plugins/clang/ide-clang.c
+++ b/src/plugins/clang/ide-clang.c
@@ -32,8 +32,9 @@
 
 struct _IdeClang
 {
-  GObject  parent;
-  GFile   *workdir;
+  GObject     parent;
+  GFile      *workdir;
+  GHashTable *unsaved_files;
 };
 
 G_DEFINE_TYPE (IdeClang, ide_clang, G_TYPE_OBJECT)
@@ -303,6 +304,7 @@ ide_clang_finalize (GObject *object)
   IdeClang *self = (IdeClang *)object;
 
   g_clear_object (&self->workdir);
+  g_clear_pointer (&self->unsaved_files, g_hash_table_unref);
 
   G_OBJECT_CLASS (ide_clang_parent_class)->finalize (object);
 }
@@ -318,6 +320,10 @@ ide_clang_class_init (IdeClangClass *klass)
 static void
 ide_clang_init (IdeClang *self)
 {
+  self->unsaved_files = g_hash_table_new_full (g_file_hash,
+                                               (GEqualFunc)g_file_equal,
+                                               g_object_unref,
+                                               (GDestroyNotify)g_bytes_unref);
 }
 
 IdeClang *
@@ -2071,4 +2077,18 @@ ide_clang_get_index_key_finish (IdeClang      *self,
   return ide_task_propagate_pointer (IDE_TASK (result), error);
 }
 
+void
+ide_clang_set_unsaved_file (IdeClang *self,
+                            GFile    *file,
+                            GBytes   *bytes)
+{
+  g_return_if_fail (IDE_IS_CLANG (self));
+  g_return_if_fail (G_IS_FILE (file));
+
+  if (bytes == NULL)
+    g_hash_table_remove (self->unsaved_files, file);
+  else
+    g_hash_table_insert (self->unsaved_files, g_object_ref (file), g_bytes_ref (bytes));
+}
+
 /* vim:set foldmethod=marker: */
diff --git a/src/plugins/clang/ide-clang.h b/src/plugins/clang/ide-clang.h
index 2a54df942..28f857652 100644
--- a/src/plugins/clang/ide-clang.h
+++ b/src/plugins/clang/ide-clang.h
@@ -109,5 +109,8 @@ void               ide_clang_get_highlight_index_async  (IdeClang             *s
 IdeHighlightIndex *ide_clang_get_highlight_index_finish (IdeClang             *self,
                                                          GAsyncResult         *result,
                                                          GError              **error);
+void               ide_clang_set_unsaved_file           (IdeClang             *self,
+                                                         GFile                *file,
+                                                         GBytes               *bytes);
 
 G_END_DECLS


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