[gnome-builder] libide/gui: add module-name property for session items
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: add module-name property for session items
- Date: Thu, 15 Sep 2022 08:12:49 +0000 (UTC)
commit 6dff2fe8042a0d6f98b02b84fd28cdf01765be55
Author: Christian Hergert <chergert redhat com>
Date: Thu Sep 15 00:28:31 2022 -0700
libide/gui: add module-name property for session items
The goal here is to make it easy for addins to find the items that they
added simply by checking the module-name. That will free up the type-hint
to be used for actual type decoding information.
src/libide/gui/ide-session-item.c | 55 ++++++++++++++++++++++++++++++++++
src/libide/gui/ide-session-item.h | 63 +++++++++++++++++++++------------------
2 files changed, 89 insertions(+), 29 deletions(-)
---
diff --git a/src/libide/gui/ide-session-item.c b/src/libide/gui/ide-session-item.c
index 773a142c0..4f49d4303 100644
--- a/src/libide/gui/ide-session-item.c
+++ b/src/libide/gui/ide-session-item.c
@@ -29,6 +29,7 @@ struct _IdeSessionItem
{
GObject parent_instance;
PanelPosition *position;
+ char *module_name;
char *id;
char *type_hint;
GHashTable *metadata;
@@ -37,6 +38,7 @@ struct _IdeSessionItem
enum {
PROP_0,
PROP_ID,
+ PROP_MODULE_NAME,
PROP_POSITION,
PROP_TYPE_HINT,
N_PROPS
@@ -54,6 +56,7 @@ ide_session_item_dispose (GObject *object)
g_clear_object (&self->position);
g_clear_pointer (&self->id, g_free);
+ g_clear_pointer (&self->module_name, g_free);
g_clear_pointer (&self->type_hint, g_free);
g_clear_pointer (&self->metadata, g_hash_table_unref);
@@ -74,6 +77,10 @@ ide_session_item_get_property (GObject *object,
g_value_set_string (value, ide_session_item_get_id (self));
break;
+ case PROP_MODULE_NAME:
+ g_value_set_string (value, ide_session_item_get_module_name (self));
+ break;
+
case PROP_POSITION:
g_value_set_object (value, ide_session_item_get_position (self));
break;
@@ -101,6 +108,10 @@ ide_session_item_set_property (GObject *object,
ide_session_item_set_id (self, g_value_get_string (value));
break;
+ case PROP_MODULE_NAME:
+ ide_session_item_set_module_name (self, g_value_get_string (value));
+ break;
+
case PROP_POSITION:
ide_session_item_set_position (self, g_value_get_object (value));
break;
@@ -129,6 +140,10 @@ ide_session_item_class_init (IdeSessionItemClass *klass)
G_PARAM_EXPLICIT_NOTIFY |
G_PARAM_STATIC_STRINGS));
+ properties [PROP_MODULE_NAME] =
+ g_param_spec_string ("module-name", NULL, NULL, NULL,
+ (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
+
properties [PROP_POSITION] =
g_param_spec_object ("position", NULL, NULL,
PANEL_TYPE_POSITION,
@@ -186,6 +201,42 @@ ide_session_item_set_id (IdeSessionItem *self,
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ID]);
}
+/**
+ * ide_session_item_get_module_name:
+ * @self: a #IdeSessionItem
+ *
+ * Gets the module-name that created an item.
+ *
+ * Returns: (nullable): a module-name or %NULL
+ */
+const char *
+ide_session_item_get_module_name (IdeSessionItem *self)
+{
+ g_return_val_if_fail (IDE_IS_SESSION_ITEM (self), NULL);
+
+ return self->module_name;
+}
+
+/**
+ * ide_session_item_set_module_name:
+ * @self: a #IdeSessionItem
+ * @module_name: (nullable): the module name owning the item
+ *
+ * Sets the module-name for the session item.
+ *
+ * This is generally used to help determine which plugin created
+ * the item when decoding them at project load time.
+ */
+void
+ide_session_item_set_module_name (IdeSessionItem *self,
+ const char *module_name)
+{
+ g_return_if_fail (IDE_IS_SESSION_ITEM (self));
+
+ if (ide_set_string (&self->module_name, module_name))
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_MODULE_NAME]);
+}
+
/**
* ide_session_item_get_type_hint:
* @self: a #IdeSessionItem
@@ -481,6 +532,9 @@ _ide_session_item_to_variant (IdeSessionItem *self,
if (self->id != NULL)
g_variant_builder_add_parsed (builder, "{'id',<%s>}", self->id);
+ if (self->module_name != NULL)
+ g_variant_builder_add_parsed (builder, "{'module-name',<%s>}", self->module_name);
+
if (self->type_hint != NULL)
g_variant_builder_add_parsed (builder, "{'type-hint',<%s>}", self->type_hint);
@@ -528,6 +582,7 @@ _ide_session_item_new_from_variant (GVariant *variant,
self = g_object_new (IDE_TYPE_SESSION_ITEM, NULL);
g_variant_lookup (variant, "id", "s", &self->id);
+ g_variant_lookup (variant, "module-name", "s", &self->module_name);
g_variant_lookup (variant, "type-hint", "s", &self->type_hint);
if ((positionv = g_variant_lookup_value (variant, "position", NULL)))
diff --git a/src/libide/gui/ide-session-item.h b/src/libide/gui/ide-session-item.h
index 82c522be9..8341214a4 100644
--- a/src/libide/gui/ide-session-item.h
+++ b/src/libide/gui/ide-session-item.h
@@ -38,45 +38,50 @@ G_DECLARE_FINAL_TYPE (IdeSessionItem, ide_session_item, IDE, SESSION_ITEM, GObje
IDE_AVAILABLE_IN_ALL
IdeSessionItem *ide_session_item_new (void);
IDE_AVAILABLE_IN_ALL
-PanelPosition *ide_session_item_get_position (IdeSessionItem *self);
+PanelPosition *ide_session_item_get_position (IdeSessionItem *self);
IDE_AVAILABLE_IN_ALL
-void ide_session_item_set_position (IdeSessionItem *self,
- PanelPosition *position);
+void ide_session_item_set_position (IdeSessionItem *self,
+ PanelPosition *position);
IDE_AVAILABLE_IN_ALL
-const char *ide_session_item_get_id (IdeSessionItem *self);
+const char *ide_session_item_get_id (IdeSessionItem *self);
IDE_AVAILABLE_IN_ALL
-void ide_session_item_set_id (IdeSessionItem *self,
- const char *id);
+void ide_session_item_set_id (IdeSessionItem *self,
+ const char *id);
IDE_AVAILABLE_IN_ALL
-const char *ide_session_item_get_type_hint (IdeSessionItem *self);
+const char *ide_session_item_get_module_name (IdeSessionItem *self);
IDE_AVAILABLE_IN_ALL
-void ide_session_item_set_type_hint (IdeSessionItem *self,
- const char *type_hint);
+void ide_session_item_set_module_name (IdeSessionItem *self,
+ const char *module_name);
IDE_AVAILABLE_IN_ALL
-gboolean ide_session_item_has_metadata (IdeSessionItem *self,
- const char *key,
- const GVariantType **value_type);
+const char *ide_session_item_get_type_hint (IdeSessionItem *self);
IDE_AVAILABLE_IN_ALL
-gboolean ide_session_item_has_metadata_with_type (IdeSessionItem *self,
- const char *key,
- const GVariantType *expected_type);
+void ide_session_item_set_type_hint (IdeSessionItem *self,
+ const char *type_hint);
IDE_AVAILABLE_IN_ALL
-void ide_session_item_get_metadata (IdeSessionItem *self,
- const char *key,
- const char *format,
- ...);
+gboolean ide_session_item_has_metadata (IdeSessionItem *self,
+ const char *key,
+ const GVariantType **value_type);
IDE_AVAILABLE_IN_ALL
-void ide_session_item_set_metadata (IdeSessionItem *self,
- const char *key,
- const char *format,
- ...);
+gboolean ide_session_item_has_metadata_with_type (IdeSessionItem *self,
+ const char *key,
+ const GVariantType *expected_type);
IDE_AVAILABLE_IN_ALL
-GVariant *ide_session_item_get_metadata_value (IdeSessionItem *self,
- const char *key,
- const GVariantType *expected_type);
+void ide_session_item_get_metadata (IdeSessionItem *self,
+ const char *key,
+ const char *format,
+ ...);
IDE_AVAILABLE_IN_ALL
-void ide_session_item_set_metadata_value (IdeSessionItem *self,
- const char *key,
- GVariant *value);
+void ide_session_item_set_metadata (IdeSessionItem *self,
+ const char *key,
+ const char *format,
+ ...);
+IDE_AVAILABLE_IN_ALL
+GVariant *ide_session_item_get_metadata_value (IdeSessionItem *self,
+ const char *key,
+ const GVariantType *expected_type);
+IDE_AVAILABLE_IN_ALL
+void ide_session_item_set_metadata_value (IdeSessionItem *self,
+ const char *key,
+ GVariant *value);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]