[gtk+/nth-child: 23/33] css: Match pseudo-classes for siblings
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/nth-child: 23/33] css: Match pseudo-classes for siblings
- Date: Fri, 27 May 2011 23:05:36 +0000 (UTC)
commit 33ad90c875dfb8521993818adebafb8212727aef
Author: Benjamin Otte <otte redhat com>
Date: Wed May 25 20:05:55 2011 +0200
css: Match pseudo-classes for siblings
gtk/gtkcssselector.c | 35 ++++++++++++++++++++++++++++++++---
1 files changed, 32 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index d0397a6..d300d41 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -181,17 +181,46 @@ _gtk_css_selector_to_string (const GtkCssSelector *selector)
return g_string_free (string, FALSE);
}
+static GtkRegionFlags
+compute_region_flags_for_index (const GtkWidgetPath *path,
+ guint id)
+{
+ const GtkWidgetPath *siblings;
+ guint sibling_id, n_siblings;
+ GtkRegionFlags flags;
+
+ siblings = gtk_widget_path_iter_get_siblings (path, id);
+ if (siblings == NULL)
+ return 0;
+
+ sibling_id = gtk_widget_path_iter_get_sibling_index (path, id);
+ n_siblings = gtk_widget_path_length (siblings);
+
+ flags = (sibling_id % 2) ? GTK_REGION_EVEN : GTK_REGION_ODD;
+ if (sibling_id == 0)
+ flags |= GTK_REGION_FIRST;
+ if (sibling_id + 1 == n_siblings)
+ flags |= GTK_REGION_LAST;
+
+ return flags;
+}
+
static gboolean
gtk_css_selector_matches_type (const GtkCssSelector *selector,
const GtkWidgetPath *path,
guint id)
{
+ if (selector->pseudo_classes)
+ {
+ GtkRegionFlags flags = compute_region_flags_for_index (path, id);
+
+ if ((selector->pseudo_classes & flags) != selector->pseudo_classes)
+ return FALSE;
+ }
+
if (selector->name == NULL)
return TRUE;
- if (selector->pseudo_classes)
- return FALSE;
-
if (selector->type == G_TYPE_NONE)
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]