[gnome-builder] vcs: add branch-name and working-direction properties
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] vcs: add branch-name and working-direction properties
- Date: Sun, 17 Jul 2016 10:22:14 +0000 (UTC)
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]