Add support for pango markup in menu items
authorChristopher Davis <christopherdavis@gnome.org>
Thu, 7 Oct 2021 09:32:31 +0000 (02:32 -0700)
committerChristopher Davis <christopherdavis@gnome.org>
Thu, 7 Oct 2021 09:49:11 +0000 (02:49 -0700)
Before https://gitlab.gnome.org/GNOME/gtk/-/commit/c4a2234a28456fda5034bbaa155a1f8f76a6bebc
menu models could use markup for items and the markup would
be parsed, but this was not intended behavior.

This commit adds official support for using markup
for menu items via the `use-markup` property.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4306

gtk/gtkmenusectionbox.c
gtk/gtkmenutrackeritem.c
gtk/gtkmenutrackeritemprivate.h
gtk/gtkpopovermenu.c

index 6d3251e341074cd7a7cc25ed92d9579b2509814a..72ca8c8b1a7c618c409dc1be6cc5fdb1729a9079 100644 (file)
@@ -427,6 +427,7 @@ gtk_menu_section_box_insert_func (GtkMenuTrackerItem *item,
       else
         g_object_bind_property (item, "icon", widget, "icon", G_BINDING_SYNC_CREATE);
 
+      g_object_bind_property (item, "use-markup", widget, "use-markup", G_BINDING_SYNC_CREATE);
       g_object_bind_property (item, "sensitive", widget, "sensitive", G_BINDING_SYNC_CREATE);
       g_object_bind_property (item, "role", widget, "role", G_BINDING_SYNC_CREATE);
       g_object_bind_property (item, "toggled", widget, "active", G_BINDING_SYNC_CREATE);
index 4e191221e223be035ab028b1ebc3f8b74875b6a4..70ac0de8aa44e11dab1ab3cae1c508ce6ec70531 100644 (file)
@@ -106,6 +106,7 @@ enum {
   PROP_0,
   PROP_IS_SEPARATOR,
   PROP_LABEL,
+  PROP_USE_MARKUP,
   PROP_ICON,
   PROP_VERB_ICON,
   PROP_SENSITIVE,
@@ -162,6 +163,9 @@ gtk_menu_tracker_item_get_property (GObject    *object,
     case PROP_LABEL:
       g_value_set_string (value, gtk_menu_tracker_item_get_label (self));
       break;
+    case PROP_USE_MARKUP:
+      g_value_set_boolean (value, gtk_menu_tracker_item_get_use_markup (self));
+      break;
     case PROP_ICON:
       g_value_take_object (value, gtk_menu_tracker_item_get_icon (self));
       break;
@@ -223,6 +227,8 @@ gtk_menu_tracker_item_class_init (GtkMenuTrackerItemClass *class)
     g_param_spec_boolean ("is-separator", "", "", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
   gtk_menu_tracker_item_pspecs[PROP_LABEL] =
     g_param_spec_string ("label", "", "", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
+  gtk_menu_tracker_item_pspecs[PROP_USE_MARKUP] =
+    g_param_spec_boolean ("use-markup", "", "", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
   gtk_menu_tracker_item_pspecs[PROP_ICON] =
     g_param_spec_object ("icon", "", "", G_TYPE_ICON, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
   gtk_menu_tracker_item_pspecs[PROP_VERB_ICON] =
@@ -628,6 +634,12 @@ gtk_menu_tracker_item_get_label (GtkMenuTrackerItem *self)
   return label;
 }
 
+gboolean
+gtk_menu_tracker_item_get_use_markup (GtkMenuTrackerItem *self)
+{
+  return g_menu_item_get_attribute (self->item, "use-markup", "&s", NULL);
+}
+
 /*< private >
  * gtk_menu_tracker_item_get_icon:
  *
index 6ebbc3764c1b50263e4048bbe6b501fe7818a0ef..50343ba99ec64ebe385d563df56a4f19f97f7786 100644 (file)
@@ -66,6 +66,8 @@ gboolean                gtk_menu_tracker_item_get_has_link              (GtkMenu
 
 const char *           gtk_menu_tracker_item_get_label                 (GtkMenuTrackerItem *self);
 
+gboolean               gtk_menu_tracker_item_get_use_markup            (GtkMenuTrackerItem *self);
+
 GIcon *                 gtk_menu_tracker_item_get_icon                  (GtkMenuTrackerItem *self);
 
 GIcon *                 gtk_menu_tracker_item_get_verb_icon             (GtkMenuTrackerItem *self);
index 9a3458584f974233c3e1b28dc151596b74834747..0c4f57ecf22523888573297c328fa935ce807a7a 100644 (file)
@@ -98,6 +98,7 @@
  * The following attributes are used when constructing menu items:
  *
  * - "label": a user-visible string to display
+ * - "use-markup": whether the text in the menu item includes [Pango markup](https://docs.gtk.org/Pango/pango_markup.html)
  * - "action": the prefixed name of the action to trigger
  * - "target": the parameter to use when activating the action
  * - "icon" and "verb-icon": names of icons that may be displayed