[gnome-builder] vcs: add branch-name and working-direction properties



commit 587ce2656fa64f6289eafb9021ac9c11cc5849cc
Author: Christian Hergert <chergert redhat com>
Date:   Sun Jul 17 02:39:20 2016 -0700

    vcs: add branch-name and working-direction properties
    
    To make it easier to do bindings, this adds a properties as a requirement
    for the IdeVcs.

 libide/directory/ide-directory-vcs.c |   48 +++++++++++++++++++++++++++++----
 libide/vcs/ide-vcs.c                 |   14 ++++++++++
 plugins/git/ide-git-vcs.c            |   42 +++++++++++++++++++++++------
 3 files changed, 89 insertions(+), 15 deletions(-)
---
diff --git a/libide/directory/ide-directory-vcs.c b/libide/directory/ide-directory-vcs.c
index 0c4d487..3d81d6a 100644
--- a/libide/directory/ide-directory-vcs.c
+++ b/libide/directory/ide-directory-vcs.c
@@ -40,6 +40,21 @@ G_DEFINE_TYPE_EXTENDED (IdeDirectoryVcs, ide_directory_vcs, IDE_TYPE_OBJECT, 0,
                         G_IMPLEMENT_INTERFACE (IDE_TYPE_VCS, vcs_iface_init)
                         G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init))
 
+enum {
+  PROP_0,
+  N_PROPS,
+
+  /* Override Properties */
+  PROP_BRANCH_NAME,
+  PROP_WORKING_DIRECTORY,
+};
+
+static gchar *
+ide_directory_vcs_get_branch_name (IdeVcs *vcs)
+{
+  return g_strdup (_("unversioned"));
+}
+
 static GFile *
 ide_directory_vcs_get_working_directory (IdeVcs *vcs)
 {
@@ -94,11 +109,38 @@ ide_directory_vcs_dispose (GObject *object)
 }
 
 static void
+ide_directory_vcs_get_property (GObject    *object,
+                                guint       prop_id,
+                                GValue     *value,
+                                GParamSpec *pspec)
+{
+  IdeDirectoryVcs *self = IDE_DIRECTORY_VCS (object);
+
+  switch (prop_id)
+    {
+    case PROP_BRANCH_NAME:
+      g_value_take_string (value, ide_directory_vcs_get_branch_name (IDE_VCS (self)));
+      break;
+
+    case PROP_WORKING_DIRECTORY:
+      g_value_set_object (value, ide_directory_vcs_get_working_directory (IDE_VCS (self)));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
 ide_directory_vcs_class_init (IdeDirectoryVcsClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   object_class->dispose = ide_directory_vcs_dispose;
+  object_class->get_property = ide_directory_vcs_get_property;
+
+  g_object_class_override_property (object_class, PROP_BRANCH_NAME, "branch-name");
+  g_object_class_override_property (object_class, PROP_WORKING_DIRECTORY, "working-directory");
 }
 
 static void
@@ -193,12 +235,6 @@ ide_directory_vcs_get_priority (IdeVcs *vcs)
   return G_MAXINT;
 }
 
-static gchar *
-ide_directory_vcs_get_branch_name (IdeVcs *vcs)
-{
-  return g_strdup (_("unversioned"));
-}
-
 static void
 vcs_iface_init (IdeVcsInterface *iface)
 {
diff --git a/libide/vcs/ide-vcs.c b/libide/vcs/ide-vcs.c
index f2033a1..1e0cb7d 100644
--- a/libide/vcs/ide-vcs.c
+++ b/libide/vcs/ide-vcs.c
@@ -43,6 +43,20 @@ ide_vcs_default_init (IdeVcsInterface *iface)
                                                             IDE_TYPE_CONTEXT,
                                                             (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | 
G_PARAM_STATIC_STRINGS)));
 
+  g_object_interface_install_property (iface,
+                                       g_param_spec_string ("branch-name",
+                                                            "Branch Name",
+                                                            "The current name of the branch",
+                                                            NULL,
+                                                            (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
+
+  g_object_interface_install_property (iface,
+                                       g_param_spec_object ("working-directory",
+                                                            "Working Directory",
+                                                            "The working directory for the VCS",
+                                                            G_TYPE_FILE,
+                                                            (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
+
   /**
    * IdeVcs::changed:
    *
diff --git a/plugins/git/ide-git-vcs.c b/plugins/git/ide-git-vcs.c
index f2e64a3..7659d2e 100644
--- a/plugins/git/ide-git-vcs.c
+++ b/plugins/git/ide-git-vcs.c
@@ -62,7 +62,11 @@ G_DEFINE_TYPE_EXTENDED (IdeGitVcs, ide_git_vcs, IDE_TYPE_OBJECT, 0,
 enum {
   PROP_0,
   PROP_REPOSITORY,
-  LAST_PROP
+  LAST_PROP,
+
+  /* Override properties */
+  PROP_BRANCH_NAME,
+  PROP_WORKING_DIRECTORY,
 };
 
 enum {
@@ -372,6 +376,16 @@ ide_git_vcs_get_branch_name (IdeVcs *vcs)
 }
 
 static void
+ide_git_vcs_real_reloaded (IdeGitVcs      *self,
+                           GgitRepository *repository)
+{
+  g_assert (IDE_IS_GIT_VCS (self));
+  g_assert (GGIT_IS_REPOSITORY (repository));
+
+  g_object_notify (G_OBJECT (self), "branch-name");
+}
+
+static void
 ide_git_vcs_dispose (GObject *object)
 {
   IdeGitVcs *self = (IdeGitVcs *)object;
@@ -410,10 +424,18 @@ ide_git_vcs_get_property (GObject    *object,
 
   switch (prop_id)
     {
+    case PROP_BRANCH_NAME:
+      g_value_set_string (value, ide_git_vcs_get_branch_name (IDE_VCS (self)));
+      break;
+
     case PROP_REPOSITORY:
       g_value_set_object (value, ide_git_vcs_get_repository (self));
       break;
 
+    case PROP_WORKING_DIRECTORY:
+      g_value_set_object (value, ide_git_vcs_get_working_directory (IDE_VCS (self)));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -437,6 +459,9 @@ ide_git_vcs_class_init (IdeGitVcsClass *klass)
   object_class->dispose = ide_git_vcs_dispose;
   object_class->get_property = ide_git_vcs_get_property;
 
+  g_object_class_override_property (object_class, PROP_BRANCH_NAME, "branch-name");
+  g_object_class_override_property (object_class, PROP_WORKING_DIRECTORY, "working-directory");
+
   /**
    * IdeGitVcs:repository:
    *
@@ -469,14 +494,13 @@ ide_git_vcs_class_init (IdeGitVcsClass *klass)
    * be used directly except in very specific situations. The gutter change renderer uses this
    * instance in a threaded manner.
    */
-  signals [RELOADED] = g_signal_new ("reloaded",
-                                      G_TYPE_FROM_CLASS (klass),
-                                      G_SIGNAL_RUN_LAST,
-                                      0,
-                                      NULL, NULL, NULL,
-                                      G_TYPE_NONE,
-                                      1,
-                                      GGIT_TYPE_REPOSITORY);
+  signals [RELOADED] =
+    g_signal_new_class_handler ("reloaded",
+                                G_TYPE_FROM_CLASS (klass),
+                                G_SIGNAL_RUN_LAST,
+                                G_CALLBACK (ide_git_vcs_real_reloaded),
+                                NULL, NULL, NULL,
+                                G_TYPE_NONE, 1, GGIT_TYPE_REPOSITORY);
 }
 
 static void


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