[libadwaita/ebassi/tagged-entry: 19/20] Add a name property to AdwTag




commit 0ccdb7278dd5e585ae231db40b35d24a5054b843
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Mon Mar 7 12:26:21 2022 +0000

    Add a name property to AdwTag
    
    We can use it for debugging purposes, or for styling, just like
    GtkWidget:name.

 src/adw-tag.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/adw-tag.h |  7 ++++++-
 2 files changed, 71 insertions(+), 1 deletion(-)
---
diff --git a/src/adw-tag.c b/src/adw-tag.c
index 3fa59390..c8468473 100644
--- a/src/adw-tag.c
+++ b/src/adw-tag.c
@@ -20,6 +20,8 @@ struct _AdwTag
 {
   GObject parent_instance;
 
+  char *name;
+
   char *action_name;
   GVariant *action_target;
 
@@ -41,6 +43,7 @@ enum
   PROP_TAG_ACTION_NAME,
   PROP_TAG_ACTION_TARGET,
   PROP_TAG_HAS_ICON,
+  PROP_TAG_NAME,
 
   N_TAG_PROPS
 };
@@ -54,6 +57,7 @@ adw_tag_dispose (GObject *gobject)
 {
   AdwTag *self = ADW_TAG (gobject);
 
+  g_clear_pointer (&self->name, g_free);
   g_clear_pointer (&self->action_name, g_free);
   g_clear_pointer (&self->action_target, g_variant_unref);
 
@@ -97,6 +101,11 @@ adw_tag_set_property (GObject      *gobject,
     adw_tag_set_action_target_value (self, g_value_get_variant (value));
     break;
 
+  case PROP_TAG_NAME:
+    g_free (self->name);
+    self->name = g_value_dup_string (value);
+    break;
+
   default:
     G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
   }
@@ -139,6 +148,10 @@ adw_tag_get_property (GObject    *gobject,
     g_value_set_boolean (value, adw_tag_has_icon (self));
     break;
 
+  case PROP_TAG_NAME:
+    g_value_set_string (value, self->name);
+    break;
+
   default:
     G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
   }
@@ -258,6 +271,24 @@ adw_tag_class_init (AdwTagClass *klass)
                           G_PARAM_READABLE |
                           G_PARAM_STATIC_STRINGS |
                           G_PARAM_EXPLICIT_NOTIFY);
+  /**
+   * AdwTag:name:
+   *
+   * The name of the tag.
+   *
+   * The name is used for debugging purposes, and for styling.
+   *
+   * There is no duplicate check for tags with the same name.
+   *
+   * Since: 1.2
+   */
+  tag_props[PROP_TAG_NAME] =
+    g_param_spec_string ("name", NULL, NULL,
+                         NULL,
+                         G_PARAM_READWRITE |
+                         G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_STRINGS |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   g_object_class_install_properties (gobject_class, N_TAG_PROPS, tag_props);
 }
@@ -283,6 +314,22 @@ adw_tag_new (void)
   return g_object_new (ADW_TYPE_TAG, NULL);
 }
 
+/**
+ * adw_tag_new_with_name:
+ * @name: the name of the tag
+ *
+ * Creates a new tag object with the given @name.
+ *
+ * Returns: (transfer full): the newly created tag
+ *
+ * Since: 1.2
+ */
+AdwTag *
+adw_tag_new_with_name (const char *name)
+{
+  return g_object_new (ADW_TYPE_TAG, "name", name, NULL);
+}
+
 /**
  * adw_tag_get_label:
  * @self: the tag we want to query
@@ -653,4 +700,22 @@ adw_tag_set_detailed_action_name (AdwTag     *self,
   g_clear_pointer (&name, g_free);
 }
 
+/**
+ * adw_tag_get_name:
+ * @self: a tag
+ *
+ * Retrieves the name of the tag set using [method@Tag.set_name].
+ *
+ * Returns: (transfer none) (nullable): the name of the tag
+ *
+ * Since: 1.2
+ */
+const char *
+adw_tag_get_name (AdwTag *self)
+{
+  g_return_val_if_fail (ADW_IS_TAG (self), NULL);
+
+  return self->name;
+}
+
 /* }}} */
diff --git a/src/adw-tag.h b/src/adw-tag.h
index 59993cad..baa9e7aa 100644
--- a/src/adw-tag.h
+++ b/src/adw-tag.h
@@ -19,7 +19,9 @@ ADW_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE (AdwTag, adw_tag, ADW, TAG, GObject)
 
 ADW_AVAILABLE_IN_ALL
-AdwTag *adw_tag_new (void);
+AdwTag *adw_tag_new           (void);
+ADW_AVAILABLE_IN_ALL
+AdwTag *adw_tag_new_with_name (const char *name);
 
 ADW_AVAILABLE_IN_ALL
 const char *adw_tag_get_label (AdwTag     *self);
@@ -46,6 +48,9 @@ void          adw_tag_set_paintable (AdwTag       *self,
 ADW_AVAILABLE_IN_ALL
 gboolean      adw_tag_has_icon      (AdwTag       *self);
 
+ADW_AVAILABLE_IN_ALL
+const char *adw_tag_get_name (AdwTag     *self);
+
 ADW_AVAILABLE_IN_ALL
 const char *adw_tag_get_action_name (AdwTag *self);
 ADW_AVAILABLE_IN_ALL


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