[gnome-builder] libide/gui: add workspace to session item
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: add workspace to session item
- Date: Fri, 16 Sep 2022 05:50:42 +0000 (UTC)
commit e50b3f5cfdc2b0e375649ca941005ac90b5b9253
Author: Christian Hergert <chergert redhat com>
Date: Thu Sep 15 22:45:36 2022 -0700
libide/gui: add workspace to session item
Just so that we don't have to keep checking this from the metadata.
src/libide/gui/ide-session-item.c | 56 +++++++++++++++++++++++++++++++++++++++
src/libide/gui/ide-session-item.h | 5 ++++
2 files changed, 61 insertions(+)
---
diff --git a/src/libide/gui/ide-session-item.c b/src/libide/gui/ide-session-item.c
index 4f49d4303..8780a93d1 100644
--- a/src/libide/gui/ide-session-item.c
+++ b/src/libide/gui/ide-session-item.c
@@ -31,6 +31,7 @@ struct _IdeSessionItem
PanelPosition *position;
char *module_name;
char *id;
+ char *workspace;
char *type_hint;
GHashTable *metadata;
};
@@ -41,6 +42,7 @@ enum {
PROP_MODULE_NAME,
PROP_POSITION,
PROP_TYPE_HINT,
+ PROP_WORKSPACE,
N_PROPS
};
@@ -58,6 +60,7 @@ ide_session_item_dispose (GObject *object)
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->workspace, g_free);
g_clear_pointer (&self->metadata, g_hash_table_unref);
G_OBJECT_CLASS (ide_session_item_parent_class)->dispose (object);
@@ -89,6 +92,10 @@ ide_session_item_get_property (GObject *object,
g_value_set_string (value, ide_session_item_get_type_hint (self));
break;
+ case PROP_WORKSPACE:
+ g_value_set_string (value, ide_session_item_get_workspace (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -120,6 +127,10 @@ ide_session_item_set_property (GObject *object,
ide_session_item_set_type_hint (self, g_value_get_string (value));
break;
+ case PROP_WORKSPACE:
+ ide_session_item_set_workspace (self, g_value_get_string (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -157,6 +168,12 @@ ide_session_item_class_init (IdeSessionItemClass *klass)
G_PARAM_EXPLICIT_NOTIFY |
G_PARAM_STATIC_STRINGS));
+ properties [PROP_WORKSPACE] =
+ g_param_spec_string ("workspace", NULL, NULL, NULL,
+ (G_PARAM_READWRITE |
+ G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS));
+
g_object_class_install_properties (object_class, N_PROPS, properties);
}
@@ -273,6 +290,41 @@ ide_session_item_set_type_hint (IdeSessionItem *self,
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_TYPE_HINT]);
}
+/**
+ * ide_session_item_get_workspace:
+ * @self: a #IdeSessionItem
+ *
+ * Gets the workspace id for the item.
+ *
+ * Returns: (nullable): a workspace or %NULL
+ */
+const char *
+ide_session_item_get_workspace (IdeSessionItem *self)
+{
+ g_return_val_if_fail (IDE_IS_SESSION_ITEM (self), NULL);
+
+ return self->workspace;
+}
+
+/**
+ * ide_session_item_set_workspace:
+ * @self: a #IdeSessionItem
+ * @workspace: (nullable): a workspace string for the item
+ *
+ * Sets the workspace id for the item.
+ *
+ * This is generally used to tie an item to a specific workspace.
+ */
+void
+ide_session_item_set_workspace (IdeSessionItem *self,
+ const char *workspace)
+{
+ g_return_if_fail (IDE_IS_SESSION_ITEM (self));
+
+ if (ide_set_string (&self->workspace, workspace))
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_WORKSPACE]);
+}
+
/**
* ide_session_item_get_position:
* @self: a #IdeSessionItem
@@ -538,6 +590,9 @@ _ide_session_item_to_variant (IdeSessionItem *self,
if (self->type_hint != NULL)
g_variant_builder_add_parsed (builder, "{'type-hint',<%s>}", self->type_hint);
+ if (self->workspace != NULL)
+ g_variant_builder_add_parsed (builder, "{'workspace',<%s>}", self->workspace);
+
if (self->metadata != NULL && g_hash_table_size (self->metadata) > 0)
{
GHashTableIter iter;
@@ -584,6 +639,7 @@ _ide_session_item_new_from_variant (GVariant *variant,
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);
+ g_variant_lookup (variant, "workspace", "s", &self->workspace);
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 8341214a4..5a76bd601 100644
--- a/src/libide/gui/ide-session-item.h
+++ b/src/libide/gui/ide-session-item.h
@@ -48,6 +48,11 @@ IDE_AVAILABLE_IN_ALL
void ide_session_item_set_id (IdeSessionItem *self,
const char *id);
IDE_AVAILABLE_IN_ALL
+const char *ide_session_item_get_workspace (IdeSessionItem *self);
+IDE_AVAILABLE_IN_ALL
+void ide_session_item_set_workspace (IdeSessionItem *self,
+ const char *workspace);
+IDE_AVAILABLE_IN_ALL
const char *ide_session_item_get_module_name (IdeSessionItem *self);
IDE_AVAILABLE_IN_ALL
void ide_session_item_set_module_name (IdeSessionItem *self,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]