GtkCssProvider: Add named regions to selector path.

This commit is contained in:
Carlos Garnacho 2010-04-21 01:48:01 +02:00
parent 707d5ae99c
commit 07171d5f68

View File

@ -41,6 +41,7 @@ enum SelectorElementType {
SELECTOR_TYPE_NAME, SELECTOR_TYPE_NAME,
SELECTOR_NAME, SELECTOR_NAME,
SELECTOR_GTYPE, SELECTOR_GTYPE,
SELECTOR_REGION,
SELECTOR_GLOB SELECTOR_GLOB
}; };
@ -58,6 +59,12 @@ struct SelectorElement
{ {
GQuark name; GQuark name;
GType type; GType type;
struct
{
GQuark name;
GtkChildClassFlags flags;
} region;
}; };
}; };
@ -204,6 +211,23 @@ selector_path_prepend_glob (SelectorPath *path)
path->elements = g_slist_prepend (path->elements, elem); path->elements = g_slist_prepend (path->elements, elem);
} }
static void
selector_path_prepend_region (SelectorPath *path,
const gchar *name,
GtkChildClassFlags flags)
{
SelectorElement *elem;
elem = g_slice_new (SelectorElement);
elem->combinator = COMBINATOR_DESCENDANT;
elem->elem_type = SELECTOR_REGION;
elem->region.name = g_quark_from_string (name);
elem->region.flags = flags;
path->elements = g_slist_prepend (path->elements, elem);
}
static void static void
selector_path_prepend_combinator (SelectorPath *path, selector_path_prepend_combinator (SelectorPath *path,
CombinatorType combinator) CombinatorType combinator)
@ -739,6 +763,9 @@ parse_selector (GtkCssProvider *css_provider,
else if (g_ascii_islower (scanner->value.v_identifier[0])) else if (g_ascii_islower (scanner->value.v_identifier[0]))
{ {
GtkChildClassFlags flags = 0; GtkChildClassFlags flags = 0;
gchar *region_name;
region_name = g_strdup (scanner->value.v_identifier);
/* Parse nth-child type pseudo-class */ /* Parse nth-child type pseudo-class */
if (g_scanner_peek_next_token (scanner) == ':') if (g_scanner_peek_next_token (scanner) == ':')
@ -752,6 +779,9 @@ parse_selector (GtkCssProvider *css_provider,
return token; return token;
} }
} }
selector_path_prepend_region (path, region_name, flags);
g_free (region_name);
} }
else if (scanner->value.v_identifier[0] == '*') else if (scanner->value.v_identifier[0] == '*')
selector_path_prepend_glob (path); selector_path_prepend_glob (path);