[gnome-builder] editor: format document titles with spacing around /



commit f7f4736adefe9929e2fe65f84de34c5aae8ea86b
Author: Christian Hergert <christian hergert me>
Date:   Tue Sep 15 21:22:33 2015 -0700

    editor: format document titles with spacing around /
    
    Once we get a path bar, it will look similar to this, but with slightly
    different styling on directories and such. But this is a stop gap until
    that widget arrives.

 src/editor/gb-editor-view-private.h |    1 +
 src/editor/gb-editor-view.c         |   43 +++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 0 deletions(-)
---
diff --git a/src/editor/gb-editor-view-private.h b/src/editor/gb-editor-view-private.h
index 9ad13a6..4691200 100644
--- a/src/editor/gb-editor-view-private.h
+++ b/src/editor/gb-editor-view-private.h
@@ -36,6 +36,7 @@ struct _GbEditorView
   GbEditorDocument    *document;
   PeasExtensionSet    *extensions;
   GSettings           *settings;
+  gchar               *title;
 
   GbEditorFrame       *frame1;
   GbEditorFrame       *frame2;
diff --git a/src/editor/gb-editor-view.c b/src/editor/gb-editor-view.c
index e0e2569..f371c59 100644
--- a/src/editor/gb-editor-view.c
+++ b/src/editor/gb-editor-view.c
@@ -202,14 +202,54 @@ gb_editor_view__buffer_changed_on_volume (GbEditorView *self,
     }
 }
 
+static const gchar *
+gb_editor_view_get_title (GbView *view)
+{
+  return ((GbEditorView *)view)->title;
+}
+
 static void
 gb_editor_view__buffer_notify_title (GbEditorView *self,
                                      GParamSpec   *pspec,
                                      IdeBuffer    *buffer)
 {
+  const gchar *title;
+  gchar **parts;
+  gboolean needs_prefix;
+  gchar *str;
+
   g_assert (GB_IS_EDITOR_VIEW (self));
   g_assert (GB_IS_EDITOR_DOCUMENT (buffer));
 
+  g_free (self->title);
+
+  title = ide_buffer_get_title (buffer);
+
+  if (title == NULL)
+    {
+      /* translators: this shouldn't ever happen */
+      self->title = g_strdup ("untitled");
+      return;
+    }
+
+  if ((needs_prefix = (title [0] == G_DIR_SEPARATOR)))
+    title++;
+
+  parts = g_strsplit (title, G_DIR_SEPARATOR_S, 0);
+  str = g_strjoinv (" "G_DIR_SEPARATOR_S" ", parts);
+
+  if (needs_prefix)
+    {
+      self->title = g_strdup_printf (G_DIR_SEPARATOR_S" %s", str);
+      g_free (str);
+    }
+  else
+    {
+      self->title = str;
+    }
+
+  g_strfreev (parts);
+
   g_object_notify (G_OBJECT (self), "title");
 }
 
@@ -299,6 +339,7 @@ gb_editor_view_set_document (GbEditorView     *self,
       g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_DOCUMENT]);
 
       gb_editor_view__buffer_notify_language (self, NULL, document);
+      gb_editor_view__buffer_notify_title (self, NULL, IDE_BUFFER (document));
 
       gb_editor_view_actions_update (self);
     }
@@ -492,6 +533,7 @@ gb_editor_view_finalize (GObject *object)
 {
   GbEditorView *self = (GbEditorView *)object;
 
+  g_clear_pointer (&self->title, g_free);
   g_clear_object (&self->extensions);
   g_clear_object (&self->document);
   g_clear_object (&self->settings);
@@ -555,6 +597,7 @@ gb_editor_view_class_init (GbEditorViewClass *klass)
 
   view_class->create_split = gb_editor_view_create_split;
   view_class->get_document = gb_editor_view_get_document;
+  view_class->get_title = gb_editor_view_get_title;
   view_class->get_modified = gb_editor_view_get_modified;
   view_class->set_split_view = gb_editor_view_set_split_view;
   view_class->set_back_forward_list = gb_editor_view_set_back_forward_list;


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