popover: Add a mnemonics-visible property

This will be handled separately for popovers, so we
need our own property for it.
This commit is contained in:
Matthias Clasen 2020-03-24 12:29:26 -04:00
parent b2ac42e576
commit 2de4fc3ec0
2 changed files with 65 additions and 0 deletions

View File

@ -146,6 +146,7 @@ typedef struct {
GtkPositionType position; GtkPositionType position;
gboolean autohide; gboolean autohide;
gboolean has_arrow; gboolean has_arrow;
gboolean mnemonics_visible;
GtkWidget *contents_widget; GtkWidget *contents_widget;
GtkCssNode *arrow_node; GtkCssNode *arrow_node;
@ -170,6 +171,7 @@ enum {
PROP_AUTOHIDE, PROP_AUTOHIDE,
PROP_DEFAULT_WIDGET, PROP_DEFAULT_WIDGET,
PROP_HAS_ARROW, PROP_HAS_ARROW,
PROP_MNEMONICS_VISIBLE,
NUM_PROPERTIES NUM_PROPERTIES
}; };
@ -1382,6 +1384,10 @@ gtk_popover_set_property (GObject *object,
gtk_popover_set_has_arrow (popover, g_value_get_boolean (value)); gtk_popover_set_has_arrow (popover, g_value_get_boolean (value));
break; break;
case PROP_MNEMONICS_VISIBLE:
gtk_popover_set_mnemonics_visible (popover, g_value_get_boolean (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -1419,6 +1425,10 @@ gtk_popover_get_property (GObject *object,
g_value_set_boolean (value, priv->has_arrow); g_value_set_boolean (value, priv->has_arrow);
break; break;
case PROP_MNEMONICS_VISIBLE:
g_value_set_boolean (value, priv->mnemonics_visible);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -1546,6 +1556,13 @@ gtk_popover_class_init (GtkPopoverClass *klass)
TRUE, TRUE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
properties[PROP_MNEMONICS_VISIBLE] =
g_param_spec_boolean ("mnemonics-visible",
P_("Mnemonics visible"),
P_("Whether mnemonics are currently visible in this popover"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties); g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
signals[CLOSED] = signals[CLOSED] =
@ -1898,3 +1915,45 @@ gtk_popover_get_has_arrow (GtkPopover *popover)
return priv->has_arrow; return priv->has_arrow;
} }
/**
* gtk_popover_set_mnemonics_visible:
* @popover: a #GtkPopover
* @mnemonics_visible: the new value
*
* Sets the #GtkPopover:mnemonics-visible property.
*/
void
gtk_popover_set_mnemonics_visible (GtkPopover *popover,
gboolean mnemonics_visible)
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
g_return_if_fail (GTK_IS_POPOVER (popover));
if (priv->mnemonics_visible == mnemonics_visible)
return;
priv->mnemonics_visible = mnemonics_visible;
g_object_notify_by_pspec (G_OBJECT (popover), properties[PROP_MNEMONICS_VISIBLE]);
gtk_widget_queue_resize (GTK_WIDGET (popover));
}
/**
* gtk_popover_get_mnemonics_visible:
* @popover: a #GtkPopover
*
* Gets the value of the #GtkPopover:mnemonics-visible property.
*
* Returns: %TRUE if mnemonics are supposed to be visible in this popover
*/
gboolean
gtk_popover_get_mnemonics_visible (GtkPopover *popover)
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
g_return_val_if_fail (GTK_IS_POPOVER (popover), FALSE);
return priv->mnemonics_visible;
}

View File

@ -86,6 +86,12 @@ void gtk_popover_set_has_arrow (GtkPopover *popover,
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
gboolean gtk_popover_get_has_arrow (GtkPopover *popover); gboolean gtk_popover_get_has_arrow (GtkPopover *popover);
GDK_AVAILABLE_IN_ALL
void gtk_popover_set_mnemonics_visible (GtkPopover *popover,
gboolean mnemonics_visible);
GDK_AVAILABLE_IN_ALL
gboolean gtk_popover_get_mnemonics_visible (GtkPopover *popover);
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
void gtk_popover_popup (GtkPopover *popover); void gtk_popover_popup (GtkPopover *popover);
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL