GtkStyleContext: Add style classes.

Style classes are the replacement of detail strings.
This commit is contained in:
Carlos Garnacho 2010-03-20 13:02:20 +01:00
parent bd3b97d82b
commit 9a76d1a332
2 changed files with 90 additions and 0 deletions

View File

@ -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"

View File

@ -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