diff options
author | Robert Staudinger <robsta@gnome.org> | 2009-09-08 14:50:03 +0200 |
---|---|---|
committer | Robert Staudinger <robsta@gnome.org> | 2009-09-08 14:50:03 +0200 |
commit | 8e49a2b63911ea7c4c97977afcc3220c9e052484 (patch) | |
tree | 5eed807191acaf77c45671795710d6aadfd057fc | |
parent | b5610632b7e9930667df5b42d6eb5c19b503f47f (diff) |
[feature] Support for multiple pseudo-classes per node.
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ccss-doc/Makefile.am | 6 | ||||
-rw-r--r-- | ccss-doc/ccss-sections.txt | 2 | ||||
-rw-r--r-- | ccss-gtk/ccss-gtk-stylesheet.c | 2 | ||||
-rw-r--r-- | ccss/ccss-node-priv.h | 6 | ||||
-rw-r--r-- | ccss/ccss-node.c | 18 | ||||
-rw-r--r-- | ccss/ccss-node.h | 25 | ||||
-rw-r--r-- | ccss/ccss-selector.c | 7 |
8 files changed, 39 insertions, 28 deletions
@@ -3,6 +3,7 @@ NEWS ==== * Implement accessor functions to structs and deprecate field access. +* Support for multiple CSS classes per node. Version 0.5, 2009-08-11 diff --git a/ccss-doc/Makefile.am b/ccss-doc/Makefile.am index 301559a..366a8c9 100644 --- a/ccss-doc/Makefile.am +++ b/ccss-doc/Makefile.am @@ -10,7 +10,7 @@ DOC_MAIN_SGML_FILE=ccss-docs.sgml DOC_SOURCE_DIR=../ccss # Extra options to pass to gtkdoc-scangobj -SCANGOBJ_OPTIONS= --nogtkinit --type-init-func="ccss_init ()" +SCANGOBJ_OPTIONS= --nogtkinit --type-init-func="ccss_init ()" # Extra options to supply to gtkdoc-scan SCAN_OPTIONS= @@ -48,9 +48,11 @@ if GTK_DOC_INSTALLED include $(top_srcdir)/gtk-doc.make CLEANFILES += ccss-scan.* .PHONY : dist-hook-local +else +EXTRA_DIST = endif -EXTRA_DIST = \ +EXTRA_DIST += \ $(DOC_MAIN_SGML_FILE) \ ccss.hierarchy \ $(NULL) diff --git a/ccss-doc/ccss-sections.txt b/ccss-doc/ccss-sections.txt index 5f45a4f..a6d79bd 100644 --- a/ccss-doc/ccss-sections.txt +++ b/ccss-doc/ccss-sections.txt @@ -121,7 +121,7 @@ ccss_node_get_base_style_f ccss_node_get_instance_f ccss_node_get_id_f ccss_node_get_type_f -ccss_node_get_class_f +ccss_node_get_classes_f ccss_node_get_pseudo_class_f ccss_node_get_attribute_f ccss_node_get_style_f diff --git a/ccss-gtk/ccss-gtk-stylesheet.c b/ccss-gtk/ccss-gtk-stylesheet.c index 0d249af..44d070a 100644 --- a/ccss-gtk/ccss-gtk-stylesheet.c +++ b/ccss-gtk/ccss-gtk-stylesheet.c @@ -59,7 +59,7 @@ static ccss_node_class_t _node_class = { .get_base_style = NULL, .get_id = (ccss_node_get_id_f) get_id, .get_type = (ccss_node_get_type_f) get_type, - .get_class = NULL, + .get_classes = NULL, .get_pseudo_classes = (ccss_node_get_pseudo_classes_f) get_pseudo_classes, .get_attribute = NULL, .get_viewport = NULL, diff --git a/ccss/ccss-node-priv.h b/ccss/ccss-node-priv.h index 0fdbbe6..08a383c 100644 --- a/ccss/ccss-node-priv.h +++ b/ccss/ccss-node-priv.h @@ -48,11 +48,11 @@ ccss_node_get_instance (ccss_node_t *self); char const * ccss_node_get_id (ccss_node_t *self); -char const * -ccss_node_get_class (ccss_node_t *self); +const char ** +ccss_node_get_classes (ccss_node_t *self); const char ** -ccss_node_get_pseudo_classes (ccss_node_t *self); +ccss_node_get_pseudo_classes (ccss_node_t *self); char * ccss_node_get_attribute (ccss_node_t const *self, diff --git a/ccss/ccss-node.c b/ccss/ccss-node.c index 6de1e7e..3b560af 100644 --- a/ccss/ccss-node.c +++ b/ccss/ccss-node.c @@ -61,8 +61,8 @@ get_id (ccss_node_t const *self) return NULL; } -static char const * -get_class (ccss_node_t const *self) +static char const ** +get_classes (ccss_node_t const *self) { return NULL; } @@ -110,7 +110,7 @@ static const ccss_node_class_t _default_node_class = { .get_instance = get_instance, .get_id = get_id, .get_type = get_type, - .get_class = get_class, + .get_classes = get_classes, .get_pseudo_classes = get_pseudo_classes, .get_attribute = get_attribute, .get_style = get_style, @@ -238,17 +238,17 @@ ccss_node_get_id (ccss_node_t *self) return self->id; } -char const * -ccss_node_get_class (ccss_node_t *self) +const char ** +ccss_node_get_classes (ccss_node_t *self) { g_return_val_if_fail (self, NULL); g_return_val_if_fail (self->node_class, NULL); - g_return_val_if_fail (self->node_class->get_class, NULL); + g_return_val_if_fail (self->node_class->get_classes, NULL); - if (NULL == self->css_class) - self->css_class = self->node_class->get_class (self); + if (NULL == self->css_classes) + self->css_classes = self->node_class->get_classes (self); - return self->css_class; + return self->css_classes; } const char ** diff --git a/ccss/ccss-node.h b/ccss/ccss-node.h index b859845..c3524f8 100644 --- a/ccss/ccss-node.h +++ b/ccss/ccss-node.h @@ -97,15 +97,15 @@ typedef ptrdiff_t (*ccss_node_get_instance_f) (ccss_node_t const *self); typedef const char * (*ccss_node_get_id_f) (ccss_node_t const *self); /** - * ccss_node_get_class_f: + * ccss_node_get_classes_f: * @self: a #ccss_node_t. * - * Hook function to query the class name of a #ccss_node_t. + * Hook function to query the class names of a #ccss_node_t. * - * Returns: node class name or %NULL. The returned value must be valid until - * the current stylesheet query returns. + * Returns: %NULL-terminated node classes arry or %NULL. + * The returned values must be valid until the current stylesheet query returns. **/ -typedef const char * (*ccss_node_get_class_f) (ccss_node_t const *self); +typedef const char ** (*ccss_node_get_classes_f) (ccss_node_t const *self); /** * ccss_node_get_pseudo_classes_f: @@ -113,8 +113,8 @@ typedef const char * (*ccss_node_get_class_f) (ccss_node_t const *self); * * Hook function to query the pseudo-class name of a #ccss_node_t. * - * Returns: node pseudo-classes or %NULL. The returned values must be valid - * until the current stylesheet query returns. + * Returns: %NULL-terminated node pseudo-classes array or %NULL. + * The returned values must be valid until the current stylesheet query returns. **/ typedef const char ** (*ccss_node_get_pseudo_classes_f) (ccss_node_t const *self); @@ -179,7 +179,7 @@ typedef void (*ccss_node_release_f) (ccss_node_t *self); * @get_instance: a #ccss_node_get_instance_f. * @get_id: a #ccss_node_get_id_f. * @get_type: a #ccss_node_get_type_f. - * @get_class: a #ccss_node_get_class_f. + * @get_classes: a #ccss_node_get_classes_f. * @get_pseudo_classes: a #ccss_node_get_pseudo_classes_f. * @get_attribute: a #ccss_node_get_attribute_f. * @get_style: a #ccss_node_get_style_f. @@ -198,7 +198,7 @@ typedef struct { ccss_node_get_instance_f get_instance; ccss_node_get_id_f get_id; ccss_node_get_type_f get_type; - ccss_node_get_class_f get_class; + ccss_node_get_classes_f get_classes; ccss_node_get_pseudo_classes_f get_pseudo_classes; ccss_node_get_attribute_f get_attribute; ccss_node_get_style_f get_style; @@ -228,9 +228,14 @@ struct ccss_node_ { CCSS_DEPRECATED (ptrdiff_t instance); CCSS_DEPRECATED (char const *id); CCSS_DEPRECATED (char const *type_name); - CCSS_DEPRECATED (char const *css_class); + CCSS_DEPRECATED (char const **css_classes); CCSS_DEPRECATED (char const **pseudo_classes); CCSS_DEPRECATED (char const *inline_style); + CCSS_DEPRECATED (void *_padding_0); + CCSS_DEPRECATED (void *_padding_1); + CCSS_DEPRECATED (void *_padding_2); + CCSS_DEPRECATED (void *_padding_3); + CCSS_DEPRECATED (void *_padding_4); }; void diff --git a/ccss/ccss-selector.c b/ccss/ccss-selector.c index 6a1b1cc..eb5a24e 100644 --- a/ccss/ccss-selector.c +++ b/ccss/ccss-selector.c @@ -955,9 +955,12 @@ ccss_selector_query (ccss_selector_t const *self, is_matching = true; break; case CCSS_SELECTOR_MODALITY_CLASS: - name = ccss_node_get_class (node); - is_matching = !g_strcmp0 (name, + for (const char **classes = ccss_node_get_classes (node); + classes && *classes; + classes++) { + is_matching = !g_strcmp0 (*classes, ((ccss_class_selector_t *) self)->class_name); + } break; case CCSS_SELECTOR_MODALITY_ID: name = ccss_node_get_id (node); |