Commit 9a76d1a3 authored by Carlos Garnacho's avatar Carlos Garnacho

GtkStyleContext: Add style classes.

Style classes are the replacement of detail strings.
parent bd3b97d8
......@@ -44,6 +44,7 @@ struct GtkStyleContextPrivate
GtkWidgetPath *widget_path;
GtkStateFlags state_flags;
GList *style_classes;
GtkThemingEngine *theming_engine;
};
......@@ -361,5 +362,87 @@ gtk_style_context_get_path (GtkStyleContext *context)
return priv->widget_path;
}
void
gtk_style_context_set_class (GtkStyleContext *context,
const gchar *class_name)
{
GtkStyleContextPrivate *priv;
GQuark class_quark;
GList *link;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
g_return_if_fail (class_name != NULL);
priv = GTK_STYLE_CONTEXT_GET_PRIVATE (context);
class_quark = g_quark_from_string (class_name);
link = priv->style_classes;
while (link)
{
GQuark link_quark;
link_quark = GUINT_TO_POINTER (link->data);
if (link_quark == class_quark)
return;
else if (link_quark > class_quark)
{
priv->style_classes = g_list_insert_before (priv->style_classes,
link, GUINT_TO_POINTER (class_quark));
return;
}
link = link->next;
}
priv->style_classes = g_list_append (priv->style_classes,
GUINT_TO_POINTER (class_quark));
}
void
gtk_style_context_unset_class (GtkStyleContext *context,
const gchar *class_name)
{
GtkStyleContextPrivate *priv;
GQuark class_quark;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
g_return_if_fail (class_name != NULL);
class_quark = g_quark_try_string (class_name);
if (!class_quark)
return;
priv = GTK_STYLE_CONTEXT_GET_PRIVATE (context);
priv->style_classes = g_list_remove (priv->style_classes,
GUINT_TO_POINTER (class_quark));
}
gboolean
gtk_style_context_has_class (GtkStyleContext *context,
const gchar *class_name)
{
GtkStyleContextPrivate *priv;
GQuark class_quark;
g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
g_return_val_if_fail (class_name != NULL, FALSE);
class_quark = g_quark_try_string (class_name);
if (!class_quark)
return FALSE;
priv = GTK_STYLE_CONTEXT_GET_PRIVATE (context);
if (g_list_find (priv->style_classes,
GUINT_TO_POINTER (class_quark)))
return TRUE;
return FALSE;
}
#define __GTK_STYLE_CONTEXT_C__
#include "gtkaliasdef.c"
......@@ -77,6 +77,13 @@ void gtk_style_context_set_path (GtkStyleContext *context,
GtkWidgetPath *path);
G_CONST_RETURN GtkWidgetPath * gtk_style_context_get_path (GtkStyleContext *context);
void gtk_style_context_set_class (GtkStyleContext *context,
const gchar *class_name);
void gtk_style_context_unset_class (GtkStyleContext *context,
const gchar *class_name);
gboolean gtk_style_context_has_class (GtkStyleContext *context,
const gchar *class_name);
G_END_DECLS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment