summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Staudinger <robsta@gnome.org>2009-09-08 14:50:03 +0200
committerRobert Staudinger <robsta@gnome.org>2009-09-08 14:50:03 +0200
commit8e49a2b63911ea7c4c97977afcc3220c9e052484 (patch)
tree5eed807191acaf77c45671795710d6aadfd057fc
parentb5610632b7e9930667df5b42d6eb5c19b503f47f (diff)
[feature] Support for multiple pseudo-classes per node.
-rw-r--r--NEWS1
-rw-r--r--ccss-doc/Makefile.am6
-rw-r--r--ccss-doc/ccss-sections.txt2
-rw-r--r--ccss-gtk/ccss-gtk-stylesheet.c2
-rw-r--r--ccss/ccss-node-priv.h6
-rw-r--r--ccss/ccss-node.c18
-rw-r--r--ccss/ccss-node.h25
-rw-r--r--ccss/ccss-selector.c7
8 files changed, 39 insertions, 28 deletions
diff --git a/NEWS b/NEWS
index 00f88c5..4d1b9fe 100644
--- a/NEWS
+++ b/NEWS
@@ -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);