mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 22:41:43 +00:00
widget: Add css-classes property
Mirroring the values added and removed via {add,remove}_css_class().
This commit is contained in:
parent
52979a0e93
commit
7e43034068
@ -4191,6 +4191,8 @@ gtk_widget_get_css_name
|
||||
gtk_widget_add_css_class
|
||||
gtk_widget_remove_css_class
|
||||
gtk_widget_has_css_class
|
||||
gtk_widget_get_css_classes
|
||||
gtk_widget_set_css_classes
|
||||
|
||||
<SUBSECTION>
|
||||
gtk_widget_get_style_context
|
||||
|
@ -557,6 +557,7 @@ enum {
|
||||
PROP_EXPAND,
|
||||
PROP_SCALE_FACTOR,
|
||||
PROP_CSS_NAME,
|
||||
PROP_CSS_CLASSES,
|
||||
PROP_LAYOUT_MANAGER,
|
||||
NUM_PROPERTIES
|
||||
};
|
||||
@ -1325,6 +1326,18 @@ gtk_widget_class_init (GtkWidgetClass *klass)
|
||||
NULL,
|
||||
GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
/**
|
||||
* GtkWidget:css-classes:
|
||||
*
|
||||
* A list of css classes applied to this widget.
|
||||
*/
|
||||
widget_props[PROP_CSS_CLASSES] =
|
||||
g_param_spec_boxed ("classes",
|
||||
P_("Style Classes"),
|
||||
P_("List of classes"),
|
||||
G_TYPE_STRV,
|
||||
GTK_PARAM_READWRITE);
|
||||
|
||||
/**
|
||||
* GtkWidget:layout-manager:
|
||||
*
|
||||
@ -1886,6 +1899,9 @@ gtk_widget_set_property (GObject *object,
|
||||
if (g_value_get_string (value) != NULL)
|
||||
gtk_css_node_set_name (priv->cssnode, g_quark_from_string (g_value_get_string (value)));
|
||||
break;
|
||||
case PROP_CSS_CLASSES:
|
||||
gtk_widget_set_css_classes (widget, g_value_get_boxed (value));
|
||||
break;
|
||||
case PROP_LAYOUT_MANAGER:
|
||||
gtk_widget_set_layout_manager (widget, g_value_dup_object (value));
|
||||
break;
|
||||
@ -2032,6 +2048,9 @@ gtk_widget_get_property (GObject *object,
|
||||
case PROP_CSS_NAME:
|
||||
g_value_set_string (value, g_quark_to_string (gtk_css_node_get_name (priv->cssnode)));
|
||||
break;
|
||||
case PROP_CSS_CLASSES:
|
||||
g_value_take_boxed (value, gtk_widget_get_css_classes (widget));
|
||||
break;
|
||||
case PROP_LAYOUT_MANAGER:
|
||||
g_value_set_object (value, gtk_widget_get_layout_manager (widget));
|
||||
break;
|
||||
@ -13141,6 +13160,7 @@ gtk_widget_add_css_class (GtkWidget *widget,
|
||||
g_return_if_fail (css_class[0] != '.');
|
||||
|
||||
gtk_css_node_add_class (priv->cssnode, g_quark_from_string (css_class));
|
||||
g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_CSS_CLASSES]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -13169,6 +13189,7 @@ gtk_widget_remove_css_class (GtkWidget *widget,
|
||||
return;
|
||||
|
||||
gtk_css_node_remove_class (priv->cssnode, class_quark);
|
||||
g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_CSS_CLASSES]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -13200,3 +13221,56 @@ gtk_widget_has_css_class (GtkWidget *widget,
|
||||
|
||||
return gtk_css_node_has_class (priv->cssnode, class_quark);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_widget_get_css_classes:
|
||||
* @widget: a #GtkWidget
|
||||
*
|
||||
* Returns the list of css classes applied to @widget.
|
||||
*
|
||||
* Returns: (transfer full): a %NULL-terminated list of
|
||||
* css classes currently applied to @widget. The returned
|
||||
* list can be freed using g_strfreev.
|
||||
*/
|
||||
char **
|
||||
gtk_widget_get_css_classes (GtkWidget *widget)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
const GQuark *classes;
|
||||
guint n_classes;
|
||||
char **strv;
|
||||
guint i;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
|
||||
|
||||
classes = gtk_css_node_list_classes (priv->cssnode, &n_classes);
|
||||
strv = g_new (char *, n_classes + 1);
|
||||
|
||||
for (i = 0; i < n_classes; i++)
|
||||
strv[i] = g_strdup (g_quark_to_string (classes[i]));
|
||||
|
||||
strv[n_classes] = NULL;
|
||||
|
||||
return strv;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_widget_set_css_classes:
|
||||
* @widget: a #GtkWidget
|
||||
* @classes: (transfer none): %NULL-terminated list
|
||||
* of css classes to apply to @widget.
|
||||
*
|
||||
* Will clear all css classes applied to @widget
|
||||
* and replace them with @classes.
|
||||
*/
|
||||
void
|
||||
gtk_widget_set_css_classes (GtkWidget *widget,
|
||||
const char **classes)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
gtk_css_node_set_classes (priv->cssnode, classes);
|
||||
g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_CSS_CLASSES]);
|
||||
}
|
||||
|
@ -981,6 +981,11 @@ void gtk_widget_remove_css_class (GtkWidget *widget,
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gtk_widget_has_css_class (GtkWidget *widget,
|
||||
const char *css_class);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
char ** gtk_widget_get_css_classes (GtkWidget *widget);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_widget_set_css_classes (GtkWidget *widget,
|
||||
const char **classes);
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user