[gnome-builder] buffer: add failure tracking to buffer



commit 0a2c73528c8f16e78f02a348fe0b207907232382
Author: Christian Hergert <chergert redhat com>
Date:   Wed Dec 13 01:23:26 2017 -0800

    buffer: add failure tracking to buffer
    
    We can use this to ensure we set failure state on the view.

 src/libide/buffers/ide-buffer.c |   57 +++++++++++++++++++++++++++++++++++++++
 src/libide/buffers/ide-buffer.h |    6 +++-
 2 files changed, 62 insertions(+), 1 deletions(-)
---
diff --git a/src/libide/buffers/ide-buffer.c b/src/libide/buffers/ide-buffer.c
index 4c664f4..ddd3aa2 100644
--- a/src/libide/buffers/ide-buffer.c
+++ b/src/libide/buffers/ide-buffer.c
@@ -86,6 +86,7 @@ typedef struct
   IdeExtensionSetAdapter *symbol_resolvers_adapter;
   PeasExtensionSet       *addins;
   gchar                  *title;
+  GError                 *failure;
 
   DzlSignalGroup         *file_signals;
 
@@ -112,6 +113,7 @@ typedef struct
   guint                   loading : 1;
   guint                   mtime_set : 1;
   guint                   read_only : 1;
+  guint                   failed : 1;
 } IdeBufferPrivate;
 
 typedef struct
@@ -132,6 +134,7 @@ enum {
   PROP_BUSY,
   PROP_CHANGED_ON_VOLUME,
   PROP_CONTEXT,
+  PROP_FAILED,
   PROP_FILE,
   PROP_HAS_DIAGNOSTICS,
   PROP_HIGHLIGHT_DIAGNOSTICS,
@@ -1401,6 +1404,8 @@ ide_buffer_dispose (GObject *object)
   dzl_clear_source (&priv->reclamation_handler);
   dzl_clear_source (&priv->check_modified_timeout);
 
+  g_clear_pointer (&priv->failure, g_error_free);
+
   if (priv->context != NULL)
     {
       IdeBufferManager *buffer_manager = ide_context_get_buffer_manager (priv->context);
@@ -1489,6 +1494,10 @@ ide_buffer_get_property (GObject    *object,
       g_value_set_object (value, ide_buffer_get_context (self));
       break;
 
+    case PROP_FAILED:
+      g_value_set_boolean (value, ide_buffer_get_failed (self));
+      break;
+
     case PROP_FILE:
       g_value_set_object (value, ide_buffer_get_file (self));
       break;
@@ -1589,6 +1598,20 @@ ide_buffer_class_init (IdeBufferClass *klass)
                           G_PARAM_CONSTRUCT_ONLY |
                           G_PARAM_STATIC_STRINGS));
 
+  /**
+   * IdeBuffer:failed:
+   *
+   * The "failed" property is set to %TRUE if the buffer failed to load.
+   *
+   * Since: 3.28
+   */
+  properties [PROP_FAILED] =
+    g_param_spec_boolean ("failed",
+                          "Failed",
+                          "If the buffer has failed in loading.",
+                          FALSE,
+                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
   properties [PROP_FILE] =
     g_param_spec_object ("file",
                          "File",
@@ -3145,3 +3168,37 @@ _ide_buffer_get_addins (IdeBuffer *self)
 
   return priv->addins;
 }
+
+gboolean
+ide_buffer_get_failed (IdeBuffer *self)
+{
+  IdeBufferPrivate *priv = ide_buffer_get_instance_private (self);
+
+  g_return_val_if_fail (IDE_IS_BUFFER (self), FALSE);
+
+  return priv->failed;
+}
+
+void
+_ide_buffer_set_failure (IdeBuffer    *self,
+                         const GError *error)
+{
+  IdeBufferPrivate *priv = ide_buffer_get_instance_private (self);
+
+  g_return_if_fail (IDE_IS_BUFFER (self));
+
+  priv->failed = !!error;
+  g_clear_pointer (&priv->failure, g_error_free);
+  priv->failure = g_error_copy (error);
+  g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_FAILED]);
+}
+
+const GError *
+ide_buffer_get_failure (IdeBuffer *self)
+{
+  IdeBufferPrivate *priv = ide_buffer_get_instance_private (self);
+
+  g_return_val_if_fail (IDE_IS_BUFFER (self), NULL);
+
+  return priv->failure;
+}
diff --git a/src/libide/buffers/ide-buffer.h b/src/libide/buffers/ide-buffer.h
index bc0084e..28e1683 100644
--- a/src/libide/buffers/ide-buffer.h
+++ b/src/libide/buffers/ide-buffer.h
@@ -156,8 +156,12 @@ IDE_AVAILABLE_IN_ALL
 void                      ide_buffer_release                       (IdeBuffer            *self);
 IDE_AVAILABLE_IN_ALL
 gchar                    *ide_buffer_get_word_at_iter              (IdeBuffer            *self,
-                                                              const GtkTextIter    *iter);
+                                                                    const GtkTextIter    *iter);
 IDE_AVAILABLE_IN_ALL
 void                      ide_buffer_sync_to_unsaved_files         (IdeBuffer            *self);
+IDE_AVAILABLE_IN_3_28
+gboolean                  ide_buffer_get_failed                    (IdeBuffer            *self);
+IDE_AVAILABLE_IN_3_28
+const GError             *ide_buffer_get_failure                   (IdeBuffer            *self);
 
 G_END_DECLS


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