[gnome-builder] projects: add support for project GIcon
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] projects: add support for project GIcon
- Date: Tue, 22 Jan 2019 02:37:07 +0000 (UTC)
commit ba976e2d2b5ae032a9278831f782a507dfebac4d
Author: Christian Hergert <chergert redhat com>
Date: Mon Jan 21 18:22:58 2019 -0800
projects: add support for project GIcon
src/libide/projects/ide-project-info.c | 72 ++++++++++++++++++++++++++++++++++
src/libide/projects/ide-project-info.h | 8 ++++
2 files changed, 80 insertions(+)
---
diff --git a/src/libide/projects/ide-project-info.c b/src/libide/projects/ide-project-info.c
index 57b52ea38..68840909d 100644
--- a/src/libide/projects/ide-project-info.c
+++ b/src/libide/projects/ide-project-info.c
@@ -57,6 +57,7 @@ struct _IdeProjectInfo
gchar *description;
gchar **languages;
gchar *vcs_uri;
+ GIcon *icon;
gint priority;
@@ -73,6 +74,8 @@ enum {
PROP_DIRECTORY,
PROP_DOAP,
PROP_FILE,
+ PROP_ICON,
+ PROP_ICON_NAME,
PROP_ID,
PROP_IS_RECENT,
PROP_LANGUAGES,
@@ -374,6 +377,7 @@ ide_project_info_finalize (GObject *object)
g_clear_pointer (&self->name, g_free);
g_clear_object (&self->directory);
g_clear_object (&self->file);
+ g_clear_object (&self->icon);
G_OBJECT_CLASS (ide_project_info_parent_class)->finalize (object);
}
@@ -412,6 +416,10 @@ ide_project_info_get_property (GObject *object,
g_value_set_object (value, ide_project_info_get_file (self));
break;
+ case PROP_ICON:
+ g_value_set_object (value, ide_project_info_get_icon (self));
+ break;
+
case PROP_ID:
g_value_set_string (value, ide_project_info_get_id (self));
break;
@@ -479,6 +487,14 @@ ide_project_info_set_property (GObject *object,
ide_project_info_set_file (self, g_value_get_object (value));
break;
+ case PROP_ICON:
+ ide_project_info_set_icon (self, g_value_get_object (value));
+ break;
+
+ case PROP_ICON_NAME:
+ ide_project_info_set_icon_name (self, g_value_get_string (value));
+ break;
+
case PROP_ID:
ide_project_info_set_id (self, g_value_get_string (value));
break;
@@ -542,6 +558,20 @@ ide_project_info_class_init (IdeProjectInfoClass *klass)
NULL,
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
+ properties [PROP_ICON] =
+ g_param_spec_object ("icon",
+ "Icon",
+ "The icon for the project",
+ G_TYPE_ICON,
+ (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
+
+ properties [PROP_ICON_NAME] =
+ g_param_spec_string ("icon-name",
+ "Icon Name",
+ "The icon-name for the project",
+ NULL,
+ (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+
properties [PROP_ID] =
g_param_spec_string ("id",
"Id",
@@ -798,3 +828,45 @@ ide_project_info_set_id (IdeProjectInfo *self,
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ID]);
}
}
+
+/**
+ * ide_project_info_get_icon:
+ * @self: a #IdeProjectInfo
+ *
+ * Gets the #IdeProjectInfo:icon property.
+ *
+ * Returns: (transfer none) (nullable): a #GIcon or %NULL
+ *
+ * Since: 3.32
+ */
+GIcon *
+ide_project_info_get_icon (IdeProjectInfo *self)
+{
+ g_return_val_if_fail (IDE_IS_PROJECT_INFO (self), NULL);
+
+ return self->icon;
+}
+
+void
+ide_project_info_set_icon (IdeProjectInfo *self,
+ GIcon *icon)
+{
+ g_return_if_fail (IDE_IS_PROJECT_INFO (self));
+ g_return_if_fail (!icon || G_IS_ICON (icon));
+
+ if (g_set_object (&self->icon, icon))
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ICON]);
+}
+
+void
+ide_project_info_set_icon_name (IdeProjectInfo *self,
+ const gchar *icon_name)
+{
+ g_autoptr(GIcon) icon = NULL;
+
+ g_return_if_fail (IDE_IS_PROJECT_INFO (self));
+
+ if (icon_name != NULL)
+ icon = g_themed_icon_new (icon_name);
+ ide_project_info_set_icon (self, icon);
+}
diff --git a/src/libide/projects/ide-project-info.h b/src/libide/projects/ide-project-info.h
index cd897dc9b..250b80393 100644
--- a/src/libide/projects/ide-project-info.h
+++ b/src/libide/projects/ide-project-info.h
@@ -57,6 +57,14 @@ IDE_AVAILABLE_IN_3_32
void ide_project_info_set_doap (IdeProjectInfo *self,
IdeDoap *doap);
IDE_AVAILABLE_IN_3_32
+GIcon *ide_project_info_get_icon (IdeProjectInfo *self);
+IDE_AVAILABLE_IN_3_32
+void ide_project_info_set_icon (IdeProjectInfo *self,
+ GIcon *icon);
+IDE_AVAILABLE_IN_3_32
+void ide_project_info_set_icon_name (IdeProjectInfo *self,
+ const gchar *icon_name);
+IDE_AVAILABLE_IN_3_32
const gchar *ide_project_info_get_build_system_hint (IdeProjectInfo *self);
IDE_AVAILABLE_IN_3_32
const gchar *ide_project_info_get_build_system_name (IdeProjectInfo *self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]